If-Then ist die wichtigste Kontrollstruktur von VBA. Sie werden diesen Befehl wahrscheinlich täglich verwenden. Verwenden Sie die If-Then-Struktur, wenn Sie eine oder mehrere Anweisungen bedingt ausführen möchten. Mit der optionalen Else-Klausel können Sie eine oder mehrere Anweisungen ausführen, wenn die von Ihnen getestete Bedingung nicht wahr ist. Hier ist eine einfache CheckUser-Prozedur, die so umkodiert wurde, dass sie die If-Then-Else-Struktur verwendet:
Unter CheckUser2()
Benutzername = InputBox(“Geben Sie Ihren Namen ein:“)
Wenn Benutzername = "Satya Nadella" Dann
MsgBox („Willkommen Satya…“)
' …[Mehr Code hier] …
Anders
MsgBox „Entschuldigung. Das kann nur Satya Nadella.“
Ende Wenn
End Sub
Wenn-Dann-Beispiele
Die folgende Routine demonstriert die If-Then-Struktur ohne die optionale Else-Klausel:
Unter GreetMe()
Wenn Zeit < 0,5, dann MsgBox „Guten Morgen“
End Sub
Die GreetMe-Prozedur verwendet die Zeitfunktion von VBA, um die Systemzeit abzurufen. Wenn die aktuelle Uhrzeit weniger als 0,5 beträgt, zeigt die Routine eine freundliche Begrüßung an. Wenn Time größer oder gleich 0,5 ist, endet die Routine und nichts passiert.
Um eine andere Begrüßung anzuzeigen, wenn Zeit größer oder gleich 0,5 ist, können Sie nach der ersten eine weitere Wenn-Dann-Anweisung hinzufügen:
Unter GreetMe2()
Wenn Zeit < 0,5, dann MsgBox „Guten Morgen“
Wenn Zeit >= 0,5, dann MsgBox „Guten Tag“
End Sub
Beachten Sie, dass >= (größer oder gleich) für die zweite If-Then-Anweisung verwendet wird. Damit ist der gesamte Tag abgedeckt. Wäre > (größer als) verwendet worden, würde keine Meldung erscheinen, wenn dieser Vorgang genau um 12:00 Uhr mittags ausgeführt würde. Das ist ziemlich unwahrscheinlich, aber bei einem so wichtigen Programm möchte man kein Risiko eingehen.
Ein Wenn-Dann-Else-Beispiel
Ein anderer Ansatz für das obige Problem verwendet die Else-Klausel. Hier ist dieselbe Routine umcodiert, um die If-Then-Else-Struktur zu verwenden:
Unter GreetMe3()
Wenn Zeit < 0,5, dann MsgBox „Guten Morgen“ Sonst _
MsgBox „Guten Tag“
End Sub
Beachten Sie, dass im vorherigen Beispiel das Zeilenfortsetzungszeichen (Unterstrich) verwendet wird. Die If-Then-Else-Anweisung ist eigentlich eine einzelne Anweisung. VBA bietet eine etwas andere Möglichkeit zum Codieren von If-Then-Else-Konstrukten, die eine End If-Anweisung verwenden. Daher kann das GreetMe-Verfahren umgeschrieben werden als
Unter GreetMe4()
Wenn Zeit < 0,5 Dann
MsgBox „Guten Morgen“
Anders
MsgBox „Guten Tag“
Ende Wenn
End Sub
Tatsächlich können Sie eine beliebige Anzahl von Anweisungen unter dem If-Teil und eine beliebige Anzahl von Anweisungen unter dem Else-Teil einfügen. Diese Syntax ist einfacher zu lesen und verkürzt die Anweisungen.
Was ist, wenn Sie die GreetMe-Routine erweitern müssen, um drei Bedingungen zu bewältigen: morgens, nachmittags und abends? Sie haben zwei Möglichkeiten: Verwenden Sie drei If-Then-Anweisungen oder verwenden Sie eine verschachtelte If-Then-Else-Struktur. Verschachtelung bedeutet, eine If-Then-Else-Struktur innerhalb einer anderen If-Then-Else-Struktur zu platzieren. Der erste Ansatz mit drei Wenn-Dann-Anweisungen ist einfacher:
Unter GreetMe5()
Dim Msg As String
Wenn Zeit < 0,5, dann Nachricht = „Morgen“
Wenn Zeit >= 0,5 und Zeit < 0,75, dann Nachricht = „Nachmittag“
Wenn Zeit >= 0,75, dann Nachricht = „Abend“
MsgBox „Gut“ & Msg
End Sub
Eine neue Wendung wurde mit der Verwendung einer Variablen hinzugefügt. Die Variable Msg erhält je nach Tageszeit einen anderen Textwert. Die MsgBox-Anweisung zeigt die Begrüßung an: Guten Morgen, Guten Nachmittag oder Guten Abend.
Die folgende Routine führt dieselbe Aktion aus, verwendet jedoch eine If-Then-End-If-Struktur:
Unter GreetMe6()
Dim Msg As String
Wenn Zeit < 0,5 Dann
Nachricht = „Morgen“
Ende Wenn
Wenn Zeit >= 0,5 Und Zeit < 0,75 Dann
Nachricht = „Nachmittag“
Ende Wenn
Wenn Zeit >= 0,75 Dann
Nachricht = „Abend“
Ende Wenn
MsgBox „Gut“ & Msg
End Sub
Verwenden von ElseIf
In den vorherigen Beispielen wird jede Anweisung in der Routine ausgeführt. Eine etwas effizientere Struktur würde die Routine verlassen, sobald festgestellt wird, dass eine Bedingung wahr ist. Morgens soll die Prozedur beispielsweise die Guten-Morgen-Nachricht anzeigen und dann beenden – ohne die anderen überflüssigen Bedingungen zu bewerten.
Bei einer kleinen Routine wie dieser müssen Sie sich keine Gedanken über die Ausführungsgeschwindigkeit machen. Aber für größere Anwendungen, bei denen es auf Geschwindigkeit ankommt, sollten Sie eine andere Syntax für die Wenn-Dann-Struktur kennen.
So können Sie die GreetMe-Routine mithilfe dieser Syntax neu schreiben:
Unter GreetMe7()
Dim Msg As String
Wenn Zeit < 0,5 Dann
Nachricht = „Morgen“
SonstWenn Zeit >= 0,5 Und Zeit < 0,75 Then
Nachricht = „Nachmittag“
Anders
Nachricht = „Abend“
Ende Wenn
MsgBox „Gut“ & Msg
End Sub
Wenn eine Bedingung wahr ist, führt VBA die bedingten Anweisungen aus und die If-Struktur endet. Mit anderen Worten, dieses Verfahren ist etwas effizienter als die vorherigen Beispiele. Der Nachteil besteht darin, dass der Code schwieriger zu verstehen ist.
Ein weiteres Wenn-Dann-Beispiel
Hier ist ein weiteres Beispiel, das die einfache Form der If-Then-Struktur verwendet. Dieses Verfahren fordert den Benutzer zur Eingabe einer Menge auf und zeigt dann den entsprechenden Rabatt basierend auf der vom Benutzer eingegebenen Menge an:
Unter ShowDiscount()
Dim Menge so lang
Dim-Rabatt als Double
Menge = InputBox("Menge eingeben:")
Wenn Menge > 0, dann Rabatt = 0,1
Wenn Menge >= 25, dann Rabatt = 0,15
Wenn Menge >= 50, dann Rabatt = 0,2
Wenn Menge >= 75, dann Rabatt = 0,25
MsgBox „Rabatt:“ & Rabatt
End Sub
Beachten Sie, dass jede If-Then-Anweisung in dieser Routine ausgeführt wird und sich der Wert für Discount während der Ausführung der Anweisungen ändern kann. Letztendlich zeigt die Routine jedoch den richtigen Wert für Discount an, da die If-Then-Anweisungen nach aufsteigenden Discount-Werten geordnet sind.
Das folgende Verfahren führt die gleichen Aufgaben durch, indem die alternative ElseIf-Syntax verwendet wird. In diesem Fall endet die Routine sofort nach der Ausführung der Anweisungen für eine wahre Bedingung:
Unter ShowDiscount2()
Dim Menge so lang
Dim-Rabatt als Double
Menge = InputBox(“Menge eingeben:“)
Wenn Menge > 0 und Menge < 25 dann
Rabatt = 0,1
SonstWenn Menge >= 25 Und Menge < 50 Then
Rabatt = 0,15
SonstWenn Menge >= 50 Und Menge < 75 Then
Rabatt = 0,2
SonstWenn Menge >= 75 Dann
Rabatt = 0,25
Ende Wenn
MsgBox „Rabatt:“ & Rabatt
End Sub
Diese mehrfachen Wenn-Dann-Strukturen sind ziemlich umständlich. Vielleicht möchten Sie die Wenn-Dann-Struktur nur für einfache binäre Entscheidungen verwenden.