Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
GrundlagenSchleifen (2) - Do Schleifen
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --Gruppenthema: 3 Folgen 1 2 3 Sie sind in Folge:2Die Do Schleifen
Do-Schleifen sind "Nicht zählende" Schleifen. Also Schleifen, die auf Grund von Abbruchbedingungen durchlaufen werden, im Gegensatz zur For - Schleife, die einen festgelegten Count hat.
Es gibt verschiedene Typen von Do Schleifen, alle gemeinsam haben sie aber, dass sie "SEHR GEFÄHRLICH"
sind.
Aber warum?
Nun, dazu müssen wir den Begriff Endlosschleife in's Gewühl werfen.
Was ist eine Endlosschleife überhaupt?
Dies ist eine Schleife, die erst beendet wird, wenn eine Bedingung wahr wird und deren Bedingung niemals wahr wird
.
Beispiel:
Lege auf den Tisch 1 Stück Zucker!
Nimm solange ein Stück Zucker vom Tisch, bis keines mehr da ist.
Lege für jedes Stück Zucker, dass du genommen hast, wieder eines hin.
Ist klar oder?
In Code könnte dies so aussehen (bitte nicht ausprobieren)
Sub DontDo()
Dim i As Integer
i = 1
Do
i = i - 1
i = i + 1
Loop Until i = 0
End Sub
Nun, denken Sie, dies ist doch klar - WIRKLICH ???
(Ganz nebenbei haben wir eine Variante der Do - Schleife kennengelernt)
Wir wollen hier gleich einen Sicherheitsmechanismus kennenlernen, der gerade beim Entwicklen von Do Schleifen recht sinnvoll ist. Dazu ändern wir einfach den obigen Code ein bisserl und den dürfen Sie dann auch ausprobieren:
Sub DontDoButDo()
Dim i As Integer, iAusBruchCount As Long
i = 1
Do
iAusBruchCount = iAusBruchCount + 1
If iAusBruchCount > 100000 Then
MsgBox "Vermutlich Endlosschleife " & vbCrLf & iAusBruchCount & " durchlaufen"
Exit Do
End If
i = i - 1
i = i + 1
Loop Until i = 0
End Sub
Dann gibt es noch "scheinbare" Endlosschleifen:
Nimm solange einen Eimer Wasser aus dem Rhein, bis der Rhein leer ist
Dies brauche ich wohl nicht näher zu erläutern, denn theoretisch ist ein Ende erreichbar aber in Realität
Kommen wir nun zu den Varianten der Do Schleifen und das einbauen des Sicherheitsmechanismus überlasse ich nun Ihnen.
Wie im unserem ersten Beispiel gezeigt- Die
Do - Loop Until:
Sub Do1_Schleife()
Dim i As Long, iAusBruchCount As Long
i = 15
Do
i = i + 1
Loop Until i > 300
MsgBox i
End Sub
Diese Do - Schleife prüft die Bedingung am Ende.
Wichtig hierbei : Sie wird mindestens einmal durchlaufen !
Die
Do Until - Loop:
Sub Do2_Schleife()
Dim i As Long, iAusBruchCount As Long
i = 15
Do Until i > 300
i = i + i
Loop
MsgBox i
End Sub
Diese Schleife wird keinmal durchlaufen, wenn die Bedingung schon vorher nicht erfüllt ist.
Sie können dies testen, indem Sie i=15 auf i = 500 ändern.
Es gibt noch zwei Varianten der Do Schleifen, die ähnlich gelagert sind:
Sub Do3_Schleife()
Dim i As Long, iAusBruchCount As Long
i = 15
Do
i = i + 1
Loop While i < 300
MsgBox i
End Sub
Sub Do4_Schleife()
Dim i As Long, iAusBruchCount As Long
i = 15
Do While i < 300
i = i + 1
Loop
MsgBox i
End Sub
Ausbrechen aus einer Do - Schleife
Alle diese Do - Schleifen haben gemeinsam, dass Sie mit Exit Do ausbrechen können, wie oben vorgestellt.
Anmerkung:
Viele kennen auch noch die
While - Wend Schleife.
Diese (von mir geliebte) ist für die Zukunft aus dem VBA Sprachsatz "verbannt", also nicht mehr erwünscht.
Der wirklich einleuchtende Grund dafür ist, dass es kein Exit - Commando für diese Schleife gibt.
Also nicht mehr benutzen
Weitere Artikel der Gruppe: Grundlagen Aus Excel VBA
Nach oben