Schleifenstrukturen

Schleifenstrukturen ermöglichen es Ihnen, eine oder mehrere Code-Zeilen mehrfach auszuführen. Visual Basic unterstützt folgende Schleifenstrukturen:

·     Do...Loop

·     For...Next

·     For Each...Next

Do...Loop

Mit einer Do-Schleife können Sie einen Anweisungsblock beliebig oft ausführen. Es gibt mehrere Variationen der Do...Loop-Anweisung, doch alle werten eine numerische Bedingung aus, um festzustellen, ob der Anweisungsblock weiter ausgeführt werden soll. Wie bei If...Then muss die Bedingung ein Wert oder ein Ausdruck sein, der den Wert False (Null) oder True (ungleich Null) ergibt.

In der folgenden Do...Loop-Schleife werden die Anweisungen so lange ausgeführt, wie die Bedingung True ist:

Do While Bedingung

     Anweisungen

Loop

Wenn Visual Basic diese Do-Schleife ausführt, überprüft die Anwendung zunächst die Bedingung. Wenn die Bedingung False (Null) ergibt, überspringt Visual Basic alle folgenden Anweisungen. Wenn sie True (ungleich Null) ergibt, führt Visual Basic die Anweisungen aus und kehrt dann zur Do While-Anweisung zurück, um die Bedingung erneut zu prüfen.

Die Schleife wird daher beliebig oft ausgeführt, solange Bedingung ungleich Null bzw. True ist. Die Anweisungen werden nie ausgeführt, wenn Bedingung zu Beginn den Wert False hat. Bei der folgenden Prozedur wird z.B. gezählt, wie oft eine bestimmte Zielzeichenfolge innerhalb einer anderen Zeichenfolge vorkommt, indem die Schleife so oft ausgeführt wird, wie die Zielzeichenfolge gefunden wird:

Function CountStrings (longstring, target)

   Dim position, count

   position = 1

   Do While InStr(position, longstring, target)

      position = InStr(position, longstring, target) + 1

      count = count + 1

   Loop

   CountStrings = count

End Function

Wenn die Zielzeichenfolge nicht in der anderen Zeichenfolge enthalten ist, gibt InStr den Wert 0 zurück, und die Schleife wird nicht ausgeführt.

Eine andere Variante der Do...Loop-Anweisung führt zuerst die Anweisungen aus und prüft anschließend nach jeder Ausführung die Bedingung. Diese Variante gewähr­leistet, dass die Anweisungen mindestens einmal ausgeführt werden:

Do

     Anweisungen

Loop While Bedingung

Zwei weitere Varianten funktionieren analog zu den beiden vorhergehenden Varianten, wiederholen die Schleife aber nicht, solange die Bedingung True ergibt, sondern solange sie False ergibt.

Schleife keinmal, einmal oder mehrmals ausführen

Schleife mindestens einmal ausführen

Do Until Bedingung
  
Anweisungen
Loop

Do
 

 Anweisungen
Loop Until Bedingung

For...Next

Do-Schleifen eignen sich besonders für Situationen, in denen nicht vorhergesagt werden kann, wie oft die Anweisungen in der Schleife wiederholt werden müssen. Wenn Sie jedoch wissen, wie oft die Anweisungen ausgeführt werden müssen, erhalten Sie effizienteren Code, wenn Sie eine For...Next-Schleife verwenden. Im Gegensatz zur Do-Schleife verwendet die For-Schleife eine Zählervariable, deren Wert mit jeder Ausführung der Schleife zu- oder abnimmt. Die Syntax lautet wie folgt:

For Zähler = Startwert To Endwert [Step Schrittweite]

     Anweisungen

Next [Zähler]

Die Argumente Zähler, Startwert, Endwert und Schrittweite sind numerisch.

Anmerkung   Das Argument Schrittweite kann positiv oder negativ sein. Wenn Schrittweite positiv ist, muss Startwert kleiner oder gleich Endwert sein, da die Anweisungen in der Schleife sonst nicht ausgeführt werden. Wenn Schrittweite negativ ist, muss Startwert größer oder gleich Endwert sein, damit der Schleifenrumpf ausgeführt wird. Wenn Step nicht festgelegt ist, wird für Schrittweite standardmäßig der Wert 1 verwendet.

Beim Ausführen einer For-Schleife in Visual Basic geschieht folgendes:

1.    Zähler wird auf den Wert von Startwert gesetzt.

2.    Es wird geprüft, ob Zähler größer als Endwert ist. In diesem Fall beendet Visual Basic die Schleife.

(Wenn Schrittweite negativ ist, prüft Visual Basic, ob Zähler kleiner als Endwert ist.)

3.    Die Anweisungen werden ausgeführt.

4.    Zähler wird um 1 bzw. den für Schrittweite angegebenen Wert erhöht.

5.    Die Schritte 2 bis 4 werden wiederholt.

Der folgende Code gibt die Namen aller verfügbaren Bildschirmschriftarten aus:

Private Sub Form_Click ()

   Dim I As Integer

   For i = 0 To Screen.FontCount

      Print Screen.Fonts(i)

   Next

End Sub

For Each...Next

Eine For Each...Next-Schleife ist einer For...Next-Schleife ähnlich, wiederholt aber eine Gruppe von Anweisungen für alle Elemente in einer Auflistung von Objekten oder in einem Datenfeld, anstatt Anweisungen in einer festgelegten Anzahl von Schleifendurchläufen auszuführen. Das ist besonders dann hilfreich, wenn Sie nicht wissen, wie viele Elemente eine Auflistung enthält.

Die Syntax für For Each...Next lautet wie folgt:

For Each Element In Gruppe

     Anweisungen

Next Element

Die folgende Sub-Prozedur öffnet z.B. die Datei Biblio.mdb und trägt die Namen aller Tabellen in ein Listenfeld ein.

Sub ListTableDefs()

   Dim objDb As Database

   Set objDb = OpenDatabase("c:\vb\biblio.mdb", True, False)

   For Each TableDef In objDb.TableDefs()

      List1.AddItem TableDef.Name

   Next TableDef

End Sub

Bei der Verwendung von For Each...Next gelten die folgenden Einschränkungen:

·     Bei Auflistungen kann Element nur eine Variable vom Datentyp Variant, eine allgemeine Variable vom Typ Object oder ein im Objektkatalog aufgeführtes Objekt sein.

·     Bei Datenfeldern kann Element nur eine Variable vom Datentyp Variant sein.

·     Sie können For Each...Next nicht mit einem Datenfeld eines benutzerdefinierten Datentyps verwenden, da der Datentyp Variant keine benutzerdefinierten Datentypen enthalten kann.