Supportnet / Forum / Tabellenkalkulation
VBA: Ausführung einer For .. Next-Schleife "abkürzen"
Frage
Hallo!
Ich sehe gerade den Wald vor lauter Bäumen nicht und suche das [b]Zauberwort[/b], um in einer For .. Next-Schleife den aktuelle Durchlauf zu beenden, ohne Anweisung_2 auszuführen, und die Schleife mit dem nächsten Indexwert fortzusetzen:
For i =1 to [i]Ende[/i]
Anweisung_1
If Genug_gearbeitet then [b]Zauberwort[/b]
Anweisung_2
Next i
Exit For meine ich nicht und Exit Sub erst recht nicht. Die For .. Next-Schleife soll bis [i]Ende[/i] weiterarbeiten!
Falls es sowas für die For .. Next-Schleife gar nicht gibt, aber für eine Do .. Loop-Schleife, dann würde mich das ebenso interessieren.
Schon mal danke im Voraus, irgendjemand weiß ja bestimmt was,
CaroS
Antwort 1 von CaroS
Hallo,
mir ist zwar doch noch was eingefallen, das funktioniert auch,
Sub ForNext()
Dim i As Integer
For i = 1 To 3
´If i = 2 Then Next i
If i = 2 Then GoTo next_i
MsgBox i
next_i:
Next i
End Sub
aber eigentlich hatte ich mehr an sowas wie break oder continue gedacht. Doch das gibt es wohl nur in anderen Sprachen?
Gruß,
CaroS
mir ist zwar doch noch was eingefallen, das funktioniert auch,
Sub ForNext()
Dim i As Integer
For i = 1 To 3
´If i = 2 Then Next i
If i = 2 Then GoTo next_i
MsgBox i
next_i:
Next i
End Sub
aber eigentlich hatte ich mehr an sowas wie break oder continue gedacht. Doch das gibt es wohl nur in anderen Sprachen?
Gruß,
CaroS
Antwort 2 von fürLau
Hallo Kollege,
Gruß
For i =1 to Ende
Anweisung_1
If Genug_gearbeitet then goto Zauberwort
Anweisung_2
Zauberwort:
Next i
Gruß
Antwort 3 von CaroS
Ja, danke!
Es gab mal Zeiten, da musste man bei Verwendung von Goto pro Stück eine A4-Seite Begründung schreiben, warum das nur so und nicht nicht ohne Goto programmiert werden kann. Und ich fürchte mich eben heute immer noch, erwischt zu werden ...
Gruß,
CaroS
Es gab mal Zeiten, da musste man bei Verwendung von Goto pro Stück eine A4-Seite Begründung schreiben, warum das nur so und nicht nicht ohne Goto programmiert werden kann. Und ich fürchte mich eben heute immer noch, erwischt zu werden ...
Gruß,
CaroS
Antwort 4 von fürLau
Hi,
Es gab (gibt) auch Basic-Dialekte in denen man in der For-Next-Schleife ein Next einsetzen kann.
Eleganter wäre in dem oberen Fall vielleicht ein Konstrukt ala:
Gruß nach Berlin
Es gab (gibt) auch Basic-Dialekte in denen man in der For-Next-Schleife ein Next einsetzen kann.
Eleganter wäre in dem oberen Fall vielleicht ein Konstrukt ala:
i=1
Do While Not Genug_gearbeitet And i < Ende
Anweisung_1
Anweisung_2
i=i+1
Loop
Gruß nach Berlin
Antwort 5 von CaroS
Hallo für Lau,
ich war ja zwischendurch mal so kühn und habe
Das Problem ist ja nicht, dass ich mit der Bedingung am Anfang oder am Ende der Schleife nicht klarkomme oder dass ich mit dem Schleifenindex in der Schleife nicht genug rumtricksen kann - das geht ja ohne Probleme - aber das nützt mir erst bei der nächsten Auswertung der Schleifenbedingung am Schleifenanfang oder -ende was,
... sondern dass erst in der Mitte der Schleife und in Abhängigkeit der unmittelbar zuvor ausgeführten Anweisungen zu entscheiden ist und dort entschieden werden muss (!), ob ich den Rest der Schleife weglassen kann. Wenn ich ihn nicht weglasse, wird zuviel getan und das richtige Ergebnis wird wieder falsch.
Ich muss also mit jedem i erstmal rein in die Schleife und in der nächsten Schleife muss ich auch mit dem nächsten i arbeiten, es ist immer nur die Frage wie lange. Ein i einsparen kann ich nicht.
Die sauberste Lösung ist wohl:
Mein Gott, was für ein Aufwand! Und das alles nur, um das If für Anweisung_2 und das Einrücken des Codes zu sparen.
Gruß,
CaroS
ich war ja zwischendurch mal so kühn und habe
If Genug_gearbeitet then Next i
versucht, hat aber leider nicht geklappt.Das Problem ist ja nicht, dass ich mit der Bedingung am Anfang oder am Ende der Schleife nicht klarkomme oder dass ich mit dem Schleifenindex in der Schleife nicht genug rumtricksen kann - das geht ja ohne Probleme - aber das nützt mir erst bei der nächsten Auswertung der Schleifenbedingung am Schleifenanfang oder -ende was,
... sondern dass erst in der Mitte der Schleife und in Abhängigkeit der unmittelbar zuvor ausgeführten Anweisungen zu entscheiden ist und dort entschieden werden muss (!), ob ich den Rest der Schleife weglassen kann. Wenn ich ihn nicht weglasse, wird zuviel getan und das richtige Ergebnis wird wieder falsch.
Ich muss also mit jedem i erstmal rein in die Schleife und in der nächsten Schleife muss ich auch mit dem nächsten i arbeiten, es ist immer nur die Frage wie lange. Ein i einsparen kann ich nicht.
Die sauberste Lösung ist wohl:
For i =1 to Ende
Anweisung_1
If Not(Genug_gearbeitet) Then
Anweisung_2
End If
Next i
Mein Gott, was für ein Aufwand! Und das alles nur, um das If für Anweisung_2 und das Einrücken des Codes zu sparen.
Gruß,
CaroS
Antwort 6 von nighty
hi all :)
als alternative fuer goto zum beipiel,
der aufruf von funktionen
gruss nighty
als alternative fuer goto zum beipiel,
der aufruf von funktionen
gruss nighty
Antwort 7 von fürLau
Zum Eänsparen der I(s)
Zitat:
ch muss also mt jedem erstmal ren n de Schlefe und n der nächsten Schlefe muss ch auch mt dem nächsten arbeen, es st mmer nur de Frage we lange. En ensparen kann ch ncht.
ch muss also mt jedem erstmal ren n de Schlefe und n der nächsten Schlefe muss ch auch mt dem nächsten arbeen, es st mmer nur de Frage we lange. En ensparen kann ch ncht.
Antwort 8 von fürLau
Soviel zu gesparten i(s)
Antwort 9 von CaroS
Hallo Du,
nun rück mal schön die is wieder raus, das sind (waren?) meine!
nun rück mal schön die is wieder raus, das sind (waren?) meine!
Antwort 10 von fürLau
würg: iiiiiiiiiiiiiiiiiiii