Innerhalb einer For-Next-Schleife zum nächsten Element wechseln
Frage
Ich habe eine For-Next-Schleife.Innerhalb der Schleife teste ich mehrere verschiedene Kriterien und wenn ein Test fehlschlägt, bin ich an diesem Punkt bereit, den Rest des Codes in der Schleife zu überspringen und mit dem „nächsten“ Element fortzufahren.Momentan handhabe ich das mit einer GoTo-Anweisung, die mich zur Zeile direkt vor „Next“ führt.Ich würde es vorziehen, keine GoTo-Anweisung zu verwenden. Gibt es eine andere Möglichkeit, innerhalb einer For-Next-Schleife zum „nächsten“ Element zu gelangen?TIA!
For x = 1 to 10
Test 1
If Test 1 fails then
GoTo Line1
End if
Test 2
If Test 2 fails then
GoTo Line1
End if
.
.
.
If all tests pass then
add item to array
End if
Line1:
Next
Lösung
Hier ist eine Problemumgehung für das Fehlen eines continue
Stichwort:
For x = 1 to 10
Do
Test 1
If Test 1 fails then
Exit Do
End if
Test 2
If Test 2 fails then
Exit Do
End if
.
.
.
If all tests pass then
add item to array
End if
Loop While False
Next
Andere Tipps
leider gibt es kein continue
-ähnliche Aussage in a for
Schleife in VBA.(Die zugehörige Kontrollstruktur Exit For
existiert zwar, aber das hilft hier nicht weiter).
Und es ist gut, dass Sie Vorbehalte gegen die Verwendung von a haben GoTo
:Sie machen es schwierig, dem Code zu folgen.
Am besten fügen Sie den Code in einer separaten Funktion in die Schleife ein und verwenden ihn Exit Function
innerhalb dieser Funktion an geeigneten Stellen.Sie können Fehlercodes sogar dann an den Anrufer zurückleiten und so die Skalierung des Codes unterstützen.
Sie können verwenden, wenn Sie andere Leiter:
generasacodicetagpre.Neben dem GOTO gibt es keine direkte Möglichkeit, zwischen Ihrem Code zu springen, Hoffe das könnte helfen.
Wenn Sie nicht zu viele Tests haben, können Sie den generationspflichtigen Zustand verwenden und eine verschachtelte Not
-Anweisung erstellen.Dies sollte fast den gleichen Effekt haben wie das, was Sie fragen, da jeder fehlgeschlagene Test diese generationspflichtige Anweisung enden würde, und verschieben Sie den Code mit dem nächsten X in Ihrer Schleife, ohne die folgenden Tests auszuführen.
Hier ist ein Beispiel für das, was ich meine - eine zwei Testkreislauf, die ein Array baut, das die Zahlen 5 bis 10:
enthält generasacodicetagpre.Da Sie nur eine Aktion vorformen, wenn alle Tests erfolgreich sind, dann führen Sie die IF-Erklärung mit Ans. vba nichtKurzschluss Die Tests (dh es wird jedes Testfall auswerten, auch wenn der erste falsche zurückkehrt.) Ich würde vorschlagen, jeden Test in einer Funktion einzukapseln, die einen Boolean zurückgibt, um Ihren Code aufzudernen.
generasacodicetagpre.Eine andere Möglichkeit besteht darin, eine boolesche Variable in Ihrem Code in Ihrem Code zu verwenden, so wie dieses
generasacodicetagpre.Wenn die Tests teuer sind, können Sie eine innere IF-Anweisungsüberprüfung hinzufügen, um zu sehen, ob wir den nächsten Test so auswerten müssen
generasacodicetagpre.