- Pasirinkite atvejo pavyzdį
- Atvejo teiginio sintaksė
- Pasirinkite atvejo kriterijus
- Pasirinkite atvejį - tekstas ir panašus operatorius
- Byla - Kolonas
- Atvejo pasirinkimas - ir / arba - kelios sąlygos
- Įdėtos bylos pareiškimai
- Atvejo ataskaita prieš If pareiškimą
- VBA pasirinktų atvejų pavyzdžiai
- VBA Pasirinkite atvejį „Access“
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 |