Če-Potem je najpomembnejša krmilna struktura VBA. Ta ukaz boste verjetno uporabljali vsak dan. Uporabite strukturo If-Then, če želite pogojno izvesti enega ali več stavkov. Izbirna klavzula Else, če je vključena, vam omogoča izvedbo enega ali več stavkov, če pogoj, ki ga preizkušate, ni resničen. Tukaj je preprost postopek CheckUser, prekodiran za uporabo strukture If-Then-Else:
Sub CheckUser2()
Uporabniško ime = InputBox ("Vnesite svoje ime: ")
Če je uporabniško ime = »Satya Nadella« Nato
MsgBox ("Dobrodošla Satya ...")
' …[Več kode tukaj] …
Drugače
MsgBox »Oprosti. To lahko vodi samo Satya Nadella."
Konec Če
Končni sub
Če-Potem primeri
Naslednja rutina prikazuje strukturo If-Then brez izbirne klavzule Else:
Sub GreetMe()
Če je čas < 0,5, potem MsgBox »Dobro jutro«
Končni sub
Postopek GreetMe za pridobivanje sistemskega časa uporablja funkcijo Time VBA. Če je trenutni čas manjši od 0,5, rutina prikaže prijazen pozdrav. Če je Time večji ali enak 0,5, se rutina konča in nič se ne zgodi.
Če želite prikazati drugačen pozdrav, če je Time večji ali enak .5, lahko za prvim dodate še en stavek If-Then:
Sub GreetMe2()
Če je čas < 0,5, potem MsgBox »Dobro jutro«
Če je čas >= 0,5, potem MsgBox »Dober dan«
Končni sub
Upoštevajte, da je >= (večje ali enako) uporabljeno za drugi stavek If-Then. To zagotavlja, da je pokrit ves dan. Če bi bil uporabljen > (večji od), se ne bi prikazalo nobeno sporočilo, če bi bil ta postopek izveden točno ob 12.00. To je malo verjetno, vendar s tako pomembnim programom, kot je ta, ne želite tvegati.
Primer Če-Poto-Else
Drug pristop k prejšnjemu problemu uporablja klavzulo Else. Tukaj je ista rutina, prekodirana za uporabo strukture If-Then-Else:
Sub GreetMe3()
Če je čas < 0,5 potem MsgBox »Dobro jutro« Drugače _
MsgBox "Dober dan"
Končni sub
Upoštevajte, da je v prejšnjem primeru uporabljen znak za nadaljevanje vrstice (podčrtaj). Stavek If-Then-Else je pravzaprav en sam stavek. VBA ponuja nekoliko drugačen način kodiranja konstruktov If-Then-Else, ki uporabljajo stavek End If. Zato lahko postopek GreetMe prepišemo kot
Sub GreetMe4()
Če je čas < 0,5 potem
MsgBox "Dobro jutro"
Drugače
MsgBox "Dober dan"
Konec Če
Končni sub
Pravzaprav lahko v del If vstavite poljubno število stavkov in pod del Else poljubno število stavkov. Ta sintaksa je lažja za branje in naredi izjave krajše.
Kaj pa, če morate rutino GreetMe razširiti na tri pogoje: zjutraj, popoldne in zvečer? Na voljo imate dve možnosti: uporabite tri stavke If-Then ali uporabite ugnezdeno strukturo If-Then-Else. Gnezdenje pomeni namestitev strukture If-Then-Else v drugo strukturo If-Then-Else. Prvi pristop z uporabo treh stavkov If-Then je enostavnejši:
Sub GreetMe5()
Zatemni sporočilo kot niz
Če je čas < 0,5 potem Msg = "Jutro"
Če je čas >= 0,5 in čas < 0,75, potem sporočilo = »popoldan«
Če je čas >= 0,75, potem sporočilo = "zvečer"
MsgBox »Dobro« & Msg
Končni sub
Z uporabo spremenljivke je bil dodan nov zasuk. Spremenljivka Msg dobi drugačno besedilno vrednost, odvisno od časa v dnevu. Izjava MsgBox prikaže pozdrav: Dobro jutro, dober dan ali dober večer.
Naslednja rutina izvede isto dejanje, vendar uporablja strukturo If-Then-End If:
Sub GreetMe6()
Zatemni sporočilo kot niz
Če je čas < 0,5 potem
Sporočilo = "Jutro"
Konec Če
Če je čas >= 0,5 in čas < 0,75 potem
Sporočilo = "popoldne"
Konec Če
Če je čas >= 0,75 Potem
Sporočilo = "Večer"
Konec Če
MsgBox »Dobro« & Msg
Končni sub
Uporaba ElseIf
V prejšnjih primerih se izvede vsak stavek v rutini. Nekoliko učinkovitejša struktura bi izstopila iz rutine, takoj ko se ugotovi, da je pogoj resničen. Zjutraj naj bi na primer postopek prikazal sporočilo Dobro jutro in nato zapustil – ne da bi ocenil druge odvečne pogoje.
Z majhno rutino, kot je ta, vam ni treba skrbeti za hitrost izvajanja. Toda za večje aplikacije, pri katerih je hitrost ključnega pomena, bi morali poznati drugo sintakso za strukturo If-Then.
Tukaj je, kako lahko prepišete rutino GreetMe s to sintakso:
Sub GreetMe7()
Zatemni sporočilo kot niz
Če je čas < 0,5 potem
Sporočilo = "Jutro"
Drugače Če je čas >= 0,5 in čas < 0,75 Potem
Sporočilo = "popoldne"
Drugače
Sporočilo = "Večer"
Konec Če
MsgBox »Dobro« & Msg
Končni sub
Ko je pogoj resničen, VBA izvede pogojne stavke in struktura If se konča. Z drugimi besedami, ta postopek je nekoliko učinkovitejši od prejšnjih primerov. Kompromis je, da je kodo težje razumeti.
Še en primer Če-Potem
Tukaj je še en primer, ki uporablja preprosto obliko strukture If-Then. Ta postopek uporabnika pozove k količini in nato prikaže ustrezen popust glede na količino, ki jo uporabnik vnese:
Sub ShowDiscount()
Dim Quantity As Long
Dim Discount As Double
Količina = InputBox ("Vnesite količino:")
Če je količina > 0, potem je popust = 0,1
Če je količina >= 25, potem je popust = 0,15
Če je količina >= 50, potem je popust = 0,2
Če je količina >= 75, potem je popust = 0,25
MsgBox "Popust: " & popust
Končni sub
Upoštevajte, da se vsak stavek If-Then v tej rutini izvede in vrednost za Discount se lahko spremeni, ko se stavki izvajajo. Vendar rutina na koncu prikaže pravilno vrednost za popust, ker so stavki Če-Potem v vrstnem redu naraščajočih vrednosti popusta.
Naslednji postopek izvaja enake naloge z uporabo alternativne sintakse ElseIf. V tem primeru se rutina konča takoj po izvedbi stavkov za resnični pogoj:
Sub ShowDiscount2()
Dim Quantity As Long
Dim Discount As Double
Količina = InputBox ("Vnesite količino: ")
Če je količina > 0 in količina < 25, potem
Popust = 0,1
Drugače Če je količina >= 25 in količina < 50 Potem
Popust = 0,15
Drugače Če je količina >= 50 in količina < 75 Potem
Popust = 0,2
Količina ElseIf >= 75 Potem
Popust = 0,25
Konec Če
MsgBox "Popust: " & popust
Končni sub
Te številne strukture Če-Potem so precej okorne. Morda boste želeli uporabiti strukturo If-Then samo za preproste binarne odločitve.