If-Then on VBA:n tärkein ohjausrakenne. Käytät todennäköisesti tätä komentoa päivittäin. Käytä If-Then -rakennetta, kun haluat suorittaa yhden tai useamman lauseen ehdollisesti. Valinnainen Else-lause, jos se on mukana, antaa sinun suorittaa yhden tai useamman lauseen, jos testaamasi ehto ei ole tosi. Tässä on yksinkertainen CheckUser-menettely, joka on koodattu uudelleen käyttämään If-Then-Else -rakennetta:
Sub CheckUser2()
UserName = InputBox("Anna nimesi: ")
Jos UserName = "Satya Nadella" Sitten
MsgBox ("Tervetuloa Satya…")
' …[Lisää koodia täällä] …
Muu
MsgBox "Anteeksi. Vain Satya Nadella voi johtaa tätä."
Loppu Jos
Lopeta ala
Jos-niin esimerkkejä
Seuraava rutiini esittelee If-Then-rakenteen ilman valinnaista Else-lausetta:
Sub GreetMe()
Jos aika < 0,5, niin MsgBox "Hyvää huomenta"
Lopeta ala
GreetMe-menettely käyttää VBA:n Time-funktiota järjestelmän ajan saamiseksi. Jos nykyinen aika on alle 0,5, rutiini näyttää ystävällisen tervehdyksen. Jos Aika on suurempi tai yhtä suuri kuin 0,5, rutiini päättyy eikä mitään tapahdu.
Jos haluat näyttää erilaisen tervehdyksen, jos Aika on suurempi tai yhtä suuri kuin 0,5, voit lisätä toisen If-Then-lausekkeen ensimmäisen jälkeen:
Sub GreetMe2()
Jos aika < 0,5, niin MsgBox "Hyvää huomenta"
Jos aika >= 0,5, niin MsgBox "Hyvää iltapäivää"
Lopeta ala
Huomaa, että >= (suurempi tai yhtä suuri kuin) käytetään toisessa If-Then-lauseessa. Tämä varmistaa, että koko päivä on peitetty. Jos > (suurempi kuin) olisi käytetty, viestiä ei tule näkyviin, jos tämä toimenpide suoritettaisiin tarkalleen klo 12.00. Se on melko epätodennäköistä, mutta tällaisen tärkeän ohjelman kanssa et halua ottaa riskejä.
Jos-niin-else esimerkki
Toinen lähestymistapa edelliseen ongelmaan käyttää Else-lausetta. Tässä on sama rutiini koodattu uudelleen käyttämään If-Then-Else -rakennetta:
Sub GreetMe3()
Jos aika < 0,5, sitten MsgBox "Hyvää huomenta" Muu _
MsgBox "Hyvää iltapäivää"
Lopeta ala
Huomaa, että edellisessä esimerkissä käytetään rivin jatkomerkkiä (alaviivaa). Jos-niin-else-lauseke on itse asiassa yksi lause. VBA tarjoaa hieman erilaisen tavan koodata End If -käskyä käyttäviä If-Then-Else -rakenteita. Siksi GreetMe-menettely voidaan kirjoittaa uudelleen muotoon
Sub GreetMe4()
Jos aika < 0,5 Sitten
MsgBox "Hyvää huomenta"
Muu
MsgBox "Hyvää iltapäivää"
Loppu Jos
Lopeta ala
Itse asiassa voit lisätä kuinka monta lausetta If-osaan ja kuinka monta lausetta Else-osaan. Tämä syntaksi on helpompi lukea ja lyhentää lauseita.
Entä jos sinun on laajennettava GreetMe-rutiinia käsittelemään kolmea ehtoa: aamulla, iltapäivällä ja illalla? Sinulla on kaksi vaihtoehtoa: Käytä kolmea If-Then-lausetta tai käytä sisäkkäistä If-Then-Else -rakennetta. Sisäkkäisyys tarkoittaa If-Then-Else -rakenteen sijoittamista toiseen If-Then-Else -rakenteeseen. Ensimmäinen lähestymistapa, jossa käytetään kolmea If-Then -lausetta, on yksinkertaisempi:
Sub GreetMe5()
Himmeä viesti merkkijonona
Jos aika < 0,5, Viesti = "Aamu"
Jos aika >= 0,5 ja aika < 0,75, viesti = "iltapäivä"
Jos aika >= 0,75, niin Viesti = "Ilta"
Viestilaatikko "Hyvä" & Msg
Lopeta ala
Uusi käänne lisättiin muuttujan käytöllä. Msg-muuttuja saa erilaisen tekstiarvon vuorokaudenajan mukaan. MsgBox-lauseessa näkyy tervehdys: Hyvää huomenta, Hyvää iltapäivää tai Hyvää iltaa.
Seuraava rutiini suorittaa saman toiminnon, mutta käyttää If-Then-End If -rakennetta:
Sub GreetMe6()
Himmeä viesti merkkijonona
Jos aika < 0,5 Sitten
Viesti = "Huomenta"
Loppu Jos
Jos aika >= 0,5 ja aika < 0,75, niin
Viesti = "Iltapäivä"
Loppu Jos
Jos aika >= 0,75 Sitten
Viesti = "Ilta"
Loppu Jos
Viestilaatikko "Hyvä" & Msg
Lopeta ala
ElseIfin käyttö
Edellisissä esimerkeissä rutiinin jokainen käsky suoritetaan. Hieman tehokkaampi rakenne poistuisi rutiinista heti, kun ehto todetaan todeksi. Esimerkiksi aamulla toimenpiteen tulee näyttää Good Morning -viesti ja sitten poistua - arvioimatta muita tarpeettomia olosuhteita.
Tällaisella pienellä rutiinilla sinun ei tarvitse huolehtia suoritusnopeudesta. Mutta suuremmissa sovelluksissa, joissa nopeus on kriittinen, sinun pitäisi tietää toinen syntaksi If-Then -rakenteelle.
Näin voit kirjoittaa GreetMe-rutiinin uudelleen käyttämällä tätä syntaksia:
Sub GreetMe7()
Himmeä viesti merkkijonona
Jos aika < 0,5 Sitten
Viesti = "Huomenta"
ElseIf Aika >= 0,5 ja aika < 0,75 Sitten
Viesti = "Iltapäivä"
Muu
Viesti = "Ilta"
Loppu Jos
Viestilaatikko "Hyvä" & Msg
Lopeta ala
Kun ehto on tosi, VBA suorittaa ehdolliset lauseet ja If-rakenne päättyy. Toisin sanoen tämä menettely on hieman tehokkaampi kuin edelliset esimerkit. Kompromissi on, että koodia on vaikeampi ymmärtää.
Toinen jos-niin esimerkki
Tässä on toinen esimerkki, joka käyttää yksinkertaista If-Then-rakenteen muotoa. Tämä toimenpide pyytää käyttäjää antamaan määrän ja näyttää sitten sopivan alennuksen käyttäjän syöttämän määrän perusteella:
Sub ShowDiscount()
Himmeä Määrä yhtä pitkä
Himmeä alennus Double
Määrä = InputBox ("Anna määrä:")
Jos määrä > 0, alennus = 0,1
Jos määrä >= 25, niin alennus = 0,15
Jos määrä >= 50, alennus = 0,2
Jos määrä >= 75, alennus = 0,25
MsgBox “Alennus: “ & Alennus
Lopeta ala
Huomaa, että tämän rutiinin jokainen If-Then-käsky suoritetaan ja Discount-arvon arvo voi muuttua lauseita suoritettaessa. Rutiini näyttää kuitenkin lopulta oikean arvon Alennukselle, koska If-Then -lausekkeet ovat nousevassa Alennusarvojen järjestyksessä.
Seuraava toimenpide suorittaa samat tehtävät käyttämällä vaihtoehtoista ElseIf-syntaksia. Tässä tapauksessa rutiini päättyy heti tosiehdon lauseiden suorittamisen jälkeen:
Sub ShowDiscount2()
Himmeä Määrä yhtä pitkä
Himmeä alennus Double
Määrä = InputBox("Anna määrä:")
Jos määrä > 0 ja määrä < 25, niin
Alennus = 0,1
ElseIf Määrä >= 25 ja määrä < 50 Sitten
Alennus = 0,15
ElseIf Määrä >= 50 ja määrä < 75 Sitten
Alennus = 0,2
ElseIf Määrä >= 75 Sitten
Alennus = 0,25
Loppu Jos
MsgBox “Alennus: “ & Alennus
Lopeta ala
Nämä useat If-Then-rakenteet ovat melko hankalia. Voit halutessasi käyttää If-Then -rakennetta vain yksinkertaisiin binääripäätöksiin.