Schleifen und Beenden von Schleifen in VBA

Glen Alfaro 18 April 2022
  1. VBA For-Schleife
  2. VBA Do Until-Schleife
  3. VBA Do While-Schleife
  4. Verwenden des Befehls Exit, um das Beenden der Schleife in VBA zu erzwingen
Schleifen und Beenden von Schleifen in VBA

Schleifen in der Computerprogrammierung sind sehr wichtig. Sie ermöglichen es, sich wiederholende Aufgaben mit einem Minimum an Codezeilen auszuführen. Die Notwendigkeit von Schleifen in Computern ergibt sich aus mehreren Gründen in Abhängigkeit von den auszuführenden Aufgaben.

Obwohl sie so leistungsfähig sind, sind sie dennoch einfach in Kontext und Syntax.

In VBA gibt es drei Schleifen, die verwendet werden können.

  1. For - Schleife - Schleife innerhalb vordefinierter oder fester Grenzen
  2. Do While - Schleife – Schleifen, solange die Bedingung True ist.
  3. Do Until - Schleife – Schleifen, bis die Bedingung True ist.

VBA For-Schleife

Syntax:

For [ counter ] = [start] To [end]  Step [ step ]
    [ statements ]
    [ Exit For ]
Next [ counter ]

Parameter:

[ counter ] Erforderlich. Typischerweise eine Integer- oder Long-Variable, die den aktuellen Wert des Zählers enthält
[ start ] Erforderlich. Der Startwert des Zählers
[end] Erforderlich. Der Endwert des Zählers
[ statements ] Der Codeblock, der innerhalb der Schleife ausgeführt werden soll
[ Exit For ] Optional. Erzwingen Sie das Stoppen der Schleife und verlassen Sie den Schleifencodeblock
[ step ] Optional. Die Erhöhung des Zählers bei jeder Iteration. Wenn nicht deklariert, ist der Wert 1.

Das Beispiel der For-Schleife:

Dieser Codeblock akzeptiert einen ganzzahligen Wert als Startnummer und verringert dann die Zahl mithilfe einer For-Schleife bis auf Null. Das Ergebnis jeder Iteration wird gedruckt.

Sub ReduceToZero(numStart As Integer)

Dim i As Integer

For i = numStart To 0 Step -1


    Debug.Print "The number is now " & i
    If i = 0 Then

        Debug.Print ("Done!")

    End If

Next i

End Sub

Sub testSub()

Call ReduceToZero(10)

End Sub

Ausgabe:

The number is now 10
The number is now 9
The number is now 8
The number is now 7
The number is now 6
The number is now 5
The number is now 4
The number is now 3
The number is now 2
The number is now 1
The number is now 0
Done!

VBA Do Until-Schleife

Syntax:

Do Until [condition]
    [statements]
    [Exit Do]
Loop

Parameter:

[condition] Erforderlich. Die Bedingung, die den Codeblock verlässt, sobald sie wahr ist
[statements] Erforderlich. Der auszuführende Codeblock
[Exit Do] Optional. Erzwingen Sie das Stoppen der Schleife und verlassen Sie den Codeblock

Beispiel für eine Do Until-Schleife:

Dieser Codeblock akzeptiert einen ganzzahligen Wert als Startnummer und erhöht dann die Zahl mithilfe einer Do Until-Schleife bis zehn. Das Ergebnis jeder Iteration wird gedruckt.

Sub IncrementToTen(numStart As Integer)

Dim i As Integer

i = numStart

Do Until i = 10 + 1

    Debug.Print "The number is now " & i
    i = i + 1
Loop

End Sub

Sub testSub()

Call IncrementToTen(-5)

End Sub

testSub-Ausgabe:

The number is now -5
The number is now -4
The number is now -3
The number is now -2
The number is now -1
The number is now 0
The number is now 1
The number is now 2
The number is now 3
The number is now 4
The number is now 5
The number is now 6
The number is now 7
The number is now 8
The number is now 9
The number is now 10
Done!

VBA Do While-Schleife

Syntax:

Do while [condition]
    [statements]
    [Exit Do]
Loop

Parameter:

[condition] Erforderlich. Die Bedingung, die wahr sein muss, um den Codeblock auszuführen.
[statements] Erforderlich. Der auszuführende Codeblock
[Exit Do] Optional. Erzwingen Sie das Stoppen der Schleife und verlassen Sie den Codeblock

Das Beispiel der Do While-Schleife:

Dieser Codeblock akzeptiert einen ganzzahligen Wert als Startnummer und erhöht dann die Zahl mithilfe einer Do While-Schleife auf zehn. Das Ergebnis jeder Iteration wird gedruckt.

Sub IncrementToTen(numStart As Integer)

Dim i As Integer
i = numStart
Do While i < 10 + 1

Debug.Print "The number is now " & i
i = i + 1
Loop
Debug.Print "Done!"
End Sub

Sub testSub()

Call IncrementToTen(-9)

End Sub

testSub-Ausgabe:

The number is now -9
The number is now -8
The number is now -7
The number is now -6
The number is now -5
The number is now -4
The number is now -3
The number is now -2
The number is now -1
The number is now 0
The number is now 1
The number is now 2
The number is now 3
The number is now 4
The number is now 5
The number is now 6
The number is now 7
The number is now 8
The number is now 9
The number is now 10
Done!

Verwenden des Befehls Exit, um das Beenden der Schleife in VBA zu erzwingen

Beim Umgang mit Schleifen sind sie an Bedingungen gebunden, die die Schleife weiterhin ausführen wird, wenn sie erfüllt ist. Ein häufiges Szenario ist jedoch, dass wir die Schleife verlassen müssen, selbst wenn die Bedingungen noch erfüllt sind. Eine typische Anwendung dafür ist der Umgang mit Error-handling-Methoden, der Stop-when-search-Technik. Ein sofortiges Verlassen der Schleife ist erforderlich, um weitere Fehler zu vermeiden oder Ausführungszeit zu sparen.

Die folgenden Codeblöcke demonstrieren die Verwendung des Exit-Befehls, um das Beenden der Schleife in einer Do-Schleife zu erzwingen.

Dieser Codeblock zielt darauf ab, die Schleife zu stoppen, wenn der Quotient zweier Zahlen eins ist. Diese beiden Zahlen werden zufällig zwischen den ganzzahligen Werten upperbound und lowerbound, den Parametern der Subroutine, generiert. Wenn der generierte Divisor (divis) Null ist, dann würde ein Fehler auftreten, da eine Division durch Null nicht erlaubt ist. Um das zu vermeiden, verwenden wir den Befehl Exit, um die Schleife zu beenden.

Sub StopWhenQuotientIsOne(upperbound As Integer, lowerbound As Integer)

Dim divid As Integer
Dim divis As Integer
Dim isOne As Boolean

divid = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
divis = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

Do Until isOne = True

    If divis = 0 Then
        Debug.Print "Illegal divisor. Exiting the Loop"
        Exit Do
    End If

Debug.Print divid / divis

If divid / divis = 1 Then

    isOne = True
    Debug.Print "Done! One is achieved."

End If

divid = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
divis = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

Loop


End Sub

Sub testSub()

Call StopWhenQuotientIsOne(4, -4)

End Sub

testSub Ausgabe (1. Versuch):

-4 
-0 
-0.666666666666667 
Illegal divisor. Exiting the Loop

testSub Ausgabe (4. Versuch):

-2 
 0 
-3 
 1 
Done! One is achieved.

Der folgende Codeblock demonstriert die Verwendung des Exit-Befehls, um das Beenden der Schleife in einer For-Schleife zu erzwingen.

In diesem Beispiel erfordert die Unterroutine StopWhenNegative zwei Parameter. Zuerst ist die startNum dann EndNum. Die Schleife wird von startNum bis EndNum durchlaufen. Wenn der Zähler negativ wird, wird die Schleife mit dem Exit-Befehl beendet.

Sub StopWhenNegative(startNum As Integer, EndNum As Integer)

Dim i As Integer
 
For i = startNum To EndNum Step -1
 
    If i < 0 Then
        Debug.Print "Opps, negative values detected. Exiting loop."
        Exit For
    End If
Debug.Print "The current number is :" & i
Next i

End Sub

Sub testSub()

Call StopWhenNegative(10, -5)

End Sub

testSub-Ausgabe:

The current number is :10
The current number is :9
The current number is :8
The current number is :7
The current number is :6
The current number is :5
The current number is :4
The current number is :3
The current number is :2
The current number is :1
The current number is :0
Opps, negative values detected. Exiting loop.