If-Then është struktura më e rëndësishme e kontrollit të VBA. Ju ndoshta do ta përdorni këtë komandë në baza ditore. Përdorni strukturën If-Then kur dëshironi të ekzekutoni një ose më shumë deklarata me kusht. Klauzola opsionale Tjetër, nëse përfshihet, ju lejon të ekzekutoni një ose më shumë deklarata nëse kushti që po testoni nuk është i vërtetë. Këtu është një procedurë e thjeshtë CheckUser, e rikoduar për të përdorur strukturën If-Then-Else:
Sub CheckUser2()
Emri i përdoruesit = InputBox ("Futni emrin tuaj: ")
Nëse Emri i Përdoruesit = "Satya Nadella" Atëherë
MsgBox ("Mirë se erdhe Satya...")
'…[Më shumë kod këtu]…
Përndryshe
MsgBox “Më falni. Vetëm Satya Nadella mund ta drejtojë këtë.”
Fundi Nëse
Fundi Nën
Nëse-Atëherë shembuj
Rutina e mëposhtme demonstron strukturën If-Then pa klauzolën opsionale Else:
Nën GreetMe()
Nëse koha < 0,5, atëherë MsgBox "Mirëmëngjes"
Fundi Nën
Procedura GreetMe përdor funksionin Koha e VBA për të marrë kohën e sistemit. Nëse ora aktuale është më pak se 0,5, rutina shfaq një përshëndetje miqësore. Nëse Koha është më e madhe ose e barabartë me 0,5, rutina përfundon dhe asgjë nuk ndodh.
Për të shfaqur një përshëndetje tjetër nëse Koha është më e madhe ose e barabartë me 0,5, mund të shtoni një deklaratë tjetër If-Then pas të parës:
Nën GreetMe2 ()
Nëse koha < 0,5, atëherë MsgBox "Mirëmëngjes"
Nëse koha >= 0,5, atëherë MsgBox "Mirëdita"
Fundi Nën
Vini re se >= (më e madhe ose e barabartë me) përdoret për deklaratën e dytë If-Then. Kjo siguron që e gjithë dita të jetë e mbuluar. Po të ishte përdorur > (më e madhe se) nuk do të shfaqej asnjë mesazh nëse kjo procedurë do të ekzekutohej saktësisht në orën 12:00 të mesditës. Kjo është shumë e pamundur, por me një program të rëndësishëm si ky, ju nuk dëshironi të rrezikoni.
Një shembull Nëse-Atëherë-Else
Një qasje tjetër ndaj problemit të mëparshëm përdor klauzolën Tjetër. Këtu është e njëjta rutinë e rikodifikuar për të përdorur strukturën If-Then-Else:
Nën GreetMe3()
Nëse koha < 0.5, atëherë MsgBox "Mirëmëngjesi" Tjetër _
MsgBox "Mirëdita"
Fundi Nën
Vini re se karakteri i vazhdimit të rreshtit (nënvizimi) është përdorur në shembullin e mëparshëm. Deklarata If-Then-Else është në fakt një deklaratë e vetme. VBA ofron një mënyrë paksa të ndryshme të kodimit të konstrukteve If-Then-Else që përdorin një deklaratë End If. Prandaj, procedura GreetMe mund të rishkruhet si
Nën GreetMe4()
Nëse Koha < 0.5 Atëherë
MsgBox "Mirëmëngjes"
Përndryshe
MsgBox "Mirëdita"
Fundi Nëse
Fundi Nën
Në fakt, mund të futni çdo numër deklaratash nën pjesën If dhe çdo numër deklaratash nën pjesën Tjetër. Kjo sintaksë është më e lehtë për t'u lexuar dhe i bën deklaratat më të shkurtra.
Po sikur të duhet të zgjerosh rutinën GreetMe për të përballuar tre kushte: mëngjes, pasdite dhe mbrëmje? Ju keni dy opsione: Përdorni tre deklarata If-Then ose përdorni një strukturë të mbivendosur If-Then-Else. Folezim nënkupton vendosjen e një strukture If-Then-Else brenda një strukture tjetër If-Then-Else. Qasja e parë, duke përdorur tre deklarata If-Then, është më e thjeshtë:
Nën GreetMe5()
Dim Msg As String
Nëse koha < 0,5, atëherë mesazhi = "Mëngjes"
Nëse koha >= 0,5 Dhe koha < 0,75, atëherë Msg = "Pasdite"
Nëse koha >= 0,75, atëherë Msg = "Mbrëmje"
MsgBox "Mirë" & Msg
Fundi Nën
Një kthesë e re u shtua me përdorimin e një ndryshoreje. Variabli Msg merr një vlerë të ndryshme teksti, në varësi të kohës së ditës. Deklarata MsgBox shfaq përshëndetjen: Mirëmëngjes, Mirëmëngjes ose Mirëmbrëma.
Rutina e mëposhtme kryen të njëjtin veprim, por përdor një strukturë If-Then-End If:
Nën GreetMe6()
Dim Msg As String
Nëse Koha < 0.5 Atëherë
Msg = "Mëngjes"
Fundi Nëse
Nëse Koha >= 0,5 Dhe Koha < 0,75 Atëherë
Msg = "Pasdite"
Fundi Nëse
Nëse Koha >= 0.75 Atëherë
Msg = "Mbrëmje"
Fundi Nëse
MsgBox "Mirë" & Msg
Fundi Nën
Duke përdorur ElseIf
Në shembujt e mëparshëm, çdo deklaratë në rutinë është ekzekutuar. Një strukturë pak më efikase do të dilte nga rutina sapo të konstatohet se një kusht është i vërtetë. Në mëngjes, për shembull, procedura duhet të shfaqë mesazhin Good Morning dhe më pas të dalë - pa vlerësuar kushtet e tjera të tepërta.
Me një rutinë të vogël si kjo, nuk duhet të shqetësoheni për shpejtësinë e ekzekutimit. Por për aplikacione më të mëdha në të cilat shpejtësia është kritike, duhet të dini për një sintaksë tjetër për strukturën If-Then.
Ja se si mund ta rishkruani rutinën GreetMe duke përdorur këtë sintaksë:
Nën GreetMe7()
Dim Msg As String
Nëse Koha < 0.5 Atëherë
Msg = "Mëngjes"
ElseIf Time >= 0,5 Dhe Koha < 0,75 Pastaj
Msg = "Pasdite"
Përndryshe
Msg = "Mbrëmje"
Fundi Nëse
MsgBox "Mirë" & Msg
Fundi Nën
Kur një kusht është i vërtetë, VBA ekzekuton deklaratat e kushtëzuara dhe struktura If përfundon. Me fjalë të tjera, kjo procedurë është pak më efikase se sa shembujt e mëparshëm. Kombinimi është se kodi është më i vështirë për t'u kuptuar.
Një shembull tjetër Nëse-Atëherë
Ja një shembull tjetër që përdor formën e thjeshtë të strukturës If-Then. Kjo procedurë e kërkon përdoruesin për një sasi dhe më pas shfaq zbritjen e duhur, bazuar në sasinë që përdoruesi fut:
Nën ShowDiscount()
Sasia e zbehtë për aq kohë sa
Zbritje e zbehtë si e dyfishtë
Sasia = InputBox ("Fut sasinë:")
Nëse Sasia > 0, atëherë Zbritja = 0.1
Nëse Sasia >= 25 Atëherë Zbritja = 0,15
Nëse Sasia >= 50 Atëherë Zbritja = 0.2
Nëse Sasia >= 75 Atëherë Zbritja = 0,25
MsgBox "Zbritje: " & Zbritje
Fundi Nën
Vini re se çdo deklaratë If-Then në këtë rutinë ekzekutohet dhe vlera për Discount mund të ndryshojë ndërsa deklaratat ekzekutohen. Megjithatë, rutina në fund të fundit shfaq vlerën e saktë për Discount sepse deklaratat Nëse-Atëherë janë në rend të vlerave të Zbritjes në rritje.
Procedura e mëposhtme kryen të njëjtat detyra duke përdorur sintaksën alternative ElseIf. Në këtë rast, rutina përfundon menjëherë pas ekzekutimit të deklaratave për një kusht të vërtetë:
Nën ShowDiscount2()
Sasia e zbehtë për aq kohë sa
Zbritje e zbehtë si e dyfishtë
Sasia = InputBox ("Fut sasinë:")
Nëse Sasia > 0 Dhe Sasia < 25 Atëherë
Zbritje = 0.1
ElseIf Sasia >= 25 Dhe Sasia < 50 Pastaj
Zbritje = 0.15
ElseIf Sasia >= 50 Dhe Sasia < 75 Pastaj
Zbritje = 0.2
ElseNëse Sasia >= 75 Pastaj
Zbritje = 0.25
Fundi Nëse
MsgBox "Zbritje: " & Zbritje
Fundi Nën
Këto struktura të shumta If-Then janë mjaft të rënda. Ju mund të dëshironi të përdorni strukturën If-Then vetëm për vendime të thjeshta binare.