Ef-Þá er mikilvægasta stjórnskipulag VBA. Þú munt líklega nota þessa skipun daglega. Notaðu Ef-Þá skipulagið þegar þú vilt framkvæma eina eða fleiri setningar með skilyrðum. Valfrjálsa Else-ákvæðið, ef það er innifalið, gerir þér kleift að framkvæma eina eða fleiri fullyrðingar ef ástandið sem þú ert að prófa er ekki satt. Hér er einföld CheckUser aðferð, endurkóðuð til að nota If-Then-Else uppbyggingu:
Undir CheckNotandi2()
UserName = InputBox(“Sláðu inn nafnið þitt: “)
Ef notandanafn = "Satya Nadella" Þá
MsgBox ("Velkomin Satya ...")
' …[Meira kóða hér] …
Annar
MsgBox „Því miður. Aðeins Satya Nadella getur stjórnað þessu."
End If
End Sub
Ef-Þá dæmi
Eftirfarandi venja sýnir If-Then uppbygginguna án valkvæða annars ákvæðisins:
Sub GreetMe()
Ef tími < 0,5 þá er MsgBox „Góðan daginn“
End Sub
GreetMe aðferðin notar tímaaðgerð VBA til að fá kerfistímann. Ef núverandi tími er minna en 0,5 birtir venjan vinsamlega kveðju. Ef Tími er stærri en eða jafnt og 0,5, þá lýkur venjan og ekkert gerist.
Til að birta aðra kveðju ef Tími er stærri en eða jafnt og 0,5 geturðu bætt við annarri Ef-Þá setningu á eftir þeirri fyrstu:
Sub GreetMe2()
Ef tími < 0,5 þá er MsgBox „Góðan daginn“
Ef Tími >= 0,5 Þá MsgBox „Góðan daginn“
End Sub
Taktu eftir að >= (stærri en eða jafnt og) er notað fyrir seinni If-Then setninguna. Þetta tryggir að allan daginn sé lokið. Hefði > (stærra en) verið notað, myndu engin skilaboð birtast ef þetta ferli væri framkvæmt nákvæmlega klukkan 12:00 á hádegi. Það er frekar ólíklegt, en með mikilvægu prógrammi eins og þessu vilt þú ekki taka neina áhættu.
Ef-þá-annað dæmi
Önnur nálgun á vandamálið á undan notar Else ákvæðið. Hér er sama venja endurkóðuð til að nota If-Then-Else uppbyggingu:
Sub GreetMe3()
Ef Tími < 0,5 Þá MsgBox „Góðan daginn“ Else _
MsgBox „Góðan daginn“
End Sub
Taktu eftir að línuframhaldsstafurinn (undirstrik) er notaður í dæminu á undan. Ef-þá-annað staðhæfingin er í raun ein fullyrðing. VBA býður upp á aðeins aðra leið til að kóða If-Then-Else smíðar sem nota End If setningu. Þess vegna er hægt að endurskrifa GreetMe málsmeðferðina sem
Sub GreetMe4()
Ef Tími < 0,5 Þá
MsgBox „Góðan daginn“
Annar
MsgBox „Góðan daginn“
End If
End Sub
Reyndar geturðu sett inn hvaða fjölda staðhæfinga sem er undir Ef hlutanum og hvaða fjölda staðhæfinga sem er undir Else hlutanum. Þessi setningafræði er auðveldari að lesa og gerir staðhæfingarnar styttri.
Hvað ef þú þarft að auka GreetMe venjuna til að takast á við þrjú skilyrði: morgun, síðdegi og kvöld? Þú hefur tvo valkosti: Notaðu þrjár If-Then staðhæfingar eða notaðu hreiðraða If-Þá-Else uppbyggingu. Hreiður þýðir að setja Ef-Þá-Anna mannvirki innan annars Ef-Þá-annar mannvirki. Fyrsta aðferðin, með því að nota þrjár Ef-Þá staðhæfingar, er einfaldari:
Sub GreetMe5()
Dimm skilaboð sem strengur
Ef tími < 0,5 þá er Msg = "Morning"
Ef Tími >= 0,5 Og Tími < 0,75 Þá Msg = "Síðdegi"
Ef Tími >= 0,75 Þá Msg = „Kvöld“
MsgBox „Góð“ & Msg
End Sub
Nýjum snúningi var bætt við með notkun breytu. Msg breytan fær annað textagildi, allt eftir tíma dags. MsgBox yfirlýsingin sýnir kveðjuna: Góðan daginn, góðan daginn eða gott kvöld.
Eftirfarandi venja framkvæmir sömu aðgerð en notar If-Then-End If uppbyggingu:
Sub GreetMe6()
Dimm skilaboð sem strengur
Ef Tími < 0,5 Þá
Msg = "Morgun"
End If
Ef Tími >= 0,5 Og Tími < 0,75 Þá
Msg = "Síðdegi"
End If
Ef Tími >= 0,75 Þá
Msg = "Kvöld"
End If
MsgBox „Góð“ & Msg
End Sub
Að nota ElseIf
Í fyrri dæmunum er sérhver setning í venjunni keyrð. Örlítið skilvirkara mannvirki myndi hætta í venjunni um leið og ástandið reynist vera satt. Á morgnana, til dæmis, ætti aðferðin að birta Góðan daginn skilaboðin og hætta síðan — án þess að meta önnur óþarfa skilyrði.
Með pínulítilli rútínu eins og þessari þarftu ekki að hafa áhyggjur af framkvæmdarhraða. En fyrir stærri forrit þar sem hraði er mikilvægur, ættir þú að vita um aðra setningafræði fyrir If-Then uppbyggingu.
Svona geturðu endurskrifað GreetMe rútínuna með því að nota þessa setningafræði:
Sub GreetMe7()
Dimm skilaboð sem strengur
Ef Tími < 0,5 Þá
Msg = "Morgun"
ElseIf Time >= 0,5 Og Time < 0,75 Þá
Msg = "Síðdegi"
Annar
Msg = "Kvöld"
End If
MsgBox „Góð“ & Msg
End Sub
Þegar skilyrði er satt, keyrir VBA skilyrtu setningarnar og If byggingin endar. Með öðrum orðum, þessi aðferð er aðeins skilvirkari en fyrri dæmin. Málið er að það er erfiðara að skilja kóðann.
Annað Ef-Þá dæmi
Hér er annað dæmi sem notar einfalda form Ef-Þá uppbyggingu. Þessi aðferð biður notandann um magn og sýnir síðan viðeigandi afslátt, byggt á því magni sem notandinn slær inn:
Sub ShowDiscount()
Dimmt magn eins lengi
Dimm afsláttur sem tvöfaldur
Magn = InputBox(“Sláðu inn magn:”)
Ef Magn > 0 Þá Afsláttur = 0,1
Ef Magn >= 25 Þá Afsláttur = 0,15
Ef Magn >= 50 Þá Afsláttur = 0,2
Ef Magn >= 75 Þá Afsláttur = 0,25
MsgBox “Afsláttur: “ & Afsláttur
End Sub
Taktu eftir að hver Ef-Þá setning í þessari venju er keyrð og gildið fyrir afslátt getur breyst eftir því sem yfirlýsingarnar eru keyrðar. Hins vegar sýnir venjan að lokum rétt gildi fyrir afslátt vegna þess að Ef-Þá yfirlýsingarnar eru í röð hækkandi afsláttargilda.
Eftirfarandi aðferð framkvæmir sömu verkefnin með því að nota aðra ElseIf setningafræði. Í þessu tilviki lýkur venjan strax eftir að yfirlýsingarnar eru framkvæmdar fyrir satt ástand:
Undirsýningafsláttur2()
Dimmt magn eins lengi
Dimm afsláttur sem tvöfaldur
Magn = InputBox(“Sláðu inn magn: “)
Ef Magn > 0 Og Magn < 25 Þá
Afsláttur = 0,1
ElseIf Magn >= 25 Og Magn < 50 Þá
Afsláttur = 0,15
ElseIf Magn >= 50 Og Magn < 75 Þá
Afsláttur = 0,2
ElseIf Magn >= 75 Þá
Afsláttur = 0,25
End If
MsgBox “Afsláttur: “ & Afsláttur
End Sub
Þessi margvíslegu Ef-Þá mannvirki eru frekar fyrirferðarmikil. Þú gætir viljað nota Ef-Þá uppbyggingu aðeins fyrir einfaldar tvíundar ákvarðanir.