VBA valitud juhtumi avaldus

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
wave wave wave wave wave