„VBA Select Case Statement“

VBA, Pasirinkite atvejo pareiškimą yra alternatyva Jei-tada teiginys, leidžiantis patikrinti, ar įvykdomos sąlygos, vykdant konkretų kiekvienos sąlygos kodą. Pasirinkti teiginį geriau nei teiginį „If“, kai reikia apdoroti kelias sąlygas.

Pasirinkite atvejo pavyzdį

Šis pavyzdys paragina vartotoją naudoti „YesNoCancel MessageBox“ ir išbando, kurią parinktį vartotojas pasirinko:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult Kaip VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Pasirinkite Case nResultByla vbTaip„MsgBox“ „Taip“Byla vbNe„MsgBox“ „Ne“Byla „vbCancel“„MsgBox“ „Atšaukti“Pabaiga PasirinkitePabaiga Sub

Žemiau mes parašėme ekvivalentą naudodami vietoj If teiginio. Pastebėsite, kad atvejo pasirinkimo pareiškimas apima šiek tiek mažiau rašymo - ši nauda padidėja bandant kelis kriterijus.

12345678910111213 Antrinis If_Yes_No_Cancel ()Dim nResult Kaip VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Jei nResult = vbTaip Tada„MsgBox“ „Taip“Kitaip Jei nResult = vbNe Tada„MsgBox“ „Ne“Kitaip Jei nResult = vbAtšaukti Tada„MsgBox“ „Atšaukti“Pabaiga JeiPabaiga Sub

Atvejo teiginio sintaksė

Pasirinkimo atvejo pareiškimo sintaksė yra tokia:

12345678910 Pasirinkite atvejį [Bandymo išraiška]Byla [1 sąlyga][Veiksmas, jei 1 sąlyga yra teisinga]Byla [2 sąlyga][Veiksmas, jei 2 sąlyga yra teisinga]Byla [sąlyga n][Veiksmas, jei n sąlyga yra teisinga]Kita byla[Veiksmas, jei niekas nėra tiesa]Pabaiga Pasirinkite

Kur:

[Bandymo išraiška] - Ar verta vertinti. Paprastai tai yra kintamasis.

[Veiksmas, jei n sąlyga yra teisinga] - Ar tik kodas turi būti paleistas, jei sąlyga įvykdyta (kaip ir su teiginiu „If“)

[Sąlyga n] - Ar reikia išbandyti. Yra daugybė skirtingų sąlygų bandymo būdų. Mes juos aptarsime žemiau.

Atvejo ataskaita įvykdys PIRMOSIOS sąlygos, kuri, kaip nustatyta, yra TIKRA, kodą. Jei nė viena sąlyga nėra įvykdyta, kodas nebus vykdomas, nebent pridedama kita sąlyga.

Pasirinkite atvejo kriterijus

Pasirinkti atvejus galima naudoti tiek skaitinėms reikšmėms, tiek tekstui įvertinti. Pirmiausia aptarsime, kaip „Select Cases“ naudoti skaitinėms išraiškoms įvertinti.

Tiksli atitiktis - skaičiai

Galite lengvai patikrinti tikslią atitiktį naudodami atvejo pareiškimą:

1 10 atvejis

arba pridėkite kablelius, kad patikrintumėte tikslią atitiktį su keliais skaičiais:

1 20, 30, 40 atvejis
1234567891011121314 Sub ExactMatch_Numbers ()Dim n Kaip sveikasis skaičiusn = CInt („InputBox“ („…“))Pasirinkite atvejį n10 atvejis„Jei n yra 10, tada20, 30, 40 atvejis„Jei n yra 20/30/40, tadaKita byla„Jei n nėra 10/20/30/40, tadaPabaiga PasirinkitePabaiga Sub

Diapazonai

Galite patikrinti, ar skaičius patenka į tokį diapazoną:

1 Byla nuo 55 iki 74

Ši procedūra sukurs studentų raidžių balą pagal jų skaičių:

12345678910111213141516171819202122 Sub Calc_Grade ()„Dim Score As Integer“„Dim LetterGrade“ kaip eilutėRezultatas = „InputBox“ („Įveskite mokinio balą“)Pasirinkite atvejo balą90–100 atvejis„LetterGrade“ = „A“Byla nuo 80 iki 90„LetterGrade“ = „B“70–80 atvejis„LetterGrade“ = „C“60–70 atvejis„LetterGrade“ = „D“Kita byla„LetterGrade“ = „F“Pabaiga Pasirinkite„MsgBox“ „Studento pažymys yra:“ ir „LetterGrade“Pabaiga Sub

Taip pat galite išbandyti diapazonus naudodami „Case Is“

Pasirinkite Byla yra

1234 Atvejis <55'Nieko nedarykByla <= 74„MsgBox“ diapazone

Atminkite, kad atvejo ataskaitoje bus vykdomas tik TIK pirmosios rungtynės kodas.

Ši procedūra apskaičiuos mokinio pažymį naudodama „Case Is“, o ne „Case To“.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()„Dim Score As Integer“„Dim LetterGrade“ kaip eilutėRezultatas = „InputBox“ („Įveskite mokinio balą“)Pasirinkite atvejo baląByla yra> = 90„LetterGrade“ = „A“Byla yra> = 80„LetterGrade“ = „B“Byla yra> = 70„LetterGrade“ = „C“Byla yra> = 60„LetterGrade“ = „D“Kita byla„LetterGrade“ = „F“Pabaiga Pasirinkite„MsgBox“ „Studento pažymys yra:“ ir „LetterGrade“Pabaiga Sub

Kita byla

Prie bylos pareiškimo pabaigos galite pridėti „Case Else“, kad padarytumėte ką nors, jei nebus įvykdytos jokios sąlygos:

1 Kita byla

Žr. Ankstesnio kodo pavyzdžio pabaigą, kad sužinotumėte, kaip galima naudoti „Case Else“.

Pasirinkite atvejį - tekstas ir panašus operatorius

Iki šiol mūsų „Select Case“ pavyzdžiai veikė tik su skaičiais. Taip pat galite naudoti „Select Case“ teiginius su tekstu.

Tiksli atitiktis - tekstas

Galite patikrinti, ar išraiška atitinka tikslią frazę:

1 Dėklas „Burokėliai“

Arba naudokite kablelius, kad patikrintumėte, ar išraiška tiksliai atitinka daugiau nei vieną frazę:

1 Dėklas „Apple“, „Banana“, „Orange“

Sujungimas atrodo taip:

12345678910 Sub ExactMatch_Food ()Pasirinkite atvejo diapazoną („a1“). ReikšmėDėklas „Burokėliai“„MsgBox“ daržovėDėklas „Apple“, „Banana“, „Orange“„MsgBox“ vaisiaiPabaiga PasirinkitePabaiga Sub

Didžiosios ir mažosios raidės

Pagal numatytuosius nustatymus VBA yra jautrus didžiosioms ir mažosioms raidėms. Tai reiškia, kad VBA „tekstą“ laiko kitokiu nei „tekstą“. Norėdami išjungti didžiųjų ir mažųjų raidžių didinimą, pridėkite parinktį Palyginti tekstą modulio viršuje:

1 Parinktis Lyginti tekstą

Šis pavyzdys sumažins didžiųjų ir mažųjų raidžių rašymą dirbant su tekstu:

123456789101112 Parinktis Lyginti tekstąSub ExactMatch_Food ()Pasirinkite atvejo diapazoną („a1“). ReikšmėDėklas „Burokėliai“„MsgBox“ daržovėDėklas „Apple“, „Banana“, „Orange“„MsgBox“ vaisiaiPabaiga PasirinkitePabaiga Sub

Byla Like

„Like“ operatorius leidžia atlikti netikslius palyginimus. Jei tekstas sutampa, „Like“ grąžina TRUE, o jei neatitinka - grąžina FALSE. Dėl to „Like“ operatorių lengva naudoti naudojant „If Statements“, tačiau jis neveiks taip lengvai su „Case Statements“.

Panašus atvejis - nesėkmingas testas

Šis kodas parodo, kad „Like“ operatorius neveikia su pasirinktu atveju:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Tamsus žodis kaip eilutėžodis = "KAKAVA"Pasirinkite Sąvokos žodisBylos žodis2 kaip „*C*C*“„MsgBox“ „Geras“Kita byla„MsgBox“ nėra geraiPabaiga PasirinkitePabaiga Sub

Panašus atvejis - teisingas kelias

Tačiau mes galime pridėti išraišką TRUE, kad pasirinkimo pareiškimas veiktų su panašiu operatoriumi:

1234567891011 Sub Select_Case_Like_CorrectWay ()Tamsus žodis kaip eilutėžodis = "KAKAVA"Pasirinkite „Tiesa“Sąvokos žodis kaip „*C*C*“„MsgBox“ „Geras“Kita byla„MsgBox“ nėra geraiPabaiga PasirinkitePabaiga Sub

Byla - Kolonas

Naudodami atvejo pareiškimą galite pridėti tiek kodo eilučių, kiek norėtumėte paleisti su kiekviena sąlyga. Tačiau jei jums reikia paleisti tik vieną kodo eilutę. Galite naudoti dvitaškį (:), kad viską parašytumėte toje pačioje eilutėje.

Čia yra tas pats studentų pažymių pavyzdys, kaip ir anksčiau, išskyrus kodo sutrumpinimą naudojant dvitaškį:

1234567891011121314151617 Sub Calc_Grade_colon ()„Dim Score As Integer“„Dim LetterGrade“ kaip eilutėRezultatas = „InputBox“ („Įveskite mokinio balą“)Pasirinkite atvejo balą90–100 atvejis: „LetterGrade“ = „A“80–90 atvejis: „LetterGrade“ = „B“70–80 atvejis: „LetterGrade“ = „C“60–70 atvejis: „LetterGrade“ = "D"Kitas atvejis: „LetterGrade“ = „F“Pabaiga Pasirinkite„MsgBox“ „Studento pažymys yra:“ ir „LetterGrade“Pabaiga Sub

Atvejo pasirinkimas - ir / arba - kelios sąlygos

Galite naudoti ir (arba) operatorius, norėdami išbandyti papildomus kriterijus kartu su pasirinktu atveju.

Šiame pavyzdyje mes naudojame pasirinkimo atvejį kintamajame „amžius“, tačiau taip pat norime išbandyti seksą. Taigi mes naudojame „And Operator“, kad atliktume sudėtingesnį testą:

123456789101112131415161718 Sub NestedSelectCase ()Tamsus seksas kaip stygaTamsus amžius kaip sveikasis skaičiuslytis = "vyras" arba moterisamžius = 15Pasirinkite atvejo amžiųByla yra <20, o seksas = "vyras"Pranešimas „Vyras iki 20 metų“Byla yra <20, o seksas = "moteris"„Msgbox“ moteris iki 20 metųByla yra> = 20, o seksas = "vyras"„Msgbox“ Vyras virš 20 metųByla yra> = 20 Ir seksas = "moteris"„Msgbox“ moteris virš 20 metųPabaiga PasirinkitePabaiga Sub

Įdėtos bylos pareiškimai

Kaip ir „If Statements“, galite įterpti bylų pareiškimus vienas į kitą:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Tamsus seksas kaip stygaTamsus amžius kaip sveikasis skaičiusseksas = "vyras" arba moterisamžius = 15Pasirinkite atvejo amžiųAtvejis <20Pasirinkite Sekso atvejisByla „vyriškas“„MsgBox“ Vyras iki 20 metųByla „moteris“„MsgBox“ Moteris iki 20 metųPabaiga PasirinkiteByla yra> = 20 Ir seksas = "moteris"Pasirinkite Sekso atvejisByla „vyriškas“„MsgBox“ Vyras virš 20 metųByla „moteris“„MsgBox“ Moteris virš 20 metųPabaiga PasirinkitePabaiga PasirinkitePabaiga Sub

Atvejo ataskaita prieš If pareiškimą

Kuo daugiau sąlygų išbandyti, tuo naudingesnis atvejo pareiškimas yra lyginamas su teiginiu „If“. Pažvelkime į pavyzdį.

Štai kodas, reikalingas norint patikrinti, ar darbalapio pavadinimas lygus verčių rinkiniui naudojant „If“ teiginį:

12345 Jei Pavadinimas = "Biudžetas" Ar Pavadinimas = "Prognozė" Arba Pavadinimas = "Trailing12" Arba _Pavadinimas = "Flex" arba pavadinimas = "OtherRatios" arba pavadinimas = "Palyginimas" Arba _Name = "BudReview" Arba Name = "P & L_Review" Arba Name = "Other" Tada'Daryk ką norsPabaiga Jei

Čia yra tas pats kodas, naudojant pasirinkimo pareiškimą:

12345 Pasirinkite atvejo pavadinimąByla „Biudžetas“, „Prognozė“, „Trailing12“, „Flex“, „OtherRatios“, _„Palyginimas“, „BudReview“, „P & L_Review“, „Other“'Daryk ką norsPabaiga Pasirinkite

Matote, kad šiuo atveju daug lengviau naudoti pasirinkimo pareiškimą. Tai žymiai mažiau rašoma ir daug lengviau skaityti.

VBA pasirinktų atvejų pavyzdžiai

Pavyzdys 1. Vartotojo apibrėžta funkcija (UDF)

Pakartokite aukščiau pateiktą mūsų skaičiavimo pavyzdį ir sukurkite UDF, kad apskaičiuotumėte studento balą:

12345678910111213141516 Funkcija „GetGrade“ (balas kaip sveikasis skaičius) kaip eilutėPasirinkite atvejo balą90–100 atvejis„GetGrade“ = „A“Byla nuo 80 iki 90„GetGrade“ = „B“70–80 atvejis„GetGrade“ = „C“60–70 atvejis„GetGrade“ = "D"Kita byla„GetGrade“ = „F“Pabaiga PasirinkitePabaigos funkcija

Dabar „Excel“ darbalapyje galime naudoti funkciją „GetGrade“, kad greitai apskaičiuotume mokinių pažymius:

Pavyzdys 2. Bandymo lapo pavadinimas / kilpos atvejis

Šis kodas peržiūrės visus darbalapio darbalapius, lapus „Neapsaugoti“, kurie atitinka tam tikrus kriterijus:

123456789101112 Sub Case_UnProtectSheet ()Dim ws kaip darbalapisUž kiekvieną ws darbalapiuosePasirinkite „Case ws.Name“ Visų lapų su santykiais sąrašasByla „Biudžetas“, „Prognozė“, „Trailing12“, „Flex“, „OtherRatios“, _„Palyginimas“, „BudReview“, „P & L_Review“, „Other“ws. NeapsaugotiPabaiga PasirinkiteKitas wsPabaiga Sub

Pvz. 3. Pasirinkite atvejį - langelio reikšmę

Šis pavyzdys patikrins studento balą langelyje, raidės pažymį pateikdamas tiesiai į langelį dešinėje.

12345678910111213141516 Sub TestCellValue ()Šviesos langelis kaip diapazonasNustatyti langelį = diapazonas ("C1")Pasirinkite Bylos langelis. Vertė90–100 atvejisląstelė. Poslinkis (0, 1) = "A"Byla nuo 80 iki 90ląstelė. Poslinkis (0, 1) = "B"70–80 atvejislangelis. Poslinkis (0, 1) = "C"Byla nuo 60 iki 80ląstelė. Poslinkis (0, 1) = "D"Pabaiga PasirinkitePabaiga Sub

Pvz. 4. Pasirinkite Byla - datos

Šis atvejo pasirinkimo pavyzdys yra funkcija, kuri tikrina, į kurį ketvirtį patenka data.

123456789101112131415161718 Antroji bandymo data ()„MsgBox GetQuarter“ (kompaktinis diskas („2019-07-20“))Pabaiga SubFunkcija „GetQuarter“ (dt kaip data) kaip sveikasis skaičiusDim sht kaip darbalapisPasirinkite Byla dtByla CDate („2019-01-01“) Į CDate („2019-03-31“)„GetQuarter“ = 1Byla CDate („2019-04-01“) Į CDate („2019-06-30“)„GetQuarter“ = 2Byla CDate („2019-07-01“) Į CDate („2019-09-30“)„GetQuarter“ = 3Byla CDate („10/01/2019“) Į CDate („2019-12-31“)„GetQuarter“ = 4Pabaiga PasirinkitePabaigos funkcija

Kadangi tai funkcija, galite ją naudoti kaip funkciją „Excel“:

Pvz. 5 Patikrinkite, ar skaičius nelyginis ar nelyginis

Šis pavyzdys patikrina, ar skaičius yra nelyginis ar lyginis.

123456789101112 Sub CheckOddEven ()Dim n Kaip sveikasis skaičiusn = „InputBox“ („Įveskite skaičių“)Pasirinkite „Case n Mod 2“0 atvejisMsgBox „Skaičius lygus“.1 atvejisMsgBox „Skaičius nelyginis“.Pabaiga PasirinkitePabaiga Sub

Pvz. 6 Patikrinkite, ar data yra darbo diena ar savaitgalis

Šie pavyzdžiai patikrins, ar data patenka į darbo dieną ar savaitgalį.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt As Datedt = CDate ("2020-01-01")Pasirinkite atvejo darbo dieną (dt)Byla vbPirmadienis„MsgBox“ „Tai pirmadienis“Byla vbAntradienis„MsgBox“ „Tai antradienis“Byla vbTrečiadienis„MsgBox“ „Tai trečiadienis“Byla vbKetvirtadienis„MsgBox“ „Tai ketvirtadienis“Byla vbPenktadienis„MsgBox“ „Tai penktadienis“Byla vbŠeštadienis„MsgBox“ „Tai šeštadienis“Byla vbSekmadienis„MsgBox“ „Tai sekmadienis“Pabaiga PasirinkitePabaiga Sub
123456789101112 Savaitės pabaiga ()Dim dt As Datedt = CDate ("2020-01-01")Pasirinkite atvejo darbo dieną (dt)Byla vbSeštadienis, vbSekmadienis„MsgBox“ „Tai savaitgalis“Kita bylaMsgBox „Tai ne savaitgalis“Pabaiga PasirinkitePabaiga Sub

VBA Pasirinkite atvejį „Access“

Visi aukščiau pateikti pavyzdžiai „Access VBA“ veikia lygiai taip pat, kaip „Excel VBA“.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs kaip Duomenų bazėSumažinkite kaip įrašų rinkinįNustatykite dbs = CurrentDBNustatykite rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Su pirm.MoveFirst.RedaguotiPasirinkite Pirmąjį lauką („Miestas“)Byla „Austin“.rst.Fields ("TelCode") = "512"Byla „Čikaga“.rst.Fields ("TelCode") = "312"Byla „New YorK“.rst.Fields ("TelCode") = "1212"Byla „San Fransisco“.rst.Fields ("TelCode") = "415"Pabaiga Pasirinkite.AtnaujintiPabaiga suPabaiga Sus
wave wave wave wave wave