Struktuur Select Case on kasulik VBA-struktuur otsuste tegemiseks, mis hõlmavad Excel 2016 kolme või enama valikut (kuigi see töötab ka kahe valikuga, pakkudes alternatiivi struktuurile If-Then-Else).
A Select Case näide
Järgmine näide näitab, kuidas kasutada struktuuri Select Case:
Sub ShowDiscount3()
Hämar kogus nii kaua
Hämar allahindlus kahekordsena
Kogus = InputBox ("Sisesta kogus: ")
Valige Juhtumi kogus
Juhtum 0 kuni 24
Allahindlus = 0,1
Juhtum 25 kuni 49
Allahindlus = 0,15
Juhtum 50 kuni 74
Allahindlus = 0,2
Juhtum on >= 75
Allahindlus = 0,25
Lõpeta Vali
MsgBox “Allahindlus: “ & Allahindlus
Lõpeta alam
Selles näites hinnatakse muutujat Kogus. Rutiinne kontroll kontrollib nelja erinevat juhtumit (0–24, 25–49, 50–74 ja 75 või rohkem).
Igale juhtumilausele võib järgneda suvaline arv avaldusi ja need kõik täidetakse, kui juhtum on tõene. Kui kasutate ainult ühte lauset, nagu selles näites, saate selle panna samale reale märksõnaga Case, millele eelneb koolon – VBA-lause eraldaja. See muudab koodi kompaktsemaks ja natuke selgemaks. Selles vormingus rutiin näeb välja järgmine:
Sub ShowDiscount4 ()
Hämar kogus nii kaua
Hämar allahindlus kahekordsena
Kogus = InputBox ("Sisesta kogus: ")
Valige Juhtumi kogus
Juhtum 0 kuni 24: allahindlus = 0,1
Juhtum 25 kuni 49: allahindlus = 0,15
Juhtum 50 kuni 74: allahindlus = 0,2
Juhtum on >= 75: allahindlus = 0,25
Lõpeta Vali
MsgBox “Allahindlus: “ & Allahindlus
Lõpeta alam
Kui VBA käivitab Select Case struktuuri, väljutakse struktuurist niipea, kui VBA leiab tõelise juhtumi ja täidab selle juhtumi laused.
Pesastatud Select Case näide
Nagu on näidatud järgmises näites, saate pesastada Select Case struktuure. See rutiin uurib aktiivset lahtrit ja kuvab lahtri sisu kirjeldava teate. Pange tähele, et protseduuril on kolm Select Case struktuuri ja igaühel neist on oma End Select lause:
Sub CheckCell()
Hämarda sõnum stringina
Valige Case IsEmpty (ActiveCell)
Juhtum tõsi
Msg = "on tühi."
Juhtum muu
Valige Case ActiveCell.HasFormula
Juhtum tõsi
Msg = "on valem"
Juhtum muu
Valige suurtäht ja arv (ActiveCell)
Juhtum tõsi
Sõnum = "on number"
Juhtum muu
Sõnum = "on tekst"
Lõpeta Vali
Lõpeta Vali
Lõpeta Vali
Sõnumikast "Cell " & ActiveCell.Address & " " & Msg
Lõpeta alam
Loogika on umbes selline:
Uurige, kas lahter on tühi.
Kui see pole tühi, vaadake, kas see sisaldab valemit.
Kui valemit pole, uurige, kas see sisaldab numbrilist väärtust või teksti.
Kui rutiin lõpeb, sisaldab muutuja Msg stringi, mis kirjeldab lahtri sisu. Funktsioon MsgBox kuvab selle teate.

CheckCelli protseduuriga kuvatav teade.
Saate pesastada Select Case struktuure nii sügavalt kui vaja, kuid veenduge, et igal Select Case lausel oleks vastav lause Lõpp.
Kui te pole ikka veel veendunud, et koodi taandumine on vaeva väärt, on eelmine loend hea näide. Süvendid tõesti selleks, et pesitsustasemed selgeks teha. Vaadake sama protseduuri ilma taandeta:
Sub CheckCell()
Hämarda sõnum stringina
Valige Case IsEmpty (ActiveCell)
Juhtum tõsi
Msg = "on tühi."
Juhtum muu
Valige Case ActiveCell.HasFormula
Juhtum tõsi
Msg = "on valem"
Juhtum muu
Valige suurtäht ja arv (ActiveCell)
Juhtum tõsi
Sõnum = "on number"
Juhtum muu
Sõnum = "on tekst"
Lõpeta Vali
Lõpeta Vali
Lõpeta Vali
Sõnumikast "Cell " & ActiveCell.Address & " " & Msg
Lõpeta alam
Suhteliselt arusaamatu, eks?