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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top