Príkaz Select Case, Case a End Select
Na vyhodnotenie podmienok a na následne vetvenie procedúry môžeme využiť príkazy Select Case, Case, Case Else a End Select. Tieto príkazy sú alternatívou ku konštrukcii If, Else If, Else a End If.
1. príklad: Vyhodnotenie podmienky pomocou príkazov Select Case, Case, Case Else a End Select.
Sub KontrolaVstupu REM začiatok procedúry Dim Vstup As Double REM deklarácia premennej Vstup = InputBox("Zadajte číselnú hodnotu") REM vstup od používateľa Select Case Vstup REM začiatok testovania podmienok Case 12, 24 REM vyhodnotenie číselnej premennej a následná odozva pre používateľa Sprava = "Bolo zadané číslo 12 alebo 24" Case 55, 155, 1555.55 Sprava = "Bolo zadané číslo 55 alebo 155 alebo 1555.55" Case 200, 300 To 400 Sprava = "Bolo zadané číslo 200 alebo číslo v intervale od 300 do 400" Case Else REM východzia možnosť Sprava = "Bolo zadané programom nešpecifikované číslo" End Select REM koniec vyhodnocovania číselnej premennej Print Sprava REM výpis výsledku End Sub REM koniec procedúry
Výsledok:
Popis makra: Po spustení makra nás dialógove okno výzve zadať číselnú hodnotu. Táto číselná hodnota je viazaná na premennú Vstup. Začiatok vyhodnotenia číselnej hodnoty začína v Select Case a parametrom príkazu je premenná Vstup.
Jednotlivé podmienky testuje Case. Ak už nie je iná možnosť testu premennej, zvolí sa východzia voľba Case Else, ktorá zaručené prebehne. Koniec testovania podmienky je ukončený End Select.
2. príklad: Zoberme si ten istý príklad s malou obmenou, nevyužijeme deklaráciu premennej
Sub KontrolaVstupu REM začiatok procedúry Vstup = InputBox("Zadajte číselnú hodnotu") REM vstup od používateľa Select Case Vstup REM začiatok testovania podmienok Case 12, 24 REM vyhodnotenie číselnej premennej a následná odozva pre používateľa Sprava = "Bolo zadané číslo 12 alebo 24" Case 55, 155, 1555.55 Sprava = "Bolo zadané číslo 55 alebo 155 alebo 1555.55" Case 200, 300 To 400 Sprava = "Bolo zadané číslo 200 alebo číslo v intervale od 300 do 400" Case Else REM východzia možnosť Sprava = "Bolo zadané programom nešpecifikované číslo" End Select REM koniec vyhodnocovania číselnej premennej Print Sprava REM výpis výsledku End Sub REM koniec procedúry
Výsledok:
Využijeme
rovnaký vstup ako v prvom príklade
Popis makra: v tomto príklade sme nedeklarovali premennú. Výstup ako vidíte, je nešpecifikované číslo i napriek tomu, že číslo ktoré napíšete, vie program odhaliť.
Je to preto, lebo funkcia InputBox má návratovú hodnotu typu String (reťazec) a bez deklarácie príkaz Case nerozozná číslo ale práve ten reťazec a test podmienky sa nevykoná. Case nepodporuje automatické konvertovanie typu premennej. Preto sa vykoná len východzia možnosť Case Else.
Konštrukcia príkazov
Najjednoduchší 1. variant konštrukcie je:
Select Case Premenná Case Hodnota1 príkaz1 príkaz2 … End Select
Začína sa Select Case, pri Case sa vyhodnocuje podmienka a pokračuje prípadnými príkazmi podľa návrhu makra. Koniec vyhodnocovania vykoná End Select.
2. variant:
Select Case Premenná Case Hodnota1 príkaz1 príkaz2 … Case Hodnota2 príkaz1 príkaz2 … … End Select
Ako vidíte v tomto variante, môžete využiť Case koľko len chcete.
3. variant:
Select Case Premenná Case Hodnota1 príkaz1 príkaz2 … Case Hodnota2 príkaz1 príkaz2 … … Case Else príkaz1 príkaz2 … End Select
V treťom variante sme využili východziu možnosť Case Else.
Príkaz Case
Argument v príkaze Case Hodnota môže tvoriť nejaký číselná hodnota, napríklad Case 10, alebo údaj, napr. Case „áno“ alebo viac hodnôt oddelenými čiarkami napríklad Case „áno“, „nie“, „neviem“.
Možnosť je argument zapísať i takto: Case 10 To 20. To znamená, že hodnota je v číselnom intervalu od 10 do 20.