Excel 2016 VBA Grundkurs

Do/Loop-Schleife

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Eine Do/Loop-Schleife läuft potentiell immer unendlich und benötigt ein Abbruchkriterium, weil beim Programmieren noch nicht vorhersagbar ist, wie viele Durchläufe sie haben wird.

Transkript

Eigentlich würde ich Ihnen jetzt ganz gerne etwas zu dieser potentiellen unendlichen Schleife mit dem Do/Loop erklären. Das Problem ist nur, in Access brauchen Sie die fast gar nicht. In Access selber sind alle Objekte in Aufzählung und damit zählbar. Jede Aufzählung weiß immer, wie viel darin enthalten ist. Sie haben also so erstmal keinen Anlass, eine unendliche Schleife zu benutzen, es sei denn, Sie würden Benutzereingaben erwarten, und irgendwann sagt der Benutzer: Jetzt bin ich fertig. Das erfolgt aber eher in der Tabelle und ist damit auch zählbar. Trotzdem gibt es eine Gelegenheit, wo Sie unzählbare Elemente haben. Und zwar an einer Stelle, wo Sie es erstmal überhaupt nicht erwarten würden wahrscheinlich: im Datei Explorer. Also dort, wo Dateien - offensichtlich ja zählbar - angeboten werden. Sie sind deswegen unzählbar, weil das Betriebssystem netzwerkfähig ist und jemand anders, während Sie auf die Dateien gucken und glauben, die wären statisch, im Hintergrund Dateien hinzufügt oder entfernt. Sie müssen also einfach immer nachprüfen: Gibt es da noch eine im Anschluss oder nicht? Und das ist das Beispiel, das ich benutzen möchte. Ich werde einfach die Dateien eines bestimmen Verzeichnisses anzeigen, die Sie Beispielweise einem Benutzer zur Auswahl anbieten wollen. Dazu muss ich mir erstmal den Pfad dahin merken; den werde ich mehrmals brauchen. Und zwar machen wir das gleich in einer Konstanten. Deswegen kennzeichne ich das zusätzlich mit einem C. Also eine Modul-öffentliche Konstante, Datentyp String. Und da steht der Pfad drin. Nehmen wir einfach mal Windows... Das ist ein Verzeichnis, wo mit Sicherheit eine Menge drinsteht. Und natürlich muss hier Const davorstehen, damit es auch eine Konstante wird. Jetzt kommt die eigentliche Prozedur. Sub nennen wir sie mal, DateienAnzeigen. Die braucht eine Variable, in der der jeweils nächste Dateiname abgelegt werden kann. Also eine lokale Variable: Dim strDatei As String. Und um den Namen der jeweils ersten Datei zu ermitteln, gibt es eine Funktion, deren Name Ihnen bekannt vorkommen könnte. Die heißt nämlich Dir. Damals war es üblich, dass mit dem Dir-Befehl einfach der gesamte Inhalt eines Verzeichnisses eines Directories auf dem Bildschirm angezeigt wurde. Hier, mit der Dir-Function, ist es anders. Es wird jeweils die erste Datei angezeigt. Und zwar müssen Sie den Pfad dazu angeben. Dafür hatte ich die Konstante, verkettet mit einem Suchmuster. Und das tut es schon. Damit oben der Unterstrich besser zu sehen ist, mache ich hier wieder das Kommentarzeichen hin. Da heißt, in diesem Pfad werden alle Dateien angezeigt. Im wirklichen Leben würden Sie möglicherweise so etwas schreiben. Also alle neueren Excel-Dateien, die wirklich vier Zeichenänderungen haben, oder die neueren und die älteren nach Belieben. Aber das sind jetzt zu wenige - ich will möglichst viele sehen. Der Dir-Befehl mit Argumenten liefert in strDatei die erste Datei zurück - genauer gesagt den ersten Dateinamen - wenn es denn einen gibt! Und jetzt kommt die Do/Loop-Schleife; ich schreibe schon mal Do/Loop hin. Und zwar die abweisende Variante, wo ich zuerst überprüfe, ob die Datei vielleicht leer ist. Ich darf das so lange machen, bis ich eine leere Datei kriege. Until - bis - strDatei gleich Leerstring. Das bedeutet, der Dir-Befehl hat keine Datei mehr gefunden, und das war es dann. Das können Sie sich ungefähr so vorstellen, wie im deutschen Bundestag beim Hammelsprung. Alle Abgeordneten gehen raus. Dann gibt es drei Türen - Ja, Nein, Enthaltung - und für jede Tür gibt es einen Saaldiener, oft zählt ein Schriftführer, und der notiert den ersten aus der langen Schlange, die da für diese Tür ansteht. In unserem Beispiel: Der Dir-Befehl merkt sich den Dateinamen. Und das wird so lange wiederholt, bis die Schlange zu Ende ist. Ob sich zwischendurch welche anstellen, hinten am Ende, oder welche weggehen, ist dem Schriftführer an der Tür völlig egal. Er guckt einfach, ob da gerade noch einer steht, nennt mir dessen Namen, soweit es die Datei betrifft, und guckt dann nach dem nächsten. Das ist das, was gerne vergessen wird, dieses guckt dann nach dem nächsten. Das muss ich ihm auch erklären. Das passiert in der Do/Loop-Schleife so nicht. Dieses wäre wirklich eine endlose Schleife, die Sie nur mit Steuerung+Pause stoppen können. Was Sie machen müssen, ist auch dafür zu sorgen, dass die nächste Datei erfragt wird. Und das passiert mit dem Dir-Befehl ohne Argumente. Dieser startet neu, an diesem Pfad, und liefert die erste Datei, und dieser liefert die nächste Datei. Solange es welche gibt, werde ich die da unten mit Debug.Print ausdrucken, also einfach strDatei. Das war es schon. Sie müssen an dieser Stelle unbedingt speichern, denn das ist ja eine potentiell unendliche Schleife. Das passiert mir ungefähr jedes vierte, fünfte Mal auch, dass ich so einen Befehl zum Weitergehen vergesse. Dann fragt im übertragenen Sinn der Saaldiener an der Tür immer wieder die erste Datei nach ihrem Dateinamen, und wieder die erste Datei. Und das stoppt nach einigen 1000 oder 10 000 Eintragungen einfach. Und das merken Sie nach einigen 10 oder 100 000 Wiederholungen, einfach weil es sehr lange dauert. Jetzt wird es sehr schnell gehen. Da sind vermutlich auch nicht besonders viele Dateien drin. Ich brauche nur ein bisschen Platz da unten. Ich kann also hier reinklicken, F5 drücken, und Sie sehen - klack, da sind die Ergebnisse. Wenn hier unten mehr als 200 Ergebnisse drin stehen, wird es sowieso gelöscht und wieder neu reingeschrieben. Aber es hat funktioniert. Der Do/Loop-Befehl ist hier vollständig in seiner abweisenden Variante, weil Sie zuerst prüfen müssen, ob überhaupt eine Datei drin war. Aber weil wir uns gerade so schön mit Dateien beschäftigen - ich werde hier mit Steuerung A im Direktbereich alles markieren und mit Entfernen rausschmeißen - weil wir uns gerade so schön mit Dateien beschäftigen, möchte ich Ihnen noch schnell zwei andere Befehle zeigen, die in dem Zusammenhang sehr praktisch sind. Denn ich möchte zu der Datei auch ihre Größe anzeigen. Also verkettet mit - jetzt brauche ich so ein Tab-Zeichen für einen Abstand, das heißt als Konstante vbTab - und dann wiederum verkettet gibt es einen Befehl, FileLen, der die Länge, sprich die Größe in Bytes einer Datei angeben kann. Dazu muss es aber wieder der komplette Pfad sein, deswegen brauchte ich das als Konstante. Verkettet mit strDatei Klammer zu. Das ist in Bytes und unformatiert. Aber wenn Sie schon mal gucken wollen, nach dem Speichern mit F5, sehen Sie jetzt: Hier ist das Tab-Zeichen dazwischen, deswegen immer so unterschiedliche Abstände. Wenn Sie da die Zahl angucken, das sind in diesem Fall 60 Kilobyte. Das könnte ich jetzt noch ein bisschen formatieren, da gibt es einen Befehl, der heißt Format. Aber ich will es jetzt nicht übertreiben. Jetzt kommt nämlich noch die zweite Information, wiederum mit vbTab getrennt. Die beschäftigt sich mit dem Datum der Speicherung. Also FileDateTime heißt das, auch wieder von dem Pfad verkettet mit strDatei. Aber ohne Leerzeichen wird es nicht erkannt... Und wieder Klammer zu. Das wieder anklicken. Steuerung A zum Markieren, Entfernen zum Aufräumen. Und wenn ich das jetzt mit F5 laufen lasse, es ist noch nicht wirklich schön, aber man sieht es vielleicht hier, bei so einer Datei: Da ist der Dateiname, da ist die Größe, 11,3 Kilobyte. Und hier ist Datum und Uhrzeit drin. Das ist also, wenn Sie es mal irgendwie in einer schönen Liste brauchen, sehr leicht zu erreichen. Aber auch ohne dieses Anhängsel hier hinten - das ist der Rest, der sich mit dem eigentlichen Do/Loop beschäftigt, und der eigentlich im Normalfall nur an dieser Stelle auftaucht.

Excel 2016 VBA Grundkurs

Lassen Sie sich systematisch in die Excel-Programmierung mit Visual Basic for Applications (VBA) einführen.

7 Std. 25 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:30.08.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!