VBScript má definovány následující podmíněné příkazy: If…Then…Else a Select Case.
Podmíněně vykoná skupinu příkazů v závislosti na hodnotě podmínky.
Syntaxe:
If podmínka Then příkazy [Else nebopříkazy]
Kromě této jednořádkové formy příkazu můžete použít také blokovou formu zápisu:
If podmínka Then
[příkazy]
[ElseIf podmínka-n Then
[nebojestližepříkazy]] …
[Else
[nebopříkazy]]
End If
Syntaxe příkazu If…Then…Else má následující části:
Část | Popis |
podmínka | Logický výraz. Pokud je podmínka Null, je vyhodnocena jako False |
příkazy | Jeden nebo více příkazů oddělených dvojtečkami, které jsou vykonány v případě, že je podmínka vyhodnocena jako True |
podmínka-n | Stejné jako podmínka |
nebojestližepříkazy | Jeden nebo více příkazů, které jsou vykonány v případě, kdy je odpovídající podmínka-n vyhodnocena jako True |
nebopříkazy | Jeden nebo více příkazů, které jsou vykonány v případě, že podmínka nebo žádná podmínka-n není vyhodnocena jako True |
Pro krátké a jednoduché testy můžete použít jednořádkový zápis. Blokový zápis poskytuje více pružnosti než jednořádkový zápis a je většinou snáze čitelný, spravovatelný a odladitelný. I u jednořádkového zápisu můžete provádět více příkazů jako výsledek rozhodnutí If…Then. Pak musí být všechny příkazy napsány na jednom řádku a oddělené dvojtečkami, například:
If A > 10 Then A = A + 1 : B = B + A : C = C + B
Když je prováděn blokový If, je nejprve otestována podmínka. Pokud je True, jsou provedeny příkazy následující za Then. Pokud je podmínka False, je vyhodnoceno každé následující ElseIf (pokud je nějaké uvedeno). Když je nalezena kladně vyhodnocená podmínka, jsou vykonány příkazy následující za odpovídajícím Then. Pokud žádná z podmínek ElseIf neodpovídá hodnotě True (nebo nejsou žádné ElseIf uvedeny), jsou provedeny příkazy následující za Else. Po vykonání příkazů za Then či Else, pokračuje provádění skriptu příkazy následujícími za EndIf. Klauzule Else a ElseIf jsou obě volitelné. Můžete mít tolik ElseIf v bloku If, kolik budete chtít, ale žádný se nesmí objevit v části Else. To, co je za klíčovým slovem Then, rozhoduje o tom, zda bude příkaz If považován za blokový či jednořádkový. Pokud je za slovem Then cokoliv jiného než komentář, je příkaz If považován za jednořádkový. Blokový příkaz If musí být prvním příkazem na řádku a musí končit i příkazem EndIf.
Příkaz If…Then…Else je obvykle používán ke zjištění, zda nabývá podmínka hodnoty True nebo False a v závislosti na tomto zjištění také k provedení jednoho nebo více příkazů. Obvykle je podmínkou výraz, který používá porovnávací operátory. Příkazy If…Then…Else mohou být vnořovány tolikrát, kolikrát to budete potřebovat.
Pro provedení pouze jednoho příkazu při splněné podmínce použijte jednořádkovou syntaxi příkazu If…Then…Else, viz následující příklad. Poznamenejme, že tato ukázka nepoužívá Else.
Sub PevData()
Dim mojeData
mojeData = #3/26/54#
If mojeData < Now Then mojeData = Now
End Sub
Pro provedení více než jedné řádky kódu musíte použít blokovou syntaxi, která zahrnuje příkaz EndIf:
Sub VarovUziv(hodnota)
If hodnota = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
AlertLabel.Font.Italic = True
End If
End Sub
Pro definici dvou bloků příkazů můžete použít příkaz If…Then…Else: jeden blok je vykonán, pokud je podmínka True, druhý blok pak v případě, že je podmínka False.
Sub VarovUziv(hodnota)
If hodnota = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
AlertLabel.Font.Italic = True
Else
AlertLabel.Forecolor = vbBlack
AlertLabel.Font.Bold = False
AlertLabel.Font.Italic = False
End If
End Sub
Příkaz If…Then…Else vám umožňuje vybrat z několika alternativ. Přidáním části ElseIf rozšíříte funkčnost příkazu If…Then…Else, a tak můžete řídit běh skriptu na základě několika možností. Viz příklad :
Sub ReportHod(hodnota)
If hodnota = 0 Then
MsgBox value
ElseIf hodnota = 1 Then
MsgBox hodnota
ElseIf hodnota = 2 Then
MsgBox hodnota
Else
MsgBox "Hodnota mimo rozsah!"
End If
End Sub
Můžete přidat tolik částí ElseIf, kolik budete potřebovat pro alternativní volby. Přílišným užíváním částí ElseIf se často stává skript nepřehledný. Lepší možnost pro výběr z více možností představuje příkaz Select Case.
Vykoná jednu z několika skupin příkazů v závislosti na hodnotě výrazu. Jde o tzv. vícenásobné větvení.
Syntaxe
Select Case testovanývýraz
[Case seznamvýrazů-n
[příkazy-n]] . . .
[Case Else seznamvýrazů -n
[nebopříkazy-n]]
End Select
Syntaxe příkazu Select Case má následující části:
Část | Popis |
testovanývýraz | Libovolný aritmetický či řetězcový výraz. |
seznamvýrazů-n | Požadováno v případě uvedení Case. Seznam obsahující jeden nebo více výrazů. |
příkazy-n | Jeden nebo více příkazů vykonaných pokud je hodnota testovanývýraz shodná s příslušnou hodnotou v seznamvýrazů-n. |
nebopříkazy | Jeden nebo více příkazů vykonaných pokud není hodnota testovanývýraz shodná s příslušnou hodnotou uvedenou v libovolné části Case. |
Pokud testovaný výraz odpovídá libovolnému výrazu ze seznamu výrazů libovolného Case, jsou vykonány odpovídající příkazy až do dalšího uvedení klíčového slova Case nebo v případě posledního Case až do uvedení klíčového slova End Select. Provádění skriptu pak pokračuje příkazy následujícími za End Select. Pokud hodnota testovanývýraz odpovídá výrazům v několika částech Case, jsou vykonány jen příkazy v části Case uvedené jako první v pořadí. Část Case Else je používána pro určení nebopříkazů k provedení v případě, že se nepodařilo najít shodu mezi testovanýmvýrazem a seznamemvýrazů v žádné části Case. Ačkoliv to není vyžadováno, je dobré mít v příkazu Select Case příkaz Case Else pro obsluhu nepředvídaných hodnot testovanéhovýrazu. Pokud neexistuje shoda mezi seznamemvýrazů libovolného Case a testovanýmvýrazem a není zde ani příkaz Case Else, skript pokračuje příkazy následujícími za End Select. Příkaz Select Case může být vnořovaný. Každý vnořený příkaz Select Case musí mít odpovídající příkaz End Select. Použití příkazu Select Case poskytuje alternativu k příkazu If…Then…ElseIf pro výběrové spuštění jednoho příkazů z několika bloků příkazů. Příkaz Select case poskytuje stejné možnosti jako příkaz If…Then…Else, ale je účelnější a čitelnější. Pracuje s jedním testovaným výrazem, který je jednou vyhodnocen hned na počátku struktury. Výsledek vyhodnocení výrazu je poté porovnán s hodnotami pro každé Case v příkazu. Pokud je nalezena shodná hodnota, je vykonán blok příkazů následující příslušné Case. Viz příklad :
Option Explicit
Dim Stav, Popis, Penalizace
Select Case Stav
Case 1
Popis = "Právě teď"
Penalizace = 0
Case 2
Popis = "30 dnů po době splatnosti"
Penalizace = 100
Case 3
Popis = "60 dnů po době splatnosti"
Penalizace = 200
Case 4
Popis = "90 dnů po době splatnosti".
Penalizace = 300
Case Else
Popis = "Neznámý stav"
End Select
Další příklad ilustruje situaci, kdy je vyhodnocený výraz porovnáván s více hodnotami najednou:
Option Explicit
Dim Stav, PoslatZpravu, Popis
Select Case Stav
Case 1, 2
PoslatZpravu = False
Case 3, 4
PoslatZpravu = True
Case Else
Popis = "Neznámý stav"
Poznamenejme, že struktura Select Case vyhodnocuje výraz jednou na začátku struktury. Oproti tomu struktura If…Then…ElseIf může vyhodnocovat rozdílné výrazy v každém příkazu ElseIf. Strukturu If…Then…ElseIf můžete nahradit strukturou Select Case jen tehdy, když každý příkaz ElseIf vyhodnocuje stejný výraz.