VBA -s on Valige juhtumi avaldus on alternatiiv Kui-siis avaldus, mis võimaldab teil testida tingimuste täitmist, käivitades iga tingimuse jaoks konkreetse koodi. Lause Vali on eelistatavam kui avaldus If, kui töödelda on mitu tingimust.
Valige juhtumi näide
See näide palub kasutajal YesNoCancel MessageBoxi ja katsetab, millise suvandi kasutaja valis:
1234567891011121314 | Alamvalik_juhtum_jah_ ei_ tühista ()Dim nResult VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Valige juhtum nResultJuhtum vbJahMsgBox "Jah"Juhtum vbNoMsgBox "Ei"Juhtum vbCancelMsgBox "Tühista"Lõpp ValiEnd Sub |
Allpool oleme samaväärse välja kirjutanud, kasutades selle asemel lauset If. Märkate, et juhtumi valiku avaldus hõlmab veidi vähem trükkimist - see eelis suureneb mitme kriteeriumi testimisel.
12345678910111213 | Sub If_Yes_No_Cancel ()Dim nResult VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Kui nResult = vbJah SiisMsgBox "Jah"MuiduKui nResult = vbNo SiisMsgBox "Ei"MuiduKui nResult = vbTühista SiisMsgBox "Tühista"Lõpp KuiEnd Sub |
Juhtumi avalduse süntaks
Valikjuhtumi avalduse süntaks on järgmine:
12345678910 | Valige juhtum [Test Expression]Juhtum [tingimus 1][Toiming, kui tingimus 1 on täidetud]Juhtum [tingimus 2][Toiming, kui tingimus 2 on täidetud]Juhtum [tingimus n][Toiming, kui tingimus n on tõene]Juhtum muidu[Toiming, kui ükski pole tõene]Lõpp Vali |
Kus:
[Testväljend] - Kas väärtust tuleb hinnata. Tavaliselt on see muutuja.
[Toiming, kui tingimus n on tõene] - Kas ainult kood käivitatakse, kui tingimus on täidetud (nagu If -avaldusega)
[Tingimus n] - Kas testimise tingimus on. Tingimuste testimiseks on palju erinevaid viise. Me arutame neid allpool.
Juhtumi avaldus käivitab ESIMESE tingimuse koodi, mis on tõene. Kui ükski tingimus ei ole täidetud, siis koodi ei täideta, välja arvatud juhul, kui lisatakse klausel Else.
Valige juhtumikriteeriumid
Valiku Juhtumid abil saab hinnata nii arvväärtusi kui ka teksti. Kõigepealt arutame, kuidas kasutada valikjuhtumeid numbriliste avaldiste hindamiseks.
Täpne vaste - numbrid
Juhtumi avaldusega saate hõlpsalt testida täpset vastet.
1 | Juhtum 10 |
või lisage komad, et testida mitme numbriga täpseid vasteid:
1 | Kohtuasi 20, 30, 40 |
1234567891011121314 | Alam TäpneVaste_numbrid ()Dim n Nagu täisarvn = CInt (sisendkast ("…"))Valige juhtum nJuhtum 10"Kui n on 10, siisKohtuasi 20, 30, 40"Kui n on 20/30/40, siisJuhtum muidu"Kui n pole 10/20/30/40, siisLõpp ValiEnd Sub |
Vahemikud
Saate testida, kas number jääb vahemikku järgmiselt:
1 | Kohtuasi 55 kuni 74 |
See protseduur loob õpilasele täheskoori nende numbrilise tulemuse põhjal:
12345678910111213141516171819202122 | Alamarv_klass ()Dim Score täisarvunaDim LetterGrade kui stringScore = InputBox ("Sisesta õpilase skoor")Valige juhtumiskoorJuhtum 90 kuni 100LetterGrade = "A"Kohtuasi 80 kuni 90LetterGrade = "B"Kohtuasi 70 kuni 80LetterGrade = "C"Kohtuasi 60 kuni 70LetterGrade = "D"Juhtum muiduLetterGrade = "F"Lõpp ValiMsgBox "Õpilase hinne on:" & LetterGradeEnd Sub |
Case Isiga saate testida ka vahemikke
Valige juhtum
1234 | Juhtum on <55'Ära tee midagiJuhtum <= 74MsgBox "Vahemikus" |
Pidage meeles, et juhtumi avaldus käivitab koodi ainult AINULT esimese vaste jaoks.
See protseduur arvutab õpilase palgaastme, kasutades juhtumit asemel juhtumit.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade ()Dim Score täisarvunaDim LetterGrade kui stringScore = InputBox ("Sisesta õpilase skoor")Valige juhtumiskoorJuhtum on> = 90LetterGrade = "A"Juhtum on> = 80LetterGrade = "B"Juhtum on> = 70LetterGrade = "C"Juhtum on> = 60LetterGrade = "D"Juhtum muiduLetterGrade = "F"Lõpp ValiMsgBox "Õpilase hinne on:" & LetterGradeEnd Sub |
Juhtum muidu
Kui tingimused ei ole täidetud, saate oma juhtumi avalduse lõppu lisada sõna „Muu juhtum”.
1 | Juhtum muidu |
Vaadake eelmise koodinäite lõppu, et näha, kuidas Case Else'i kasutada saab.
Valige juhtum - tekst ja meeldib operaator
Siiani on meie valitud juhtumite näited töötanud ainult numbritega. Tekstiga saate kasutada ka valitud juhtumi avaldusi.
Täpne vaste - tekst
Saate testida, kas avaldis vastab täpselt järgmisele fraasile:
1 | Juhtum "Peet" |
Või kontrollige komadega, kas avaldis vastab täpselt mitmele fraasile:
1 | Kott "Õun", "Banaan", "Oranž" |
Selle kokkupanek näeb välja selline:
12345678910 | Täpne vaste_toit ()Valige juhtumivahemik ("a1"). VäärtusJuhtum "Peet"MsgBox "Köögiviljad"Kott "Õun", "Banaan", "Oranž"MsgBox "Puu"Lõpp ValiEnd Sub |
Suur- ja väiketähed
Vaikimisi VBA on tõstutundlik. See tähendab, et VBA peab “teksti” teistsuguseks kui “teksti”. Väiketähtede tundlikkuse väljalülitamiseks lisage mooduli ülaossa suvand Võrdle teksti:
1 | Valik Võrdle teksti |
See näide muudab suurtähtede valiku tekstiga töötamisel tundmatuks:
123456789101112 | Valik Võrdle tekstiTäpne vaste_toit ()Valige juhtumivahemik ("a1"). VäärtusJuhtum "Peet"MsgBox "Köögiviljad"Kott "Õun", "Banaan", "Oranž"MsgBox "Puu"Lõpp ValiEnd Sub |
Juhtum Meeldib
Like operaator võimaldab teil teha ebatäpseid võrdlusi. Kui tekst sobib, tagastab Like väärtuse TRUE, kui see ei ühti, tagastab FALSE. See muudab Like -operaatori If -avaldustega hõlpsasti kasutatavaks, kuid juhtumite avaldustega ei tööta see nii lihtsalt.
Juhtum nagu - ebaõnnestunud test
Järgmine kood näitab, et meeldib operaator ei tööta valitud juhtumiga:
1234567891011 | Sub Select_Case_Like_DoesnotWork ()Hämar sõna stringinasõna = "KAKAO"Valige käändsõnaJuhtumissõna2 nagu "*C*C*"Sõnumikast "Hea"Juhtum muiduMsgBox "Pole hea"Lõpp ValiEnd Sub |
Juhtum nagu - õige viis
Siiski võime lisada avaldise TRUE, et valida avaldus koos sarnase operaatoriga:
1234567891011 | Sub Select_Case_Like_CorrectWay ()Hämar sõna stringinasõna = "KAKAO"Valige juhtum TõsiJuuresõna nagu "*C*C*"Sõnumikast "Hea"Juhtum muiduMsgBox "Pole hea"Lõpp ValiEnd Sub |
Juhtum - koolon
Juhtumi avalduse kasutamisel saate iga tingimusega lisada nii palju koodiridu, kui soovite käitada. Siiski, kui teil on vaja käivitada ainult üks koodirida. Kooloniga (:) saate kirjutada kõik samale reale.
Siin on sama õpilashinne näide nagu varem, välja arvatud koodi lühendamiseks koolon.
1234567891011121314151617 | Alamarv_klass_kool ()Dim Score täisarvunaDim LetterGrade kui stringScore = InputBox ("Sisesta õpilase skoor")Valige juhtumiskoorJuhtum 90–100: LetterGrade = "A"Juhtumid 80 kuni 90: LetterGrade = "B"Juhtumid 70 kuni 80: LetterGrade = "C"Juhtum 60–70: LetterGrade = "D"Muu juhtum: LetterGrade = "F"Lõpp ValiMsgBox "Õpilase hinne on:" & LetterGradeEnd Sub |
Juhtumi valimine - ja / või - mitu tingimust
Ja / või operaatorite abil saate koos valitud juhtumiga testida täiendavaid kriteeriume.
Selles näites kasutame muutuja „vanus” valikujuhtumit, kuid soovime ka seksi testida. Seega kasutame keerukama testi tegemiseks operaatorit And:
123456789101112131415161718 | Sub NestedSelectCase ()Hämardunud sugu nagu stringDim vanus täisarvunasugu = "mees" või nainevanus = 15Valige juhtumi vanusJuhtum on <20 ja seks = "mees"Msgbox "Mees alla 20"Juhtum on <20 ja seks = "naine"Msgbox "Naine alla 20"Juhtum on> = 20 Ja sugu = "mees"Msgbox "Mees üle 20"Juhtum on> = 20 Ja sugu = "naine"Msgbox "Naine üle 20"Lõpp ValiEnd Sub |
Pesastatud juhtumite avaldused
Täpselt nagu If -avaldused, saate ka juhtumiteavaldusi üksteise vahele paigutada.
123456789101112131415161718192021222324 | Sub NestedSelectCase ()Hämardunud sugu nagu stringDim vanus täisarvunasugu = "mees" või nainevanus = 15Valige juhtumi vanusJuhtum on <20Valige SeksjuhtumJuhtum "mees"MsgBox "Mees alla 20"Juhtum "emane"MsgBox "Naine alla 20"Lõpp ValiJuhtum on> = 20 Ja sugu = "naine"Valige SeksjuhtumJuhtum "mees"MsgBox "Mees üle 20"Juhtum "emane"MsgBox "Naine üle 20"Lõpp ValiLõpp ValiEnd Sub |
Juhtumi avaldus vs. kui avaldus
Mida rohkem tingimusi testida, seda kasulikum on juhtumi avaldus If -avaldusega võrreldes. Vaatame näidet.
Siin on kood, mida on vaja, et testida, kas töölehe nimi võrdub väärtuste komplektiga, kui kasutada lauset If:
12345 | Kui Name = "Eelarve" Või Nimi = "Prognoos" Või Nimi = "Trailing12" Või _Name = "Flex" Või Name = "OtherRatios" Või Name = "Comparison" Või _Name = "BudReview" Või Name = "P & L_Review" Või Name = "Other" Siis'Tee midagiLõpp Kui |
Siin on sama kood, kasutades selle asemel väljavõtet Vali:
12345 | Valige juhtumi nimiJuhtum "Eelarve", "Prognoos", "Trailing12", "Flex", "OtherRatios", _"Võrdlus", "BudReview", "P & L_Review", "Other"'Tee midagiLõpp Vali |
Näete, et selles stsenaariumis on valikulause kasutamine palju lihtsam. See on oluliselt vähem trükkimist ja seda on palju lihtsam lugeda.
VBA valitud juhtumite näited
Näide 1. Juhtumi avaldus Kasutaja määratud funktsioon (UDF)
Kordame ülaltoodud hinnete arvutamise näidet ja loome õpilase skoori arvutamiseks UDF -i:
12345678910111213141516 | Funktsioon GetGrade (skoor täisarvuna) stringinaValige juhtumiskoorJuhtum 90 kuni 100GetGrade = "A"Kohtuasi 80 kuni 90GetGrade = "B"Kohtuasi 70 kuni 80GetGrade = "C"Kohtuasi 60 kuni 70GetGrade = "D"Juhtum muiduGetGrade = "F"Lõpp ValiLõppfunktsioon |
Nüüd saame kasutada Exceli töölehel funktsiooni GetGrade õpilaste hinnete kiireks arvutamiseks:
Näide 2. Testlehe nimi / silmusejuhtumi avaldus
See kood vaatab läbi kõik töövihiku töölehed, kaitsmata lehed, mis vastavad teatud kriteeriumidele:
123456789101112 | Alamjuhtum_UnProtectSheet ()Dim ws töölehenaIga ws töölehtedelValige Case ws.Name 'Kõigi suhtarvudega lehtede loendJuhtum "Eelarve", "Prognoos", "Trailing12", "Flex", "OtherRatios", _"Võrdlus", "BudReview", "P & L_Review", "Other"ws. KaitstaLõpp ValiJärgmine wsEnd Sub |
Näide 3. Valige juhtum - lahtri väärtus
Selle näite abil testitakse õpilase skoori lahtris, väljastades tähemärgi otse paremale lahtrisse.
12345678910111213141516 | Alam TestCellValue ()Hämardage rakk vahemikunaMäära lahter = vahemik ("C1")Valige Väikelahtri väärtusJuhtum 90 kuni 100lahter.Nihke (0, 1) = "A"Kohtuasi 80 kuni 90lahter.Nihke (0, 1) = "B"Kohtuasi 70 kuni 80lahter.Nihke (0, 1) = "C"Kohtuasi 60 kuni 80lahter.Nihke (0, 1) = "D"Lõpp ValiEnd Sub |
Näide 4. Valige juhtum - kuupäevad
Selle juhtumi valiku näide on funktsioon, mis testib, millisesse kvartalisse kuupäev kuulub.
123456789101112131415161718 | Alamkatse kuupäev ()MsgBox GetQuarter (CDate ("20.07.2019"))End SubFunktsioon GetQuarter (dt kui kuupäev) täisarvunaDim sht kui töölehtValige juhtum dtKohtuasi CDate ("01/01/2019") CDate -le ("03/31/2019")GetQuarter = 1Kohtuasi CDate ("04/01/2019") CDate'ile ("30.06.2019")GetQuarter = 2Kohtuasi CDate ("07/01/2019") CDate -le ("30.09.2019")GetQuarter = 3Kohtuasi CDate ("10/01/2019") CDate -le ("31.12.2019")GetQuarter = 4Lõpp ValiLõppfunktsioon |
Kuna see on funktsioon, saate seda Exceli funktsioonina kasutada:
Näide 5 Kontrollige, kas arv on paaritu või paaritu
See näide testib, kas arv on paaritu või paaritu.
123456789101112 | Sub CheckOddEven ()Dim n Nagu täisarvn = InputBox ("Sisestage number")Valige Case n Mod 2Juhtum 0MsgBox "Number on paaris."Juhtum 1MsgBox "Number on paaritu."Lõpp ValiEnd Sub |
Näide 6 Kontrollige, kas kuupäev on nädalapäeval või nädalavahetusel
Nende näidete abil testitakse, kas kuupäev langeb nädalapäevale või nädalavahetusele.
123456789101112131415161718192021 | Sub CheckWeekDay ()Dim dt kui kuupäevdt = CDate ("01.01.2020")Valige juhtumi nädalapäev (dt)Juhtum vbEsmaspäevMsgBox "On esmaspäev"Juhtum vbTesdayMsgBox "On teisipäev"Juhtum vbKolmapäevMsgBox "On kolmapäev"Juhtum vbNeljapäevMsgBox "On neljapäev"Juhtum vbFridayMsgBox "On reede"Juhtum vbLaupäevMsgBox "On laupäev"Juhtum vbPühapäevMsgBox "On pühapäev"Lõpp ValiEnd Sub |
123456789101112 | Alamkontrolli nädal ()Dim dt kui kuupäevdt = CDate ("01.01.2020")Valige juhtumi nädalapäev (dt)Juhtum vbSaturday, vbSundayMsgBox "See on nädalavahetus"Juhtum muiduMsgBox "See pole nädalavahetus"Lõpp ValiEnd Sub |
VBA Valige juhtum Accessis
Kõik ülaltoodud näited töötavad Access VBA -s täpselt samamoodi nagu Excel VBA -s.
123456789101112131415161718192021 | Alam TestCellValue ()Dim dbs andmebaasinaMõõtke esmalt kui RecordSetMäära dbs = CurrentDBMäära rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Koos esimesega.MoveFirst.MuudaValige Case rst.Fields ("Linn")Juhtum "Austin".rst.Fields ("TelCode") = "512"Juhtum "Chicago".rst.Fields ("TelCode") = "312"Juhtum "New YorK".rst.Fields ("TelCode") = "1212"Juhtum "San Fransisco".rst.Fields ("TelCode") = "415"Lõpp Vali.UuendaLõpetaLõpp Sus |