If-Then on VBA kõige olulisem juhtimisstruktuur. Tõenäoliselt kasutate seda käsku igapäevaselt. Kui soovite ühe või mitu lauset tingimuslikult täita, kasutage struktuuri If-Then. Valikuline klausel Else, kui see on kaasatud, võimaldab teil käivitada ühe või mitu avaldust, kui testitav tingimus ei vasta tõele. Siin on lihtne CheckUseri protseduur, mis on ümber kodeeritud, et kasutada struktuuri If-Then-Else:
Alamkontrollikasutaja2()
Kasutajanimi = InputBox ("Sisestage oma nimi: ")
Kui kasutajanimi = "Satya Nadella", siis
MsgBox ("Tere tulemast, Satya…")
' …[Rohkem koodi siin] …
Muidu
MsgBox "Vabandust. Ainult Satya Nadella saab seda juhtida.
Lõpeta Kui
Lõpeta alam
Kui-siis näited
Järgmine rutiin demonstreerib struktuuri If-Then ilma valikulise Else-klauslita:
Sub GreetMe()
Kui aeg <0,5, siis MsgBox "Tere hommikust"
Lõpeta alam
GreetMe protseduur kasutab süsteemi aja hankimiseks VBA funktsiooni Time. Kui praegune kellaaeg on alla 0,5, kuvab rutiin sõbralikku tervitust. Kui aeg on suurem kui 0,5 või sellega võrdne, siis rutiin lõpeb ja midagi ei juhtu.
Kui Time on suurem kui 0,5 või sellega võrdne, võite kuvada teistsuguse tervituse, võite lisada esimese lause järele teise If-Then lause:
Sub GreetMe2()
Kui aeg <0,5, siis MsgBox "Tere hommikust"
Kui aeg >= 0,5, siis MsgBox "Tere pärastlõunat"
Lõpeta alam
Pange tähele, et >= (suurem või võrdne) kasutatakse teise If-Then-lause jaoks. See tagab, et kogu päev on kaetud. Kui > (suurem kui) oleks kasutatud, ei ilmuks teadet, kui seda protseduuri teostataks täpselt kell 12.00. See on üsna ebatõenäoline, kuid sellise olulise programmi puhul ei taha te riskida.
Kui-siis-muidu näide
Teine lähenemine eelnevale probleemile kasutab Else-klauslit. Siin on sama rutiin, mis on ümber kodeeritud, et kasutada struktuuri If-Then-Else:
Sub GreetMe3()
Kui aeg < 0,5, siis MsgBox “Tere hommikust” muu _
MsgBox "Tere pärastlõunat"
Lõpeta alam
Pange tähele, et eelmises näites kasutatakse rea jätkumärki (alajoont). Kui-siis-muidu avaldus on tegelikult üks väide. VBA pakub End If-lauset kasutavate If-Then-Else konstruktsioonide kodeerimiseks veidi teistmoodi. Seetõttu saab GreetMe protseduuri ümber kirjutada kui
Sub GreetMe4()
Kui Aeg < 0,5 Siis
MsgBox "Tere hommikust"
Muidu
MsgBox "Tere pärastlõunat"
Lõpeta Kui
Lõpeta alam
Tegelikult saate If-osa alla lisada suvalise arvu avaldusi ja osa Else alla suvalise arvu avaldusi. Seda süntaksit on lihtsam lugeda ja see muudab laused lühemaks.
Mida teha, kui teil on vaja GreetMe rutiini laiendada, et tulla toime kolme tingimusega: hommikul, pärastlõunal ja õhtul? Teil on kaks võimalust: kasutage kolme If-Then-lauset või kasutage pesastatud struktuuri If-Then-Else. Pesastamine tähendab struktuuri Kui-Siis-muu paigutamist teise If-Siis-Else struktuuri sisse. Esimene lähenemisviis, mis kasutab kolme If-Then-lauset, on lihtsam:
Sub GreetMe5()
Hämarda sõnum stringina
Kui aeg < 0,5, siis sõnum = "hommik"
Kui aeg >= 0,5 ja aeg < 0,75, siis sõnum = "pärastlõuna"
Kui aeg >= 0,75, siis sõnum = "õhtu"
MsgBox "Hea" & Msg
Lõpeta alam
Uus pööre lisati muutuja kasutamisega. Muutuja Msg saab olenevalt kellaajast erineva tekstiväärtuse. MsgBoxi avalduses kuvatakse tervitus: Tere hommikust, Tere pärastlõunast või Tere õhtust.
Järgmine rutiin teostab sama toimingu, kuid kasutab struktuuri If-Then-End If:
Sub GreetMe6()
Hämarda sõnum stringina
Kui Aeg < 0,5 Siis
Sõnum = "Hommik"
Lõpeta Kui
Kui aeg >= 0,5 ja aeg < 0,75, siis
Sõnum = "pärastlõuna"
Lõpeta Kui
Kui aeg >= 0,75 Siis
Sõnum = "Õhtu"
Lõpeta Kui
MsgBox "Hea" & Msg
Lõpeta alam
ElseIfi kasutamine
Eelmistes näidetes täidetakse kõik rutiini laused. Veidi tõhusam struktuur väljuks rutiinist niipea, kui mõni tingimus leitakse tõeseks. Näiteks hommikul peaks protseduur näitama tere hommikust sõnumit ja seejärel väljuma – muid üleliigseid tingimusi hindamata.
Sellise pisikese rutiini puhul ei pea te täitmiskiiruse pärast muretsema. Kuid suuremate rakenduste puhul, kus kiirus on kriitiline, peaksite teadma struktuuri If-Then teist süntaksit.
Selle süntaksi abil saate GreetMe rutiini ümber kirjutada järgmiselt:
Sub GreetMe7()
Hämarda sõnum stringina
Kui Aeg < 0,5 Siis
Sõnum = "Hommik"
ElseIf Aeg >= 0,5 ja aeg < 0,75 Siis
Sõnum = "pärastlõuna"
Muidu
Sõnum = "Õhtu"
Lõpeta Kui
MsgBox "Hea" & Msg
Lõpeta alam
Kui tingimus on tõene, käivitab VBA tingimuslaused ja If-struktuur lõpeb. Teisisõnu, see protseduur on pisut tõhusam kui eelnevad näited. Kompromiss seisneb selles, et koodi on raskem mõista.
Veel üks Kui-Siis näide
Siin on veel üks näide, mis kasutab If-Then struktuuri lihtsat vormi. See protseduur küsib kasutajalt kogust ja kuvab seejärel sobiva allahindluse, mis põhineb kasutaja sisestatud kogusel:
Sub ShowDiscount()
Hämar kogus nii kaua
Hämar allahindlus kahekordsena
Kogus = Inputbox ("Sisesta kogus:")
Kui kogus > 0, siis allahindlus = 0,1
Kui kogus >= 25, siis allahindlus = 0,15
Kui kogus >= 50, siis allahindlus = 0,2
Kui kogus >= 75, siis allahindlus = 0,25
MsgBox “Allahindlus: “ & Allahindlus
Lõpeta alam
Pange tähele, et selle rutiini iga If-Then-lause täidetakse ja suvandi Discount väärtus võib avalduste täitmisel muutuda. Kuid rutiin kuvab lõpuks õige allahindluse väärtuse, kuna kui-siis avaldused on allahindluse väärtuste kasvavas järjekorras.
Järgmine protseduur täidab samu toiminguid alternatiivse ElseIfi süntaksi abil. Sel juhul lõpeb rutiin kohe pärast tõese tingimuse avalduste täitmist:
Sub ShowDiscount2()
Hämar kogus nii kaua
Hämar allahindlus kahekordsena
Kogus = InputBox ("Sisesta kogus: ")
Kui kogus > 0 ja kogus < 25, siis
Allahindlus = 0,1
ElseIf Kogus >= 25 ja kogus < 50 Siis
Allahindlus = 0,15
ElseIf Kogus >= 50 ja kogus < 75 Siis
Allahindlus = 0,2
ElseIf Kogus >= 75 Siis
Allahindlus = 0,25
Lõpeta Kui
MsgBox “Allahindlus: “ & Allahindlus
Lõpeta alam
Need mitmekordsed kui-siis-struktuurid on üsna tülikad. Võib-olla soovite kasutada If-Then struktuuri ainult lihtsate binaarsete otsuste tegemiseks.