Verzweigungen
Verzweigungen gehören zu den elementaren Bestandteilen jeder Programmiersprache. In diesem Kapitel sollen die Select-Case-Verzweigung und die If-Then-Verzweigung beschrieben werden.
If-Then-Verzweigung
Eine von zwei Formen der Verzweigung in VBA ist die für nur eine Alternative (einfache Entscheidung) oder wenige Alternativen geeignete If-Then-Struktur.
Der Programmcode kann beispielsweise lauten:
If (Bedingung) Then
End If
Hierbei wird der Anweisungsteil nur duchgeführt, wenn die Bedingung als Ergebnis "Wahr" ergibt. Die Anweisung kann auch als In-Line-Code programmiert werden; hier wird auf die Angabe des abschließenden Teils End If verzichtet:
If (Bedingung) Then
Bei differierenden Anweisungen, die wahlweise ausgeführt werden, spricht man von echten Alternativen. Ergibt die Bedingung dabei Falsch, wird der Anweisungsteil ausgeführt, der durch das Schlüsselwort Else eingeleitet wird:
If (Bedingung) Then
Else
End If
Auch diese Verzweigungsart kann In-Line geschrieben werden. Als Trennung zwischen mehreren Anweisungen wird der Doppelpunkt verwendet:
If (Bedingung) Then [Anweisung1: Anweisung2] [Else Anweis1: Anweis2]
Auch sind in VBA Entscheidungen möglich, die abhängig von mehr als einer Bedingung ausgeführt werden sollen. In der Verzweigungsstruktur wird dazu das Wort ElseIf verwendet:
If (Bedingung1) Then
ElseIf (Bedingung2) Then
Else
End If
Select-Case-Verzweigung
Die zweite Art von Verzweigung in VBA ist die Select-Case-Struktur. Sie ist übersichtlicher als die If-Then-Verzweigung, wenn eine größere Zahl von alternativen Möglichkeiten zu unterscheiden sind. Dabei wird jedoch nicht, wie in der vorangegangenen Verzweigung, eine Bedingung auf ihren Wahrheitswert überprüft, sondern es werden explizit Werte mit einer aus dem Programmcode gegebenen Variablen verglichen:
Select Case Variable
Case Variablenwert1
Case Variablenwert2, Variablenwert3 [,...]
Case Else
End Select
Schleifen
Schleifen sind eine weitere, in jeder Programmiersprache genutzte Strukturform. Zu Beachten ist, daß die While-Wend-Schleife, welche eigentlich überflüssig ist, nur der Vollständigkeit halber hier erwähnt wird.
For-Next-Schleife
Um eine einzelne oder mehrere Anweisungen für eine vorgegebene Anzahl von Durchläufen auszuführen, eignet sich die For-Next-Scheife. Sie ist vergleichbar mit der Struktur For(...) der Sprache C/C++:
For i = Anfang To Ende
Next
Zusätzlich kann eine Schrittweite angegeben werden, die von +1 abweicht, sowie hinter dem Next-Schlüssel die Zählvariable, wodurch auch verschachtelte Strukturen möglich werden:
Dim i As Integer, j As Integer Dim k As Integer k=2
For i = 0 To 10 Step k
For j=10 To 0 Step (k*(-1))
Next j
Next i
Wichtig zu erwähnen ist auch, daß das Herausspringen aus einer For-Next-Schleife, abhängig von einer Bedingung, durch den Zusatz Exit For möglich ist:
If Bedingung Then Exit For
Eine Besonderheit: Die For-Next-Schleife bricht nach ununterbrochenen Durchlauf erst ab, wenn die Zählvariable das erste Mal die Abbruchbedingung über-, bzw., bei negativen Schrittweiten, unterschritten hat.
Wenn der Zähler als Grundlage für weitere Programmanweisungen dienen soll (zum Beispiel bei der Überprüfung, ob die Schleife vorzeitig durch Exit For verlassen wurde), muß also bedacht werden, daß im Höchstfalle der Zähler um eine Schrittweite über (bzw. unter) dem Endwert liegt. Beispiel:
For i = 0 To 2
Next
While-Wend-Schleife
Eine Schleifenart, die nur noch aus Gründen der Kompatibilität in VBA enthalten ist, ist die While-Wend-Schleife:
While (Bedingung)
Wend
Do-Loop-Schleifen
Der Nachteil bei der While-Wend-Schleife ist, daß keine Möglichkeit besteht, abhängig von einer Bedingung die Schleife vorzeitig zu verlassen.
Diesen Nachteil hat die Do-Loop-Schleife nicht, hier ist ein Herausspringen mit Exit Do möglich.
Die Do-Loop-Schleife kann als Abweisende und als nicht abweisende Schleife verwendet werden. Desweiteren kann die Abfrage, ob die Bedingung für einen Schleifenlauf besteht, vor dem Durchlauf oder nach einem Durchlauf, also vor dem nächsten, durchgeführt werden. Es stehen also vier mögliche Arten dieser Struktur zur Verfügung.
Do-While-Loop-Schleife (abweisend), Abfrage vor Schleifendurchlauf
Do While (Bedingung)
[Exit Do]
Loop
Do-Loop-While-Schleife (nicht abweisend), Abfrage nach Schleifendurchlauf
Do
[Exit Do]
Loop While (Bedingung)
Do-Until-Loop-Schleife (abweisend), Abfrage vor Schleifendurchlauf
Do Until (Bedingung)
[Exit Do]
Loop
Do-Loop-Until-Schleife (nicht abweisend), Abfrage nach Schleifendurchlauf
Do
[Exit Do]
Loop Until (Bedingung)
|