Supportnet Computer
Planet of Tech

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

Antwort 2 von fürLau

Hallo Kollege,

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

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:

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
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

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.


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!

Antwort 10 von fürLau

würg: iiiiiiiiiiiiiiiiiiii

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: