Schleifendurchlauf abbrechen

the_lorn

Mitglied
Hi Leute!

Habe mal ne total simple Frage:
gibt es in VB (spez. VBA) die Möglichkeit einen Scheifendurchlauf vorzeitig abzubrechen?

also pseudocode-mäßig

private sub test

For each obj in Container
'mach irgendwas

if bedingung then
'mach was...
jetzt mach mit nächsten durchlauf weiter[?]
end if
next obj

..weiterer code
end sub

Ich will halt das er den ganzen nachfolgenden Code nicht mehr prüfen braucht (machts schneller). In anderen Sprachen wäre das Zauberwort Continue.
Hab schon versucht in if auch ein "next obj" einzutragen aber dann bekomm ich eine Fehlermeldung.

Wie ihr seht ist das ne ganz simple Frage - nur halt für einen Anfäger nicht lösbar

marten
 
Hi.

Was denn nun? Schleife abbrechen, oder mit der nächsten Iteration weitermachen?

Um eine Schleife abzubrechen gibt's die "EXIT DO" respektive "EXIT FOR" Anweisung.

Um abhängig von einer Bedingung etwas innerhalb einer Schleife auszuführen oder nicht, gibt's die IF .. THEN .. ELSE Anweisung.

Gruß
 
Falls du einfach nur den aktuellen Schleifendurchgang abbrechen willst und mit dem nächsten am Anfang der Schleife weitermachen, gibt es seit Visual Basic 8.0 den "continue"-Befehl. Da ich nicht weis, welche Version dein VBA verwendet: ausprobieren!

ansonsten gibt es da noch die unsaubere (bitte bringt mich für diese Demonstration nicht um...) GoTo-Art:
Code:
For each obj in Container
anfang:
'mach irgendwas

if bedingung then
'mach was...
jetzt mach mit nächsten durchlauf weiter[?]
GoTo anfang
end if
next obj
 
Zuletzt bearbeitet:
also ich hab mal nachgesehen VB 6.0 ist bei mir drauf. Also nix mit continue.
Dann mach ich das eben "unsauber". Mir macht das nix!

@deepthroat: Ich meine mit nächster Iteration weiter machen. If the else ist da zu kompliziert weils schon so ziemlich verschachtelt.

danke euch
 
habe jetzt mal die "unsaubere" Variante versucht aber ohne Erfolg!
wenn ich das so mach wie oben beschrieben macht er ja nicht mít dem nächsten obj weiter sonder beginnt die suche nochmal mit selben obj.

Er soll ja direkt aus der If zum nächsten obj springen. Oder ich stell mich zu blöd an. Kann ja auch sein.
 
schachmat hat gesagt.:
ansonsten gibt es da noch die unsaubere (bitte bringt mich für diese Demonstration nicht um...) GoTo-Art:
Code:
For each obj in Container
anfang:
'mach irgendwas

if bedingung then
'mach was...
jetzt mach mit nächsten durchlauf weiter[?]
GoTo anfang
end if
next obj
Damit hast du allerdings eine schöne Endlosschleife gebaut, denn so wird das obj ja nicht gewechselt (unter der Annahme das die If Bedingung vom Wert von obj abhängt). Du kannst da höchstens eine FOR...NEXT Schleife nehmen wo du dann allerdings die Schleifenvariable auch noch selbst verändern mußt bevor du wieder an den Anfang der Schleife springst. Alles in allem sehr unsauber.

Gruß
 
Sry, mein fehler.... is aber dann viel einfacher: Sprungmarke direkt vors ende der schleife setzen:

Code:
For each obj in Container
'mach irgendwas

if bedingung then
'mach was...
jetzt mach mit nächsten durchlauf weiter[?]
GoTo ende
end if
ende:
next obj
 
mit meinen bescheidenen Kenntnissen sieht das korrekt aus.
Obs probiere ich später hab hier grad was verschlimmbessert und kann meine DB nicht mehr öffnen! :mad:
Muss jetzt erstmal schauen was ich noch an Backups hab.
 
schachmat deine letzte Variante funktioniert!

ich danke vielmals :)

PS: ist das normal, dass der Editor (hier beim Erstellen der nachricht) manchmal Wörter nicht übernimmt? Hab grad gesagt "Thema erstellen" (oä) und siehe der halbe Satz fehlt!
 
Zuletzt bearbeitet:
Bei einer While Schleife funktioniert auch folgendes:

Do
While korrekt

<--- beliebiger Code --->

if abbruchbedingung then
exit while
end if

<--- beliebiger Code --->

exit while
Wend
Loop
 

Neue Beiträge

Zurück