Einer der größten Vorteile von Programmcode gegenüber manueller Arbeit ist die Fähigkeit, eine Aufgabe beliebig oft zu wiederholen – ohne Ermüdung, ohne Fehler durch Unachtsamkeit und in Sekundenbruchteilen. Genau dafür gibt es Schleifen. In VBA stehen dafür mehrere Konstrukte zur Verfügung: For…Next für Situationen, in denen man genau weiß, wie oft etwas wiederholt werden soll, For Each…Next zum Durchlaufen von Auflistungen, sowie Do…Loop und While…Wend für Fälle, in denen die Anzahl der Durchläufe vorab nicht bekannt ist. In diesem Artikel zeigen wir, wie alle diese Konstrukte funktionieren, wo ihre Stärken liegen und worauf man achten muss.
For…Next – die Zählschleife
Die For…Next-Schleife ist die klassische Zählschleife. Man gibt einen Startwert, einen Endwert und optional eine Schrittweite an, und VBA führt den Schleifenkörper für jeden Schritt einmal aus. Das sieht in seiner einfachsten Form so aus:
Dim i As Long For i = 1 To 10 Debug.Print i Next i
Dieser Code gibt die Zahlen 1 bis 10 im Direktbereich aus. Die Zählvariable i beginnt bei 1, wird nach jedem Durchlauf um 1 erhöht und die Schleife endet, sobald i den Wert 10 überschreitet.
Das Schreiben von Next i statt nur Next ist optional, macht den Code bei verschachtelten Schleifen aber deutlich lesbarer – denn bei mehreren ineinander verschachtelten Schleifen sieht man sofort, welches Next zu welchem For gehört.
Als Zählvariable sollte man stets Long verwenden – nicht Integer, wie wir im Artikel VBA [basics]: Variablen und Datentypen bereits begründet haben.
Schrittweite anpassen mit Step
Standardmäßig zählt For…Next in Einerschritten aufwärts. Mit dem Schlüsselwort Step lässt sich das ändern – sowohl die Schrittweite als auch die Richtung:
'Nur gerade Zahlen von 2 bis 20:
For i = 2 To 20 Step 2
Debug.Print i
Next i
'Rückwärts von 10 bis 1:
For i = 10 To 1 Step -1
Debug.Print i
Next i
Das Rückwärtszählen ist besonders dann nützlich, wenn man während des Schleifendurchlaufs Elemente aus einer Liste entfernt – weil man beim Vorwärtszählen nach dem Entfernen eines Elements die Indizes durcheinanderbringt.
For Each…Next – Auflistungen durchlaufen
For Each…Next ist die elegantere Variante, wenn man nicht mit einem Zähler arbeiten möchte, sondern direkt über die Elemente einer Auflistung iterieren will.
In Access begegnet uns das häufig beim Durchlaufen aller Steuerelemente eines Formulars oder aller Felder eines Datensatzes:
Dim ctl As Control For Each ctl In Me.Controls Debug.Print ctl.Name Next ctl
Dieser Code gibt die Namen aller Steuerelemente des aktuellen Formulars im Direktbereich aus.
Man muss weder wissen, wie viele Steuerelemente vorhanden sind, noch einen Zähler verwalten – For Each erledigt das automatisch.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo
![Access [basics]](https://access-basics.de/wp-content/uploads/2021/02/logo400.png)