Schleifen und Beenden von Schleifen in VBA
-
VBA
For
-Schleife -
VBA
Do Until
-Schleife -
VBA
Do While
-Schleife -
Verwenden des Befehls
Exit
, um das Beenden der Schleife in VBA zu erzwingen
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.
For
- Schleife - Schleife innerhalb vordefinierter oder fester GrenzenDo While
- Schleife – Schleifen, solange die BedingungTrue
ist.Do Until
- Schleife – Schleifen, bis die BedingungTrue
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.