VBA Basics: Bedingungen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Wenn man in VBA-Routinen bestimmte Anweisungen in Abhängigkeit von einem Wert einer Variablen, einer Eingabe oder anderen Bedingungen ausführen lassen möchte, verwendet man sogenannte Bedingungen. Unter VBA gibt es dazu die If…Then-Bedingung und die Select Case-Bedingung. Streng genommen gibt es noch einige VBA-Funktionen, die auch Bedingungen enthalten. Diese schauen wir uns aber in einem anderen Artikel an. Hier geht es zunächst um die beiden genannten Konstrukte.

Manche Prozeduren oder Funktionen unter VBA erfordern es, dass abhängig von bestimmten Voraussetzungen unterschiedliche Anweisungen ausgeführt werden sollen. Ein einfaches Beispiel: Wenn Du per MsgBox-Funktion vom Benutzer einen der Werte vbYes oder vbNo abfragst, dann wirst Du im Code auch für die beiden Eingaben jeweils eigene Anweisungen ausführen wollen. Wenn nur diese beiden Möglichkeiten bestehen, bist Du mit einer einfachen If…Then-Bedingung gut vorbereitet. Es kann auch sein, dass es noch mehr verschiedene Auswahlmöglichkeiten gibt. Dann würde man eine If…Then-Bedingung mit mehr als nur zwei Zweigen verwenden – oder vielleicht sogar eine Select Case-Bedingung, die das Verwalten mehrerer Zweige oft einfacher und übersichtlicher macht.

Die If…Then-Bedingung

Eine If…Then-Bedingung kann nur aus einem einzigen Zweig bestehen, dessen Anweisungen nur bei der Erfüllung der angegebenen Bedingung ausgeführt werden. Die Bedingung ist im einfachsten Fall wie folgt aufgebaut:

If [Bedingung] Then
     [Anweisungen]
End If

[Bedingung] kann dabei ein beliebiger Ausdruck sein, der den Wert True oder False zurückliefert. Das Ergebnis des für [Bedingung] angegebenen Ausdrucks muss also den Datentyp Boolean aufweisen. Wenn [Bedingung] den Wert True ergibt, werden die zwischen If…Then und End If enthaltenen Anweisungen ausgeführt. Das sieht im einfachsten Fall wie folgt aus:

Dim bolBedingung As Boolean
bolBedingung = True
If bolBedingung Then
     MsgBox "bolBedingung ist True"
End If

Viele Entwickler schreiben die If…Then-Zeile in diesem Fall wie folgt:

If bolBedingung = True Then
...

Das ist nicht grundsätzlich falsch, aber bolBedingung enthält bereits einen Boolean-Wert, der Vergleich mit True hat hier keinen zusätzlichen Nutzen und kostet lediglich Rechenzeit. Wenn Du allerdings im If…Then-Zweig prüfen willst, ob die Bedingung nicht erfüllt ist, dann benötigen wir mindestens einen weiteren Operator. Die erste Möglichkeit ist der Vergleich mit dem Wert False:

If bolBedingung = False Then
     MsgBox "bolBedingung ist False"
End If

Die zweite Möglichkeit ist der Einsatz des Operators Not:

If Not bolBedingung Then
     MsgBox "bolBedingung ist False"
End If

In den folgenden Beispielen verwenden wir statt der Boolean-Variable einen richtigen Vergleichsausdruck, dessen Ergebnis wir mithilfe einer MsgBox-Anweisung ermitteln. Klickt der Benutzer auf Ja, erscheint die nachfolgend definierte Meldung:

Dim lngResult As VbMsgBoxResult
lngResult = MsgBox("Ja oder Nein?", vbYesNo)
If lngResult = vbYes Then
     MsgBox "Benutzer hat ''Ja'' angeklickt."
End If

Der Else-Zweig

In einer If…Then-Bedingung sind wir allerdings nicht darauf beschränkt, nur Anweisungen für die im If…Then-Teil angegebene Bedingung auszuführen. Wir können auch Anweisungen ausführen, wenn die Bedingung nicht erfüllt ist. Die einfachste und universellste Variante dafür ist der Else-Zweig.

Im folgenden Beispiel behandeln wir den Fall, dass der Benutzer auf Nein klickt, im Else-Zweig:

lngResult = MsgBox("Ja oder Nein?", vbYesNo)
If lngResult = vbYes Then
     MsgBox "Benutzer hat ''Ja'' angeklickt."
Else
     MsgBox "Benutzer hat ''Nein'' angeklickt."
End If

Da lngResult nur die beiden Werte vbYes oder vbNo enthalten kann, wird vbNo im Else-Zweig abgehandelt. Wenn wir neben Ja und Nein noch weitere Möglichkeiten anbieten, zum Beispiel Abbrechen, würde der Else-Zweig auch diese behandeln:

lngResult = MsgBox("Ja oder Nein?", vbYesNoCancel)

Klickt der Benutzer also auf Abbrechen, zeigt die vorherige If…Then-Bedingung auch an, dass der Benutzer auf Nein geklickt hat. Um dies zu behandeln, gibt es noch den ElseIf-Zweig.

Der ElseIf-Zweig

Wenn wir nicht nur zwei Möglichkeiten auswerten wollen, müssen wir entsprechend mehr Zweige anbieten. Im Falle von Ja, Nein und Abbrechen fügen wir im folgenden Beispiel eine weitere Unterscheidung hinzu, die gezielt auf den Wert vbNo untersucht. Alles, was nicht vbYes oder vbNo ist, wird im Else-Teil behandelt, in diesem Fall also vbCancel:

lngResult = MsgBox("Ja oder Nein?", vbYesNoCancel)
If lngResult = vbYes Then
     MsgBox "Benutzer hat ''Ja'' angeklickt."
ElseIf lngResult = vbNo Then
     MsgBox "Benutzer hat ''Nein'' angeklickt."
Else
     MsgBox "Benutzer hat ''Abbrechen'' angeklickt."
End If

Wir könnten im Else-Teil auch explizit auf vbCancel prüfen, indem wir diesen wie folgt in einen ElseIf-Zweig umwandeln:

If lngResult = vbYes Then
     MsgBox "Benutzer hat ''Ja'' angeklickt."
ElseIf lngResult = vbNo Then
     MsgBox "Benutzer hat ''Nein'' angeklickt."
ElseIf lngResult = vbCancel Then
     MsgBox "Benutzer hat ''Abbrechen'' angeklickt."
End If

Das passt in diesem Fall, da wir genau drei Fälle behandeln wollen.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar