Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel 2013 VBA Grundkurs

Do/Loop-Schleife

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Eine Do/Loop-Schleife ist 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 ganz gerne jetzt was über Do/Loop-Schleifen erzählen. Das sind ja die anderen, die potenziell unendlichen Schleifen. Das Problem ist, es gibt in der Excel-Welt aus VBA-Sicht so nichts potenziell Unendliches. Alles, was dort vorhanden ist, ist irgendwie zählbar. Aber, sobald Sie einen kleinen Schritt außerhalb dieser Welt machen, kommen Sie ganz schnell an eine Stelle, wo es doch unendlich ist. Und zwar da, wo man es eigentlich gar nicht erwartet, nämlich beim Zugriff auf Dateien. Sie wollen beispielsweise in Excel irgendwas importieren und bieten dem Benutzer jetzt eine Liste an von den in Frage kommenden Dateien. Die sind typischerweise .xlst, .xlsm, .xlsx-Dateien. Aber ich werde das jetzt ein bisschen weiter fassen und beliebige Dateien anzeigen, die werden ja nicht geöffnet. Und das Problem ist, dass Dateien nicht zu einer Auflistung gehören und damit nicht zählbar sind. Das mag Sie ein bisschen überraschen, weil Sie natürlich im Datei-Manager nachgucken können, im Explorer und sehen da eine Zahl, wie viele Dateien es gibt. Tatsächlich wird diese Zahl aber in kleinen Abständen immer wieder gezählt und aktualisiert. Es ist nämlich ein Netzwerk fähiges Betriebssystem. Das heißt, während Sie drauf gucken, kann jemand von außen aus Dateien dazufügen oder löschen. Sie sind also nie sicher, ob Sie gerade die Gesamtmenge haben. Deswegen sind Dateien unzählbar. Wir müssen einfach so lange welche anfordern, wie es noch welche gibt. Das Beispiel wird also jetzt aus einem fast beliebigen Verzeichnis die Dateinamen unten in den Direktbereich schreiben. Also entsprechend Sub DateienAnzeigen. Und wir brauchen als Erstes eine Datei-Variable, die nämlich nur den String, den Text, den Namen der Datei hat. Und dieser wird gespeichert mit einem Befehl, den Sie vielleicht noch aus früheren DOS-Zeiten kennen könnten. Dort hat der Dir-Befehl alle Dateien direkt auf dem Bildschirm angezeigt. Das ist hier anders. Sie geben ihm ein Suchmuster vor. C:\Windows, beispielsweise, Sternchen, Punkt, Sternchen. Und dann liefert er Ihnen die erste Datei aus diesem Verzeichnis. Es ist eine Function. Und diese Function liefert den Namen der ersten Datei. Und jetzt muss ich so lange weiter fragen, also mache so lange, bis da nichts mehr drinsteht. Also, DoUntil strDatei gleich Leerstring mache, also so lange, bis dieser Fall eintritt, dass beim Nachfragen kein Dateiname mehr kommt. Der Dir-Befehl kümmert sich selber darum, dass er automatisch jeweils die nächste Datei liefert. Und wenn es keine mehr gibt, ist es eben leer. Das ist ein Verfahren, das kennen Sie möglicherweise aus dem Hammelsprung im Deutschen Bundestag. Da werden alle Abgeordneten rausgeschickt und gehen dann durch drei Eingänge wieder zurück: Ja, Nein, Enthaltung. Und dann steht ein Saaldiener an der Tür und zählt. Und solange Leute reinkommen, macht er seine Striche und es ist ihm völlig egal, wie viele da draußen stehen. Solange noch die nächste Datei einen Namen hat, ist es eine gültige Datei. Das ist hier also genauso. Und zu dem Do gehört ein Loop. Sie sehen, das ist hier die abweisende Version einer Do/Loop-Schleife. Die Bedingung steht direkt hier vorne. Denn es könnte ja sein, dass in dem Verzeichnis gar kein Dateiname enthalten ist. Das, was ich jetzt geschrieben habe, ist das klassische Beispiel für eine endlose Schleife. Das heißt, nämlich ich frage an der Tür sozusagen nach dem ersten Dateinamen, und frage nach dem ersten Dateinamen, und nach dem Dateinamen, und nach dem Dateinamen. Ich habe vergessen zu erwähnen, dass derjenige der da steht und Dateinamen in der Hand hat, mit dem ja weiter gehen möge. Ich muss auch irgendwann erwähnen, dass ich gerne den nächsten Dateinamen haben möchte. Und der wird ermittelt, indem Sie die Dir-Funktion aufrufen ohne Argumente. Die weiß dann automatisch welches Verzeichnis gemeint ist und liefert den jeweils nächsten. Und irgendwann eben keinen mehr. Damit wir die Dateien auch irgendwo sehen, müssen wir mit Debug.Print den Dateinamen unten einfach ausdrucken. Und das war es schon. Also, den ersten Dateinamen ermittelt die Dir-Funktion mit einem Argument, nämlich einem Pfad und einem Suchmuster. Die Schleife läuft solange, bis die Variable leer ist. Bis dahin druckt sie alles aus, fragt dann den nächsten, nämlich Dir ohne Argument und wiederholt. Unbedingt speichern. Wenn Sie schon wenig speichern, bei Do/Loop auf jeden Fall, sonst können Sie es eventuell nur noch mit Strg unterbrechen auf der Tastatur, stoppen. Wenn es jetzt gut läuft, ich mache mal ein bisschen Platz, falls da ein Paar mehr Dateien sind. Kriegen wir mit F5 jetzt sofort viele Dateien in das Fenster. Es sind nicht wirklich viele, es hält sich in Grenzen. Aber das ist ja auch noch ein kleines Verzeichnis. Das war schon der Klassiker für eine Do/Loop-Schleife. Also, irgendeine Bedingung, dir geprüft wird, und im Rahmen der Schleife ganz wichtig wieder überprüft wird. Denn die muss sich ja ändern können. Und das ist das Risiko bei der Do/Loop-Schleife. Es könnte sein, dass Sie an der Stelle die Bedingung so formulieren, dass sie nie erfüllbar ist. Weil dieses Beispiel sich gerade mit Dateien beschäftigt, möchte ich Ihnen bei der Gelegenheit schnell zwei Befehle zeigen. Ich mache einfach mal mit Abstand dahinter: vbTab ist die Konstante, die hier ein Tabulator-Zeichen einfügt: das Datum und die Größe der Datei. Also, ein Befehl, der FileDateTime heißt, eine Funktion, Klammer auf. Und die will, da muss man aufpassen, den kompletten Pfad wissen. Also schreibe ich jetzt der Einfachheit halber mal hier C:\Windows\ und dann verkettet mit strDatei, Klammer zu. Das können wir erstmal probieren. Hier unten räume ich mal eben auf: reinklicken, Strg + A ist alles markieren und Entfernen-Taste. Das Sie schon mal sehen was dabei rauskommt, mit F5 steht jetzt hier vollständig Tag und Uhrzeit des Speicherns. Und dasselbe gibt es auch (ich kopiere mir das einmal einfach hinten dran) für die Größe der Datei. Das ist in Bytes, nicht wundern, und heißt dann nicht FileDateTime, sondern FileLen, die Länge. Und da ist ein Kaufmanns-Und zu viel. Jetzt muss ich auch mal ein bisschen rüberschieben, damit Sie das komplett sehen und hier wieder Platz schaffen. Das heißt, erst der Dateiname, dann Datum und Zeit, und dann Größe in Bytes. Einmal F5 und Sie sehen hier. Das ist eine relativ kleine Datei mit 126 Kilobyte. Die ist noch viel kleiner, eine ini-Datei, das ist ja nur eine Text-Datei mit 167 Byte. Da könnte man jetzt noch ein bisschen schön recht eine formatieren, nur weil die Gelegenheit gerade günstig ist. Das ist nicht an den Do/Loop-Befehl gebunden, aber bei der Gelegenheit, wo Dateien behandelt werden, sehr hilfreich, wenn man die Befehle schon mal kennt.

Excel 2013 VBA Grundkurs

Holen Sie aus Excel 2013 mit der integrierten Programmiersprache VBA auch das letzte Quäntchen an Funktion heraus und lassen Sie sich dazu zeigen, was alles möglich ist.

6 Std. 18 min (63 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

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!