"Do...Loop"-Anweisungen verwenden

Sie können "Do...Loop"-Anweisungen verwenden, um einen Anweisungsblock unbegrenzt oft auszuführen. Die Anweisungen werden entweder wiederholt, wenn eine Bedingung "True" ist oder bis eine Bedingung "True" wird.

Anweisungen wiederholen, während eine Bedingung "True" ist

Verwenden Sie das Schlüsselwort "While", um eine Bedingung in einer "Do...Loop"-Anweisung zu prüfen. Sie können die Bedingung prüfen, bevor Sie die Schleife beginnen (wie im folgenden Beispiel für ChkFirstWhile gezeigt), oder Sie können sie prüfen, nachdem die Schleife mindestens einmal ausgeführt wurde (wie im Beispiel für ChkLastWhile gezeigt). Wenn in der ChkFirstWhile-Prozedur "myNum" auf 9 statt auf 20 gesetzt ist, werden die Anweisungen innerhalb der Schleife nie ausgeführt. In der ChkLastWhile-Prozedur werden die Anweisungen innerhalb der Schleife nur einmal ausgeführt, da die Bedingung bereits "False" ist.

Das folgende Beispiel veranschaulicht die Verwendung von while:

Beispiel 1:

Sub ChkFirstWhile()
        Dim counter, myNum
        counter = 0
         myNum = 20
        Do While myNum > 10
           myNum = myNum - 1
           counter = counter + 1
        Loop
        'This loop made 10 repetitions."
End Sub

Beispiel 2:

Sub ChkFirstWhile()
    Dim counter, myNum
    counter = 0
    myNum = 9
    Do While myNum > 10
        myNum = myNum - 1
        counter = counter + 1
    Loop
    'This loop made 0 repetitions.
End Sub

Beispiel 3:

Sub ChkLastWhile()
        Dim counter, myNum
        counter = 0
        myNum = 9
        Do
                myNum = myNum - 1
                counter = counter + 1
        Loop While myNum > 10
        'This loop made 1 repetition.
End Sub

Beispiel 4:

Sub ExampleWithDoWhile()
        Dim counter, myNum
        counter = 0
        myNum = 15
        Do While myNum > 10
                        myNum = myNum - 2
                        counter = counter + 1
        Loop
' This loop reduced myNum to 9 and made 3 repetitions
End Sub

Beispiel 5:

Sub ExampleWithDoLoopWhile()
         Dim counter, myNum
        counter = 0
        myNum = 5
        Do
                        myNum = myNum + 1
                        counter = counter + 1
        Loop While myNum < 10
' This loop increased myNum to 10 and made 5 repetitions.
End Sub

Beispiel 6:

Sub ChkLastWhile()
   Dim counter, myNum
   counter = 0
   myNum = 9
   Do
      myNum = myNum - 1
      counter = counter + 1
   Loop While myNum > 10
   'This loop made 1 repetition.
End Sub

Anweisung wiederholen, bis eine Bedingung "True" wird

Es gibt zwei Möglichkeiten, mit dem Schlüsselwort Until eine Bedingung in einer "Do...Loop"-Anweisung zu prüfen. Sie können die Bedingung prüfen, bevor Sie die Schleife beginnen (wie im folgenden Beispiel für ChkFirstUntil gezeigt), oder Sie können sie prüfen, nachdem die Schleife mindestens einmal ausgeführt wurde (wie im Beispiel für ChkLastUntil gezeigt). Solange die Bedingung "False" ist, tritt die Schleife auf.

Das folgende Beispiel veranschaulicht die Verwendung von until:

Beispiel 1:

Sub ChkFirstUntil()
   Dim counter, myNum
   counter = 0
   myNum = 20
   Do Until myNum = 10
      myNum = myNum - 1
      counter = counter + 1
   Loop
   'This loop made 10 repetitions.
End Sub

Beispiel 2:

Sub ChkLastUntil()
   Dim counter, myNum
   counter = 0
   myNum = 1
   Do
      myNum = myNum + 1
      counter = counter + 1
   Loop Until myNum = 10
'This loop made 9 repetitions.
End Sub

Beispiel 3:

Sub ExampleWithDoUntil()
        Dim counter, myNum
        counter = 0
        myNum = 20
        Do Until myNum < 15
                        myNum = myNum - 2
                        counter = counter + 1
        Loop
'This loop reduced myNum to 14 and made 3 repetitions.
End Sub

Beispiel 4:

Sub ExampleWithDoLoopUntil()
    Dim counter, myNum
    counter = 0
    myNum = 5
    Do
        myNum = myNum + 2
        counter = counter + 1
    Loop Until myNum >= 15
    'This loop increased myNum to 15 and made 5 repetitions.
End Sub

"Do...Loo"-Anweisung innerhalb der Schleife beenden

Sie können eine "Do...Loop"-Anweisung mit der "Exit Do"-Anweisung beenden. Da Sie die Anweisung in der Regel nur in bestimmten Situationen beenden möchten, z.B., um eine Endlosschleife zu vermeiden, sollten Sie die "Exit Do"-Anweisung im True-Anweisungsblock einer "If...Then...Else"-Anweisung verwenden. Wenn die Bedingung "False" ist, wird die Schleife wie gewohnt ausgeführt.

Im folgenden Beispiel wird myNum ein Wert zugewiesen, der eine Endlosschleife erstellt. Die "If...Then...Else"-Anweisung prüft diese Bedingung und verhindert die endlose Wiederholung.

Die folgenden Beispiele veranschaulichen die Verwendung der "Do...Loop"-Anweisung:

Beispiel 1:

Sub ExitExample()
   Dim counter, myNum
      counter = 0
      myNum = 9
      Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
         If myNum < 10 Then Exit Do
      Loop
      'This loop made 1 repetition.
End Sub

Beispiel 2:

Sub PreventEndlessLoop()
        Dim counter, myNum
        counter = 1
        myNum = 0
        Do
                        myNum = myNum + 1
                        counter = counter + 1
                        If counter > 10 Then 
                                Exit Do   ' Avoids endless loop by exiting after 10 iterations.
                        End If
        Loop
        'This loop made 11 repetitions.
End Sub

Beispiel 3:

Sub ExampleWithDoWhile()
    Dim counter, myNum
    counter = 0
    myNum = 20
    Do While myNum > 10
        myNum = myNum - 2
        counter = counter + 1
        If myNum < 15 Then Exit Do   ' Exit the loop early if myNum is less than 15.
    Loop
    'This loop reduced myNum to 14 and made 3 repetitions.
End Sub

Beispiel 4:

Sub NestedLoopsExample()
    Dim i, j
    For i = 1 To 3
        j = 0
        Do
            j = j + 1
            If j > 2 Then Exit Do   ' Exit inner loop after 2 iterations.
        Loop
    Next
End Sub