Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: While Schleife vorzeitig abbrechen bzw. nächste...

While Schleife vorzeitig abbrechen bzw. nächste...
27.02.2007 10:42:00
Micha
Hallo Gemeinde,
ich hab mal ne Frage zu Schleifen.
Gibt es eine Möglichkeit in einer While-Schleife den aktuellen Durchlauf zu unterbrechen und mit dem nächsten zu beginnen? Ich kenn das aus PHP etc. das man per break oder return sowas realisieren könnte.
so soll es grob, ungefähr aussehen:
while i < 500
if var1 = 1 then
i = i + 1
return
end if
...
i = i + 2
wend
also wenn var1 gleich 1 soll die schleife stoppen und wieder zu beginn der schleife gegangen werden i um 1 erhöht werden. wenn var nicht 1 ist soll i um 2 erhöht werden.
is jetzt nur nen beispiel um das vielleicht zu verdeutlichen.
kann mir da wer bei dem "return"-problemchen helfen?
micha
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 10:46:45
Hans
Hallo Micha,
verwende besser Do While:

Sub Schleife()
Dim i As Integer, var1 As Integer
Do While i < 500
If var1 = 1 Then
Exit Do
End If
i = i + 2
Loop
End Sub

gruss hans
AW: While Schleife vorzeitig abbrechen bzw. nächste...
27.02.2007 10:53:47
Micha
dankeschön
durchläuft er die schleife dann weiter auch wenn var1 = 1 gewesen ist
also "..." kann zum bespiel die var1 variable wieder verändern.
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 11:00:00
Hans
Hallo Micha,
die Schleife macht natürlich so keinen Sinn, es sollte nur die Methodik aufgezeigt werden. Hier steigt er aus oder auch nicht:

Sub Schleife()
Dim i As Integer, var1 As Integer
Randomize
Do While i < 500
var1 = Int((50 * Rnd) + 1)
If var1 = 1 Then
Exit Do
End If
i = i + 2
Loop
If var1 = 1 Then
MsgBox "Ich bin vorzeitig ausgestiegen!"
Else
MsgBox "Die Schleife wurde durchlaufen!"
End If
End Sub

Um die var1 wieder zu ändern, rufe die Schleifen-Prozedur von einer anderen Prozedur auf und übergib die Variable var1 als Argument.
Gruss hans
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 14:26:00
Micha
dankscheen....
mhh ich will aber dass der in der schleife bleibt und den nächsten durchlauf startet und nicht den quellcode nach der loop schleife ausführt.
geht das irgendwie?
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 14:29:11
Hans
Hallo Micha,
ich verstehe das Problem nicht, sorry. Die Variable var1 muss ja irgendwo ermittelt werden. Ich fürchte, eine treffende Antwort ist nicht möglich, solange nicht verständlich ist, was Du anstellen möchtest.
Gruss hans
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 14:39:00
Micha
ok...
also
ich hab eine schleife die zeilenweise (variable x für zeile) daten abfragt und teile aus diesem datensatz in ein neues datenblatt schreibt (variable y für jedezeile)
do while x < 200
x_wert = x_mappe.cells(x,2)
if x_wert = ungrade then
'raus aus der schleife und nächsten wert
end if
...
'wenn kein schleifen abbruch kam kopiere:
y_mappe.cells(y,2).value = x_mappe.cells(x,2)
loop
hintergrund ist das ich per userformn den zu kopierenden datensatzbereich eingrenzen möchte
also es wird eine auswahl getroffen und bei jedem datensatz soll geguckt werden entspricht der den getroffnen filter kriteiren wenn ja kopiere den datensatz ansonsten nimm den nächsten datensatz.
ich hoff ich habs verständlich formuliert ansonsten nochma nachfragen :-)
danke
micha
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 14:55:00
Hans
Hallo Micha,
wenn ich das richtig verstanden habe, sollte das etwa so funktionieren (ungetestet):

Sub Eintragen(x As Integer)
Dim x_wert As Integer, y As Integer
Do While x < 200
x_wert = x_mappe.Cells(x, 2)
If x_wert Mod 2 = 1 Then Exit Do
y = mappe.Cells(mappe.Rows.Count, 2).End(xlUp).Row
y_mappe.Cells(y, 2).Value = x_mappe.Cells(x, 2)
y = y + 1
x = x + 1
Loop
End Sub

Da x ja irgendwoher kommen muss, gehe ich davon aus dass die Variable von der UserForm aus als Argument übergeben wird.
Gruss hans
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 15:00:00
Micha
ich glaub wir nähern uns dem ziel :-)
aber problem das mit dem "exit do" aus der schleife rausgegangen wird und nicht einfach - ich nenn es mal - "einfach nach oben wieder zum while" gesprungen wird :-(
mit dem exit do wird die schleife beendet und der nachfolgende code weiter verarbeitet.
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 15:05:06
Hans
Hallo Micha,
mir schwant, dass es Dir gar nicht um den Ausstieg aus der Schleife sondern um die Berücksichtigung einer Bedingung geht:

Sub Eintragen(x As Integer)
Dim x_wert As Integer, y As Integer
Do While x < 200
x_wert = x_mappe.Cells(x, 2)
If x_wert Mod 2 = 0 Then
y = mappe.Cells(mappe.Rows.Count, 2).End(xlUp).Row
y_mappe.Cells(y, 2).Value = x_mappe.Cells(x, 2)
y = y + 1
End If
x = x + 1
Loop
End Sub

gruss hans
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 15:12:00
Micha
genau so in etwa. problem is nur das ich so viele bedingungen hab, das es mit "if then else" nicht zu managen ist.
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 15:20:00
Hans
Hallo Micha,
verwende die Select-Anweisung. Ein Beispiel:
https://www.herber.de/mailing/027098h.htm
Gruss hans
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 15:57:32
Micha
das isses ja grad eben nich...
folgendes passiert:
ich drücke button ->user form plopp auf
ich grenze datenauswahlbereiche ein
zB. nur zeilen kopieren die in spalte a nen x haben und in spalte b eine zahl > 1000 und differez aus input_a und input_b
das fragt der jetzt für jeden datensatz/zeile ab und soll die zeilen ignorieren die den kriterien nicht ensprechen und alle anderen zeilen kopieren.
Anzeige
AW: While Schleife vorzeitig abbrechen bzw. nächst
27.02.2007 16:03:44
Hans
... dann wirst Du an If/Else-Abfragen und möglicherweise UND/ODER-Bedingungen nicht herum kommen.

If Cells(i, 1).Value = "x" And Cells(i, 2).Value >1000 And input_a + input_b < 100 _
Then

Watt mutt datt mutt
Gruss hans
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

While-Schleifen in VBA effektiv nutzen


Schritt-für-Schritt-Anleitung

  1. Grundstruktur einer While-Schleife:

    Sub BeispielWhile()
       Dim i As Integer
       i = 0
       While i < 10
           i = i + 1
           Debug.Print i
       Wend
    End Sub
  2. Vorzeitiges Abbrechen der Schleife: Um eine While-Schleife vorzeitig zu beenden, kannst du den Exit While Befehl verwenden:

    Sub AbbrechenWhile()
       Dim i As Integer
       i = 0
       While i < 10
           If i = 5 Then Exit While
           i = i + 1
           Debug.Print i
       Wend
    End Sub
  3. Nächsten Durchlauf der Schleife beginnen: Wenn du nicht die Schleife abbrechen, sondern zum nächsten Durchlauf springen möchtest, kannst du GoTo verwenden, jedoch ist das nicht die beste Praxis. Eine bessere Methode ist die Verwendung von Bedingungen:

    Sub NächsterDurchlauf()
       Dim i As Integer
       i = 0
       While i < 10
           i = i + 1
           If i = 5 Then Continue While ' Dies ist ein Beispiel, das nicht in VBA funktioniert
           Debug.Print i
       Wend
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Das Programm läuft in einer Endlosschleife.

    • Lösung: Stelle sicher, dass die Schleifenbedingung irgendwann False wird. Vergiss nicht, die Zählvariable innerhalb der Schleife zu aktualisieren.
  • Fehler: Der Exit While Befehl funktioniert nicht wie erwartet.

    • Lösung: Überprüfe die Bedingungen, die das Exit While triggern. Möglicherweise ist die Bedingung nie erfüllt.
  • Fehler: Die Schleife springt nicht zum nächsten Durchlauf.

    • Lösung: Verwende anstelle von Exit While Bedingungen, um die Schleife nur zu überspringen.

Alternative Methoden

  • Do While Schleife: Eine Alternative zur While-Schleife ist die Do While-Schleife, die eine ähnliche Funktionalität bietet. Hier kannst du auch die Schleife abbrechen:

    Sub DoWhileBeispiel()
       Dim i As Integer
       i = 0
       Do While i < 10
           i = i + 1
           If i = 5 Then Exit Do
           Debug.Print i
       Loop
    End Sub
  • For-Schleifen: Für feste Iterationen sind For-Schleifen geeignet. Hier kannst du mit Next zur nächsten Iteration wechseln:

    Sub ForSchleife()
       Dim i As Integer
       For i = 1 To 10
           If i = 5 Then Continue For ' Dies ist ein Beispiel, das nicht in VBA funktioniert
           Debug.Print i
       Next i
    End Sub

Praktische Beispiele

  1. Daten aus einer Excel-Tabelle abfragen:

    Sub DatenAbfragen()
       Dim x As Integer
       Dim x_wert As Variant
       x = 1
       Do While x <= 200
           x_wert = Cells(x, 1).Value
           If x_wert = "x" Then
               ' Kopiere Daten oder führe eine Aktion aus
           End If
           x = x + 1
       Loop
    End Sub
  2. Benutzerdefinierte Bedingungen:

    Sub Benutzerbedingungen()
       Dim i As Integer
       i = 1
       While i <= 100
           If Cells(i, 1).Value > 50 Then
               ' Akzeptiere den Wert
           Else
               ' Ignoriere den Wert
               i = i + 1 ' Erhöhe den Zähler
               Continue While ' Beispiel, das nicht in VBA funktioniert
           End If
           i = i + 1
       Wend
    End Sub

Tipps für Profis

  • Verwende Select Case anstelle von vielen If-Bedingungen, um den Code lesbarer zu machen.
  • Halte die Schleifenbedingungen klar und einfach, um die Wartbarkeit zu erhöhen.
  • Nutze Debug.Print oder MsgBox zur Fehlersuche, um den Status von Variablen während der Schleifen zu überprüfen.
  • Plane deine Schleifen so, dass sie nicht unnötig lang laufen, um die Leistung zu optimieren.

FAQ: Häufige Fragen

1. Wie kann ich eine While-Schleife in VBA abbrechen?
Du kannst Exit While verwenden, um die Schleife vorzeitig zu verlassen, wenn eine bestimmte Bedingung erfüllt ist.

2. Gibt es eine Möglichkeit, eine Schleife zu ignorieren und mit dem nächsten Durchlauf fortzufahren?
Ja, anstelle von Exit While kannst du Bedingungen verwenden, um die Ausführung des Codes innerhalb der Schleife zu steuern, sodass bestimmte Iterationen übersprungen werden.

3. Wie funktioniert die Do While Schleife in VBA?
Eine Do While Schleife funktioniert ähnlich wie eine While Schleife, aber sie prüft die Bedingung zu Beginn oder am Ende der Schleife, je nach gewähltem Typ.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige