Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Grundlagen

Schleifen (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
Dieses Thema hat weitere Beiträge

Schleifen (1) - For - Next Zählschleife
Schleifen (2) - Do Schleifen
Schleifen (3) - For Each Schleife

Weitere Artikel der Gruppe: Grundlagen Aus Excel VBA
Nach oben