18.1. Bedingte Ausführung von Code -
Verzweigungen
18.1.1 GoTo
Die einfachste
Kontrollstruktur ist der gezielte Sprung zu einer bestimmten
Anweisung. Dem Schlüsselwort GoTo folgt eine Zeilenmarke (Label),
welche den Konventionen einer Variablen unterliegt, aber mit
einem Doppelpunkt enden muss.
Bsp.:
Sub Sprung_unbedingt()
Debug.Print "Test1"
GoTo Marke
Debug.Print "Test2"
Debug.Print "Test3"
Marke:
Debug.Print "Test4"
End Sub
Interessanter als die unbedingte Verzweigung ist die bedingte
Verzweigung mit IF.
If Bedingung Then GoTo Label
Sub Sprung_bedingt()
Dim i As Integer
i = 0
Schleife:
Debug.Print "Hallo" & i
i = i + 1
If i < 10 Then GoTo
Schleife
End Sub
18.1.2
If...Then
Mit If...Then-Blöcken lassen sich Anweisungen oder Anweisungsblöcke
unter bestimmten Bedingungen ausführen. Ihnen stehen dabei zwei
Syntaxvarianten zur Verfügung: eine einzeilige und eine
mehrzeilige Syntax (Blocksyntax).
Function Datum1(irgendwann)
If irgendwann < DateThen Datum1 = Date
End Function
-Oder-
Function Datum2(irgendwann)
If irgendwann < Date Then
Datum2 = Date
MsgBox "Das heutige Datum ist der "
& Datum2
End If
End Function
Die einzeilige Variante von If...Then verwendet keine End if-Anweisung.
Sollen mehrere Codezeilen ausgeführt werden, wenn die Bedingung
Wahr ist, so muss die mehrzeilige Blockvariante mit der Syntax If...Then...End
If verwendet werden.
18.1.3 If...Then...Else
Mit der Syntax If...Then...Else definieren Sie einen Block mit
Anweisungen, von dem eine Anweisung immer ausgeführt werden muss.
Function Führerschein(Alter)
If Alter < 18 Then
Msgbox "Sie sind zu jung zum Autofahren."
Else
MsgBox "Sie sind alt
genug, um Auto zu fahren."
End If
End Function
Sie können eine ElseIf- Anweisung hinzufügen und so mehrere
Bedingungen überprüfen. Dadurch werden mehrere verschachtelte
If...Then-Anweisungen überflüssig, und Ihr Code ist kürzer und
verständlicher. Stellen Sie sich eine Firma mit mehreren Tätigkeitsbereichen
vor, für die jeweils unterschiedliche Jahresboni gezahlt werden.
In der folgenden Funktion wird der Tätigkeitsbereich durch eine
Reihe von ElseIf-Anweisungen abgefragt.
Function Jahresbonus(Tätigkeit, Gehalt,
Multiplikator)
If Tätigkeit = 1 Then
Jahresbonus = Gehalt * 0,1 * Multiplikator
ElseIf Tätigkeit = 2 Then
Jahresbonus = Gehalt * 0,09 * Multiplikator
ElseIf Tätigkeit = 3 Then
Jahresbonus = Gehalt * 0,07 * Multiplikator
Else Jahresbonus = 0
End If
End Function
Weitere Informationen über If...Then...Else finden Sie im Online-Visual
Basic-Sprachverzeichnis unter If...Then...Else. Wenn alle ElseIf-Anweisungen
jedoch denselben Ausdruck mit verschiedenen Werten vergleichen,
stellt eine Select Case-Entscheidungsstruktur die bessere
Alternative dar.
18.1.4
Select Case
Alternativ zu If...Then...ElseIf stellt Visual Basic die Select
Case - Struktur zur Verfügung, um einen (immer gleichen)
Ausdruck mit verschiedenen Werten zu vergleichen. Select Case-Anweisungen
ähneln damit den If...Then...Else -Anweisungen, aber der Code
ist effizienter und leichter lesbar.
Function Jahresbonus2(Tätigkeit, Gehalt,
Multiplikator)
Select Case Tätigkeit
Case 1
Jahresbonus = Gehalt * 0.1 * Multiplikator
Case 2
Jahresbonus = Gehalt * 0.09 * Multiplikator
Case 3
Jahresbonus = Gehalt * 0.07 * Multiplikator
Case 4, 5 'Die Ausdrucksliste kann mehrere
Werte ..
Jahresbonus = Gehalt * 0.05 * Multiplikator
Case 6 To 8 ´...oder einen Wertebereich
enthalten
Jahresbonus = 150
Case Is > 8 ´...oder mit anderen Werten
verglichen werden
Jahresbonus = 100
Case Else
Jahresbonus = 0
End Select
End Function
Eine Select Case - Struktur verwendet einen einzelnen
Testausdruck, der einmal am Anfang der Struktur ausgewertet wird.
Anschließend wird das Ergebnis dieser Auswertung mit den Werten
aller Case - Abschnitte in der Struktur verglichen. Bei einer Übereinstimmung
wird der entsprechende Anweisungsblock (direkt im Anschluss an
Case) ausgeführt.
5 | 3 | 4 |