If-Then je nejdůležitější řídicí struktura VBA. Tento příkaz budete pravděpodobně používat denně. Pokud chcete provést jeden nebo více příkazů podmíněně, použijte strukturu If-Then. Volitelná klauzule Else, pokud je zahrnuta, vám umožní provést jeden nebo více příkazů, pokud testovaná podmínka není pravdivá. Zde je jednoduchý postup CheckUser, překódovaný tak, aby používal strukturu If-Then-Else:
Sub CheckUser2()
Uživatelské jméno = InputBox(“Zadejte své jméno:”)
If UserName = “Satya Nadella” Pak
MsgBox ("Vítejte Satyo...")
' …[Více kódu zde] …
Jiný
MsgBox „Omlouvám se. Tohle může zvládnout jen Satya Nadella."
End If
End Sub
Příklady If-Then
Následující rutina ukazuje strukturu If-Then bez volitelné klauzule Else:
Sub GreetMe()
Pokud čas < 0,5, pak MsgBox „Dobré ráno“
End Sub
Procedura GreetMe využívá funkci času VBA k získání systémového času. Pokud je aktuální čas menší než 0,5, rutina zobrazí přátelský pozdrav. Pokud je Čas větší nebo roven 0,5, rutina skončí a nic se nestane.
Chcete-li zobrazit jiný pozdrav, pokud je Čas větší nebo roven 0,5, můžete za první přidat další příkaz If-Then:
Sub GreetMe2()
Pokud čas < 0,5, pak MsgBox „Dobré ráno“
Pokud čas >= 0,5, pak MsgBox „Dobré odpoledne“
End Sub
Všimněte si, že >= (větší nebo rovno) se používá pro druhý příkaz If-Then. Tím je zajištěno pokrytí celého dne. Pokud by bylo použito > (větší než), neobjevila by se žádná zpráva, pokud by byl tento postup proveden přesně ve 12:00. To je dost nepravděpodobné, ale s důležitým programem, jako je tento, nechcete riskovat.
Příklad If-Then-Else
Jiný přístup k předchozímu problému používá klauzuli Else. Zde je stejná rutina překódovaná pro použití struktury If-Then-Else:
Sub GreetMe3()
If Time < 0,5 Then MsgBox „Dobré ráno“ Jinak _
MsgBox „Dobré odpoledne“
End Sub
Všimněte si, že v předchozím příkladu je použit znak pro pokračování řádku (podtržítko). Příkaz If-Then-Else je ve skutečnosti jeden příkaz. VBA poskytuje mírně odlišný způsob kódování konstrukcí If-Then-Else, které používají příkaz End If. Proto lze proceduru GreetMe přepsat jako
Sub GreetMe4()
If Time < 0,5 Then
MsgBox „Dobré ráno“
Jiný
MsgBox „Dobré odpoledne“
End If
End Sub
Ve skutečnosti můžete do části If vložit libovolný počet příkazů a do části Else libovolný počet příkazů. Tato syntaxe se lépe čte a zkracuje příkazy.
Co když potřebujete rozšířit rutinu GreetMe tak, aby zvládla tři podmínky: ráno, odpoledne a večer? Máte dvě možnosti: Použijte tři příkazy If-Then nebo použijte vnořenou strukturu If-Then-Else. Vnoření znamená umístění struktury If-Then-Else do jiné struktury If-Then-Else. První přístup, využívající tři příkazy If-Then, je jednodušší:
Sub GreetMe5()
Dim Msg As String
Pokud je čas < 0,5, pak zpráva = „Ráno“
Pokud Čas >= 0,5 a Čas < 0,75, pak Msg = „Odpoledne“
Pokud Čas >= 0,75, pak Msg = „Večer“
MsgBox „Dobré“ & Msg
End Sub
Byl přidán nový twist s použitím proměnné. Proměnná Msg získá jinou textovou hodnotu v závislosti na denní době. Výpis MsgBox zobrazuje pozdrav: Dobré ráno, Dobré odpoledne nebo Dobrý večer.
Následující rutina provádí stejnou akci, ale používá strukturu If-Then-End If:
Sub GreetMe6()
Dim Msg As String
If Time < 0,5 Then
Msg = "Ráno"
End If
Pokud čas >= 0,5 a čas < 0,75, pak
Msg = "Odpoledne"
End If
Pokud Čas >= 0,75 Pak
Msg = "Večer"
End If
MsgBox „Dobré“ & Msg
End Sub
Pomocí ElseIf
V předchozích příkladech se provede každý příkaz v rutině. O něco efektivnější struktura by opustila rutinu, jakmile se zjistí, že podmínka je pravdivá. Například ráno by měla procedura zobrazit zprávu Dobré ráno a poté ji ukončit – bez vyhodnocení dalších nadbytečných podmínek.
S takovou drobnou rutinou se nemusíte starat o rychlost provádění. Ale pro větší aplikace, ve kterých je rychlost kritická, byste měli vědět o jiné syntaxi pro strukturu If-Then.
Zde je návod, jak můžete přepsat rutinu GreetMe pomocí této syntaxe:
Sub GreetMe7()
Dim Msg As String
If Time < 0,5 Then
Msg = "Ráno"
ElseIf Čas >= 0,5 a čas < 0,75 Potom
Msg = "Odpoledne"
Jiný
Msg = "Večer"
End If
MsgBox „Dobré“ & Msg
End Sub
Když je podmínka pravdivá, VBA provede podmíněné příkazy a struktura If skončí. Jinými slovy, tento postup je o něco efektivnější než předchozí příklady. Kompromisem je, že kód je obtížnější pochopit.
Další příklad If-Then
Zde je další příklad, který používá jednoduchou formu struktury If-Then. Tento postup vyzve uživatele k zadání množství a poté zobrazí příslušnou slevu na základě množství, které uživatel zadá:
Sub ShowDiscount()
Tlumené množství jako dlouhé
Dvojitá sleva
Množství = InputBox(“Zadejte množství:”)
Pokud je množství > 0, pak sleva = 0,1
Pokud množství >= 25, pak sleva = 0,15
Pokud množství >= 50, pak sleva = 0,2
Pokud množství >= 75, pak sleva = 0,25
MsgBox „Sleva: “ & Sleva
End Sub
Všimněte si, že každý příkaz If-Then v této rutině se provádí a hodnota pro Sleva se může měnit, jak jsou příkazy prováděny. Rutina však nakonec zobrazí správnou hodnotu pro slevu, protože příkazy If-Then jsou seřazeny podle vzestupných hodnot slev.
Následující postup provádí stejné úkoly pomocí alternativní syntaxe ElseIf. V tomto případě rutina skončí okamžitě po provedení příkazů pro pravdivou podmínku:
Sub ShowDiscount2()
Tlumené množství jako dlouhé
Dvojitá sleva
Množství = InputBox(“Zadejte množství:”)
Pokud Množství > 0 A Množství < 25 Pak
Sleva = 0,1
ElseIf Množství >= 25 a množství < 50 Pak
Sleva = 0,15
ElseIf Množství >= 50 a množství < 75 Potom
Sleva = 0,2
ElseIf Množství >= 75 Pak
Sleva = 0,25
End If
MsgBox „Sleva: “ & Sleva
End Sub
Tyto vícenásobné struktury If-Then jsou poměrně těžkopádné. Možná budete chtít použít strukturu If-Then pouze pro jednoduchá binární rozhodnutí.