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