Select Case -rakenne on hyödyllinen VBA-rakenne päätöksille, joihin liittyy vähintään kolme vaihtoehtoa Excel 2016:ssa (vaikka se toimii myös kahdella vaihtoehdolla ja tarjoaa vaihtoehdon If-Then-Else-rakenteelle).
Esimerkki Valitse tapaus
Seuraava esimerkki näyttää, kuinka Select Case -rakennetta käytetään:
Sub ShowDiscount3()
Himmeä Määrä yhtä pitkä
Himmeä alennus Double
Määrä = InputBox("Anna määrä:")
Valitse Tapauksen määrä
Tapaus 0 - 24
Alennus = 0,1
Tapaus 25 - 49
Alennus = 0,15
Tapaus 50 - 74
Alennus = 0,2
Tapaus on >= 75
Alennus = 0,25
Lopeta valinta
MsgBox “Alennus: “ & Alennus
Lopeta ala
Tässä esimerkissä määrä-muuttujaa arvioidaan. Rutiinitarkistukset koskevat neljää eri tapausta (0–24, 25–49, 50–74 ja 75 tai enemmän).
Jokaista Case-lausetta voi seurata mikä tahansa määrä lauseita, ja ne kaikki suoritetaan, jos tapaus on tosi. Jos käytät vain yhtä lausetta, kuten tässä esimerkissä, voit laittaa lauseen samalle riville Case-avainsanan kanssa, ja sitä edeltää kaksoispiste eli VBA-lauseen erotinmerkki. Tämä tekee koodista kompaktimman ja hieman selkeämmän. Tältä rutiini näyttää tässä muodossa:
Sub ShowDiscount4 ()
Himmeä Määrä yhtä pitkä
Himmeä alennus Double
Määrä = InputBox("Anna määrä:")
Valitse Tapauksen määrä
Tapaus 0–24: Alennus = 0,1
Tapaus 25–49: Alennus = 0,15
Tapaus 50–74: Alennus = 0,2
Tapaus on >= 75: Alennus = 0,25
Lopeta valinta
MsgBox “Alennus: “ & Alennus
Lopeta ala
Kun VBA suorittaa Select Case -rakenteen, rakenteesta poistutaan heti, kun VBA löytää tositapauksen ja suorittaa kyseisen tapauksen käskyt.
Sisäkkäinen Select Case -esimerkki
Kuten seuraavassa esimerkissä osoitetaan, voit upottaa Select Case -rakenteita. Tämä rutiini tutkii aktiivisen solun ja näyttää viestin, joka kuvaa solun sisältöä. Huomaa, että menettelyssä on kolme Select Case -rakennetta ja jokaisella on oma End Select -lauseensa:
Sub CheckCell()
Himmeä viesti merkkijonona
Valitse Case IsEmpty (ActiveCell)
Tapaus Totta
Msg = "on tyhjä."
Tapaus Muu
Valitse Case ActiveCell.HasFormula
Tapaus Totta
Msg = "on kaava"
Tapaus Muu
Valitse tapaus isnumeric(ActiveCell)
Tapaus Totta
Viesti = "on numero"
Tapaus Muu
Viesti = "sisältää tekstiä"
Lopeta valinta
Lopeta valinta
Lopeta valinta
Viestilaatikko "Solu" & ActiveCell.Address & " " & Viesti
Lopeta ala
Logiikka menee jotakuinkin näin:
Selvitä, onko solu tyhjä.
Jos se ei ole tyhjä, katso, sisältääkö se kaavan.
Jos kaavaa ei ole, selvitä, sisältääkö se numeerisen arvon vai tekstin.
Kun rutiini päättyy, Msg-muuttuja sisältää merkkijonon, joka kuvaa solun sisältöä. MsgBox-toiminto näyttää tämän viestin.
CheckCell-toimenpiteen näyttämä viesti.
Voit upottaa Select Case -rakenteita niin syvälle kuin tarvitset, mutta varmista, että jokaisella Select Case -lausekkeella on vastaava End Select -lauseke.
Jos et ole vieläkään vakuuttunut siitä, että koodin sisentäminen kannattaa, edellinen luettelo on hyvä esimerkki. Sisennykset todella tekevät pesimätasoista selkeitä. Katso sama menettely ilman sisennystä:
Sub CheckCell()
Himmeä viesti merkkijonona
Valitse Case IsEmpty (ActiveCell)
Tapaus Totta
Msg = "on tyhjä."
Tapaus Muu
Valitse Case ActiveCell.HasFormula
Tapaus Totta
Msg = "on kaava"
Tapaus Muu
Valitse tapaus isnumeric(ActiveCell)
Tapaus Totta
Viesti = "on numero"
Tapaus Muu
Viesti = "sisältää tekstiä"
Lopeta valinta
Lopeta valinta
Lopeta valinta
Viestilaatikko "Solu" & ActiveCell.Address & " " & Viesti
Lopeta ala
Melko käsittämätöntä, vai mitä?