Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Dateien öffnen mittels Schleife





Frage

Hallöchen an alle, die auch am Sonntag das exceln nicht lassen können :o) Ich möchte folgendes Problem lösen: Ich arbeite an einem Belegungsplan für ein Stadion. Ich bin jetzt dabei, die Dauerkarten einzutragen und zu verwalten. Zu Beginn einer neuen Saison ist das ja kein Problem, aber wenn dann die Saison läuft und schon fleißig Karten verkauft wurden, ist es ja nicht mehr gegeben, dass der gewünschte Platz in allen Spielen verfügbar ist. Mein kleines Programmchen kann jetzt zumindestens schon prüfen, ob der Platz im Stadion vorhanden ist, ob er bereits als Dauerkarte vergeben ist und es zeigt auch an, in welchen Heimspielen der Platz noch frei wäre. Jetzt zum Problem: Ist der Platz nicht mehr in allen Heimspielen verfügbar, möchte ich die Dauerkarte trotzdem eintragen können, dann eben erst ab Heimspiel 2 oder 10 oder wie der Platz halt frei ist. Kann man das mit einer For/Next Schleife lösen? und wenn ja (oder auch wenn nein) - WIE? Achja, eins noch. Das "Prüfprogramm" befindet sich in der Datei "Start". Für die Heimspiele sind dann jeweils eigene Dateien angelegt, Heimspiel1.xls bis Heimspiel17. Zum Eintragen der Dauerkarte müsste dann nach und nach jede Datei geöffnet werden. Ist der Platz verfügbar, steht im Prüfprogramm neben Heimspiel 1 "P", ist der Platz verkauft, steht "O". (Die Buchstaben ergeben mit der Schriftart wingding2 ein Häkchen od. ein Kreuz.) Ich hoffe, ihr könnt mir folgen und mir eine Lösung geben. schönes Pfingstwochenende noch kerstin

Antwort 1 von coros

Hi Kerstin,

irgendwie komm ich nicht ganz mit, was Du erreichen möchtest. Was soll den die Schleife machen? Dir auflisten in welchen Spielen noch ein Platz frei wäre? Welcher Plaz frei ist?

Ich glaube Du solltest noch mal etwas genauer schreiben, was Du mit einer Schleife erledigen lassen möchtest.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von rehleinkh

Hallo Coros,

ok, ich versuchs nochmal:

In der Datei "Start" prüfe ich, ob die Dauerkarte verfügbar ist. Eingegeben werden der Block, die Reihe und der Platz. Dann prüft mein Programm und gibt folgende Werte aus:

Platz im Stadion vorhanden: ja/nein

bereits als Dauerkarte vergeben: ja/nein

frei im Heimspiel 1: P (wäre ja) / O (wäre nein)
frei im Heimspiel 2: P (wäre ja) / O (wäre nein)
... bis Heimspiel 17.

dann könnte ich mit Klick auf einen Button die Dauerkarte eintragen lassen. Dazu muss die Heimspiel-Datei aufgerufen werden (alle einzeln und nacheinander). In dieser Datei befindet sich der Stadion-Belegungsplan. Mein Programm findet nun den richtigen Block, die richtige Reihe und den richtigen Platz und trägt dann als Kommentar in der entsprechenden Zelle den Dauerkartenbesitzer ein. (mein letztes Posting, vielleicht erinnerst du dich)

Jetzt möchte ich, dass dies von Heimspiel 1 bis Heimspiel 17 passiert, ohne dass ich alles einzeln eingeben muss. Oder eben nur von Heimspiel 10 bis 17, je nach dem, wie der Platz noch verfügbar ist.

ich hätte gedacht es geht mit einer schleife:

für x=1 bis 17
Datei Heimspiel_x.xls öffnen, Kommentar eintragen
x = x+1
nächstes x

Aber irgendwie kann ich den Dateinamen so nicht angeben.

gruß
Kerstin

Antwort 3 von coros

Moin Kerstin,

Du schreibst zwar immer schön, was Du erreichen möchtest, aber nicht einmal, in welchen Bereichen sich Deine Daten befinden. Ich habe Dir mal einen Beispielcode erstellt. Bei diesem Beispiel befinden sich in der Spalte A die Heimspielnamen wie z.B. Heimspiel1, Heimspeil2 usw. In Spalte B befinden sich die Plätze, wie z.B. Platz 1, Platz 2 usw. In Spalte C befindet sich der Name der Person, der die Karte erwerben möchte, z.B. Karl Mustermann, Lothar Matthäus, Oliver Kahn usw. Bedingung bei dem nachfolgenden Makro ist es, dass sich die Datei “Start“ in dem selben Verzeichnis befindet wie die Dateien, in dem die Namen eingetragen werden sollen und das die Namen der Dateien gleich der Namen in Spalte A sind, also z.B. Heimspiel1 und Heimspiel1.xls. Das Makro macht nun folgendes: Es ermittelt zunächst die Anzahl der Dateien in dem Verzeichnis. Dann werden durch eine Schleife die Dateien geöffnet, deren Heimspielnamen (Heimspiel1 oder Heimspiel2 oder Heimspiel3 usw.) in Spalte A aufgeführt sind. Durch eine zweite Schleife wird überprüft, ob der Name aus Spalte A gleich dem Namen der geöffneten Datei ist und es wird eine 3. Schleife gestartet. Die prüft nun den Platz aus Spalte B mit dem Platz in der Datei die geöffnet wurde. Wenn der Platz gefunden wurde, wird überprüft, ob in der neu geöffneten Datei in Spalte B, (das ist die Spalte in der bei den Heimspieldateien der Buchstaben O für belegt und P für frei die Spalte B steht) der Buchstabe P steht. Steht dort ein P wird zunächst noch einmal geprüft, ob in der Datei “Start“ in der entsprechenden Zelle in Spalte C, also die Spalte in der der Kartenkäufer steht, wirklich einen Namen enthält. Das habe ich gemacht, damit nicht, wenn dort mal kein Name steht, nicht in einem der Heimspielblätter ein mit einem Leertext überschrieben, sprich also gelöscht wird. Enthält also die Zelle in Spalte C einen Namen, wird in der Heimspieldatei in Spalte C in der Zeile, in der sich der entsprechende Platz befindet, ein Kommentar eingefügt, der den Text “ Kartenbesitzer:“ gefolgt von dem Namen enthält. Danach wird dann die Heimspieldatei wieder geschlossen und die Nächste wird geöffnet.

Da ich mit dem Text und dem Makro mal wieder an die zulässige Wortgrenze von 5000 Worten herankomme, muss ich den Beitrag splitten. Der Makrocode kommt dann in der nächsten Antwort.

Antwort 4 von coros

Hier nun als Vortsetzung der Makrocode:
Kopiere ihn in ein StandardModul und weise es einer Befehlsschaltfläche zu.

Option Explicit

Sub Freie_Plätze_suchen()
Dim letzte_Zeile As Long, Anzahl_Plätze As Long, Auslesung_Platz As String, _
Auslesung_Belegt As String, Zeile As Long, Wiederholungen As Integer, _
Wiederholungen_Plätze As Long, letzte_Zeile_Plätze As Long, Dateianzahl As Integer, _
Anzahl_Dateien As Integer, Verzeichnis  As String, Länge_Dateiname As Integer, _
Dateiname As String
Application.ScreenUpdating = False
Verzeichnis = ThisWorkbook.Path
letzte_Zeile_Plätze = Range("A65536").End(xlUp).Row
With Application.FileSearch
    .NewSearch
    .LookIn = Verzeichnis
    .SearchSubFolders = False
    .FileType = msoFileTypeExcelWorkbooks
    .Execute
For Dateianzahl = 1 To .FoundFiles.Count
Anzahl_Dateien = Anzahl_Dateien + 1
Next Dateianzahl
End With
For Wiederholungen = 1 To Anzahl_Dateien
Workbooks.Open Filename:=Verzeichnis & "\" & Cells(Wiederholungen, 1) & ".xls"
Länge_Dateiname = Len(ActiveWorkbook.Name) - 4
Dateiname = Left(ActiveWorkbook.Name, Länge_Dateiname)
letzte_Zeile = Sheets(1).Range("A65536").End(xlUp).Row
For Wiederholungen_Plätze = 1 To letzte_Zeile_Plätze
If Workbooks("Start.xls").Sheets(1).Cells(Wiederholungen_Plätze, 1) = Dateiname Then
For Anzahl_Plätze = 1 To letzte_Zeile
Auslesung_Platz = Workbooks(Dateiname & ".xls").Sheets(1).Cells(Anzahl_Plätze, 1)
Auslesung_Belegt = Workbooks(Dateiname & ".xls").Sheets(1).Cells(Anzahl_Plätze, 2)
If Workbooks("Start.xls").Sheets(1).Cells(Wiederholungen_Plätze, 2) = _
Auslesung_Platz And Auslesung_Belegt = "P" Then
If Workbooks("Start.xls").Sheets(1).Cells(Wiederholungen_Plätze, 3) <> "" Then
Workbooks(Dateiname & ".xls").Sheets(1).Cells(Anzahl_Plätze, 3).ClearComments
Workbooks(Dateiname & ".xls").Sheets(1).Cells(Anzahl_Plätze, 3).AddComment
With Workbooks(Dateiname & ".xls").Sheets(1).Cells(Anzahl_Plätze, 3).Comment
.Visible = False
.Text Text:="Kartenbesitzer:" & Chr(10) & Workbooks("Start.xls").Sheets(1).Cells(Wiederholungen_Plätze, 3)
End With
End If
End If
Next
End If
Next
Windows(Dateiname & ".xls").Activate
ActiveWindow.Close True
Next
End Sub



Ich hoffe, Du kommst mit dem Beispielcode klar. Wenn es Dir hilft, dann schick ich Dir gerne mal die Beispieldatei, mit der ich das Makro getestet habe mal zu. Allerdings benötige ich dann Deine E-Mailadresse. Wenn Du Deine E-Mailadresse hier hinschreibst, dann schreibe möglichst nicht Deine Adresse wie im Normalfall, also Name@Doamin.de sondern z.B. Meine E-Mailadresse:Name@Domain.de (alles als ein Wort) oder NameaddDoamain.de. Ist nur ein tipp, damit Du nicht irgendwelche Spammmails von Programmen erhälst, die das Internet nach Adressen durchforsten. Die E-Mailadresse wie in den Beispielen gibt es ja schließlich nicht.

Für ein spezielleres Makro benötigt man schon mehr Infos zu den Bereichen oder sogar die gesamte Datei, wenn diese sehr verschachtelt ist.

Aber versuche erstmal mit dem Beispiel klar zu kommen. Bei Problemen melde Dich.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 5 von rehleinkh

Hallo Coros,

erstmal vielen Dank für deine Antwort. Ich werde mich jetzt mal durchforsten und mich dann nochmal bei dir melden. Klingt zumindest schon mal ganz gut. Sorry, dass ich nicht alles so genau beschrieben habe, aber ich dachte, mir fehlt ja nur noch ein kleiner Teil meines Makros, nämlich das öffnen der Dateien, das andere macht es ja alles schon. Egal, ich melde mich auf jeden Fall noch mal.

einen schönen Feiertag-Abend noch.
Kerstin

Antwort 6 von rehleinkh

Hallo Coros,
Hallo an alle anderen Mitleser,

nach dem ich deinen Vorschlag ausgiebig studiert und mit meinen anfänglichen Versuchen verglichen habe, sind mir 2 Fehler von mir aufgefallen:
1. - der blödeste von allen: ich hatte noch nicht alle Heimspieldateien in den Ordner kopiert
2. - ich habe bei der Dateinamenangabe mit Variable die Endung .xls vergessen

jetzt funktioniert meine Schleife wie folgt:

Sub DauerkarteEintragen()
Dim Block As String ´manuelle Eingabe
Dim Reihe As Byte ´manuelle Eingabe
Dim Platz As Byte ´manuelle Eingabe
Dim Blatt As String ´Zuordnung über Makro
Dim Zeile As Byte ´Zuordnung über Makro
Dim Datei As String
Dim Erstes As Byte
Dim Beginn As Byte
...
Datei = "C:\Ordner\Belegungsplan\Heimspiel"

´der Variable Erstes wird im Makro der Wert zugewiesen, ab welchen Heimspiel die Dauerkarte eingetragen wird
...
For Beginn = Erstes To 17
Workbooks.Open Filename:=Datei & Beginn & ".xls"
Sheets(Blatt).Select
Rows(Zeile).Select
Selection.Find(What:=Platz, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate

KommentarEintragen

ActiveWorkbook.Save
ActiveWorkbook.Close

Erstes = Erstes + 1
Next
...
end sub

Das komplette Makro ist um einiges länger aber es ging ja nur um die Schleife. Kann sein, dass die Schleife noch verkürzt oder optimiert werden kann, aber sie funktioniert. :o)

Also besten Dank und bis zum nächsten Mal

kerstin

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: