Declarație de caz selectată VBA

În VBA, Selectați Declarație de caz este o alternativă la Declarație If-Then, permițându-vă să testați dacă sunt îndeplinite condițiile, rularea unui cod specific pentru fiecare condiție. Declarația Select este preferabilă Declarației If atunci când există mai multe condiții de procesat.

Selectați Exemplu de caz

Acest exemplu îi solicită utilizatorului un mesaj YesNoCancel MessageBox și testează ce opțiune a selectat utilizatorul:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult Ca VbMsgBoxResultnResult = MsgBox („…”, vbYesNoCancel)Selectați Case nResultCaz vbDaMsgBox „Da”Caz vbNuMsgBox „Nu”Caz vbAnulațiMsgBox „Anulare”Selectare sfârșitSfârșitul Sub

Mai jos am scris echivalentul utilizând în schimb o declarație If. Veți observa că declarația de selectare a cazului implică tastarea puțin mai mică - acest beneficiu este amplificat atunci când se testează mai multe criterii.

12345678910111213 Sub If_Yes_No_Cancel ()Dim nResult Ca VbMsgBoxResultnResult = MsgBox („…”, vbYesNoCancel)Dacă nResult = vbDa atunciMsgBox „Da”ElseIf nResult = vbNu AtunciMsgBox „Nu”ElseIf nResult = vbAnulați ApoiMsgBox „Anulare”End IfSfârșitul Sub

Sintaxa declarației de caz

Sintaxa instrucțiunii Select Case este următoarea:

12345678910 Selectați caz [Expresie test]Caz [condiția 1][Acțiune dacă condiția 1 este adevărată]Caz [condiția 2][Acțiune dacă condiția 2 este adevărată]Caz [Condiție n][Acțiune dacă condiția n este adevărată]Alt caz[Acțiune dacă niciuna nu este adevărată]Selectare sfârșit

Unde:

[Expresie test] - Este valoarea de evaluat. De obicei, aceasta este o variabilă.

[Acțiune dacă condiția n este adevărată] - Este doar codul care se execută dacă condiția este îndeplinită (la fel ca la o declarație If)

[Condiție n] - Este condiția de testat. Există o mulțime de moduri diferite de a testa condițiile. Le vom discuta mai jos.

Declarația de caz va executa codul pentru PRIMA condiție care se găsește ADEVĂRATĂ. Dacă nu este îndeplinită nicio condiție, atunci nu va fi executat niciun cod, cu excepția cazului în care se adaugă clauza Else.

Selectați Criterii de caz

Selectarea cazurilor poate fi utilizată pentru a evalua atât valorile numerice, cât și textul. Mai întâi vom discuta despre cum să folosim Select Case pentru a evalua expresiile numerice.

Potrivire exactă - Numere

Puteți testa cu ușurință o potrivire exactă cu o declarație de caz:

1 Cazul 10

sau adăugați virgule pentru a testa potrivirile exacte cu mai multe numere:

1 Cazul 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers ()Dim n Ca întregn = CInt (InputBox ("…"))Selectați Cazul nCazul 10'Dacă n este 10, atunciCazul 20, 30, 40'Dacă n este 20/30/40 AtunciAlt caz„Dacă n nu este 20/10/30/40 AtunciSelectare sfârșitSfârșitul Sub

Gama

Puteți testa dacă un număr se încadrează într-un interval similar:

1 Cazul 55 - 74

Această procedură va genera un scor de literă pentru un student pe baza scorului numeric al acestuia:

12345678910111213141516171819202122 Sub Calc_Grade ()Dim Scor ca întregDim LetterGrade Ca șirScor = InputBox („Introduceți scorul elevului”)Selectați Scorul cazuluiCazul 90 - 100LetterGrade = "A"Cazul 80 - 90LetterGrade = "B"Cazul 70 - 80LetterGrade = "C"Cazul 60 - 70LetterGrade = "D"Alt cazLetterGrade = "F"Selectare sfârșitMsgBox „Nota elevului este:” & LetterGradeSfârșitul Sub

De asemenea, puteți testa intervale cu Case Is

Selectați Cazul este

1234 Cazul este <55'Nu face nimicCaz <= 74MsgBox "In Range"

Amintiți-vă că declarația de caz va executa cod doar pentru prima potrivire.

Această procedură va calcula nota unui elev folosind Case Is în loc de Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Scor ca întregDim LetterGrade Ca șirScor = InputBox („Introduceți scorul elevului”)Selectați Scorul cazuluiCazul este> = 90LetterGrade = "A"Cazul este> = 80LetterGrade = "B"Cazul este> = 70LetterGrade = "C"Cazul este> = 60LetterGrade = "D"Alt cazLetterGrade = "F"Selectare sfârșitMsgBox „Nota elevului este:” & LetterGradeSfârșitul Sub

Alt caz

Puteți adăuga „Cazul Altfel” la sfârșitul declarației de caz pentru a face ceva dacă nu sunt îndeplinite condițiile:

1 Alt caz

Consultați sfârșitul exemplului de cod anterior pentru a vedea cum poate fi folosit Case Else.

Selectați Majuscule - Text și operatorul Like

Până în prezent, exemplele noastre Select Case au funcționat doar cu numere. De asemenea, puteți utiliza instrucțiunile Select Case cu text.

Potrivire exactă - Text

Puteți testa dacă expresia se potrivește cu o expresie exactă ca aceasta:

1 Carcasa "Sfecla"

Sau folosiți virgule pentru a testa dacă expresia se potrivește exact cu mai multe expresii:

1 Carcasa „Apple”, „Banana”, „Orange”

A-l pune împreună arată ca:

12345678910 Sub ExactMatch_Food ()Selectați Range Case („a1”). ValoareCarcasa "Sfecla"MsgBox „Legume”Carcasa „Apple”, „Banana”, „Orange”MsgBox „Fructe”Selectare sfârșitSfârșitul Sub

Majuscule și minuscule

În mod implicit, VBA este sensibil la majuscule. Aceasta înseamnă că VBA consideră „Text” diferit de „text”. Pentru a dezactiva sensibilitatea la majuscule și minuscule, adăugați opțiunea Comparare text în partea de sus a modulului:

1 Opțiune Comparați textul

Acest exemplu va face ca Case Select să nu distingă majusculele și minusculele atunci când lucrați cu text:

123456789101112 Opțiune Comparați textulSub ExactMatch_Food ()Selectați Range Case („a1”). ValoareCarcasa "Sfecla"MsgBox „Legume”Carcasa „Apple”, „Banana”, „Orange”MsgBox „Fructe”Selectare sfârșitSfârșitul Sub

Ca de exemplu

Operatorul Like vă permite să faceți comparații inexacte. Dacă textul se potrivește, Like returnează TRUE, dacă nu se potrivește, returnează FALSE. Acest lucru face ca operatorul Like să fie ușor de utilizat cu Instrucțiunile If, ​​însă nu va funcționa la fel de ușor cu declarațiile de caz.

Case Like - Un test nereușit

Următorul cod demonstrează că Like Operator nu funcționează cu Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Dim cuvânt ca șircuvânt = "CACAO"Selectați cuvântul cu majusculeCuvântul de caz 2 Ca „* C * C *”MsgBox „Bine”Alt cazMsgBox „Nu este bun”Selectare sfârșitSfârșitul Sub

Ca de exemplu - calea corectă

Cu toate acestea, putem adăuga în expresia TRUE pentru a face ca Declarația Select să funcționeze cu Operatorul Like:

1234567891011 Sub Select_Case_Like_CorrectWay ()Dim cuvânt ca șircuvânt = "CACAO"Selectați Case TrueCuvânt de caz ca „* C * C *”MsgBox „Bine”Alt cazMsgBox „Nu este bun”Selectare sfârșitSfârșitul Sub

Caz - Colon

Când utilizați o declarație de caz, puteți adăuga câte linii de cod doriți să executați cu fiecare condiție. Cu toate acestea, dacă trebuie să rulați doar o linie de cod. Puteți utiliza un Colon (:) pentru a scrie totul pe aceeași linie.

Iată același exemplu de clasă de elev ca înainte, cu excepția utilizării unui punct pentru a scurta codul:

1234567891011121314151617 Sub Calc_Grade_colon ()Dim Scor ca întregDim LetterGrade Ca șirScor = InputBox („Introduceți scorul elevului”)Selectați Scorul cazuluiCazul 90 la 100: LetterGrade = "A"Cazul 80 - 90: LetterGrade = "B"Cazul 70 - 80: LetterGrade = "C"Cazul 60 - 70: LetterGrade = "D"Alt caz: LetterGrade = "F"Selectare sfârșitMsgBox „Nota elevului este:” & LetterGradeSfârșitul Sub

Selectare caz - Și / sau - Condiții multiple

Puteți utiliza operatorii și / sau operatorii pentru a testa criterii suplimentare împreună cu cazul selectat.

În acest exemplu, folosim un caz selectat pe variabila „vârstă”, dar dorim să testăm și sexul. Deci, folosim operatorul And pentru a efectua testul mai complex:

123456789101112131415161718 Sub NestedSelectCase ()Dim sex As StringVârsta slabă ca întregsex = „bărbat” sau femeievârsta = 15Selectați Vârsta cazuluiCazul este <20 Și sexul = "bărbat"Msgbox „Bărbat sub 20 de ani”Cazul este <20 Și sexul = "femeie"Mesaj "Femeie sub 20 de ani"Cazul este> = 20 Și sexul = "bărbat"Msgbox „Bărbat peste 20 de ani”Cazul este> = 20 Și sexul = "femeie"Mesaj "Femeie peste 20 de ani"Selectare sfârșitSfârșitul Sub

Declarații de caz imbricate

La fel ca declarațiile If, ​​puteți cuibări declarațiile de caz unul în celălalt:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Dim sex As StringVârsta slabă ca întregsex = „bărbat” sau femeievârsta = 15Selectați Vârsta cazuluiCazul este <20Selectați Sex cazCaz „masculin”MsgBox „Bărbat sub 20 de ani”Caz „feminin”MsgBox „Femeie sub 20 de ani”Selectare sfârșitCazul este> = 20 Și sexul = "femeie"Selectați Sex cazCaz „masculin”MsgBox „Bărbat peste 20 de ani”Caz „feminin”MsgBox „Femeie peste 20 de ani”Selectare sfârșitSelectare sfârșitSfârșitul Sub

Declarația de caz vs. Declarația If

Cu cât sunt mai multe condiții de testat, cu atât este mai utilă Declarația de caz comparată cu o Declarație If. Să vedem un exemplu.

Iată codul necesar pentru a testa dacă un nume de foaie de lucru este egal cu un set de valori folosind o Instrucțiune If:

12345 Dacă Nume = "Buget" Sau Nume = "Prognoză" Sau Nume = "Final 12" Sau _Name = "Flex" Sau Name = "OtherRatios" Sau Name = "Comparație" Sau _Nume = "BudReview" Sau Nume = "P & L_Review" Sau Nume = "Altele" Apoi'Fă cevaEnd If

Iată același cod care utilizează o declarație Select în schimb:

12345 Selectați Nume cazCaz „Buget”, „Prognoza”, „Trecere12”, „Flex”, „Alte raporturi”, _„Comparație”, „BudReview”, „P & L_Review”, „Altele”'Fă cevaSelectare sfârșit

Puteți vedea că este mult mai ușor să folosiți o declarație selectată în acest scenariu. Este semnificativ mai puțin tastat și este mult mai ușor de citit.

Exemple de cazuri selectate VBA

Ex 1. Declarație de caz Funcție definită de utilizator (UDF)

Să reproducem exemplul nostru de calcul al notelor de mai sus și să creăm un UDF pentru a calcula scorul unui elev:

12345678910111213141516 Funcția GetGrade (Scor ca întreg) Ca șirSelectați Scorul cazuluiCazul 90 - 100GetGrade = "A"Cazul 80 - 90GetGrade = "B"Cazul 70 - 80GetGrade = "C"Cazul 60 - 70GetGrade = "D"Alt cazGetGrade = "F"Selectare sfârșitFuncția de sfârșit

Acum putem folosi funcția GetGrade în foaia noastră de lucru Excel pentru a calcula rapid notele elevilor:

Ex 2. Declarația de caz a denumirii fișei de test / buclă

Acest cod va parcurge toate foile de lucru dintr-un registru de lucru, Fără protecție foi care îndeplinesc anumite criterii:

123456789101112 Sub Case_UnProtectSheet ()Dim ws Ca foaie de lucruPentru fiecare ws din foi de lucruSelectați Case ws.Name 'Lista tuturor foilor cu RaporturiCaz „Buget”, „Prognoză”, „Trecere12”, „Flex”, „Alte raporturi”, _„Comparație”, „BudReview”, „P & L_Review”, „Altele”ws. NeprotejeazăSelectare sfârșitUrmătorul wsSfârșitul Sub

Ex 3. Selectați Caz ​​- Valoare celulă

Acest exemplu va testa scorul unui elev într-o celulă, afișând nota literei direct în celula din dreapta.

12345678910111213141516 Sub TestCellValue ()Dim celula ca intervalSetați celula = Interval ("C1")Selectați Celula caz. ValoareCazul 90 - 100cell.Offset (0, 1) = "A"Cazul 80 - 90cell.Offset (0, 1) = "B"Cazul 70 - 80cell.Offset (0, 1) = "C"Cazul 60 - 80cell.Offset (0, 1) = "D"Selectare sfârșitSfârșitul Sub

Ex 4. Selectați Caz ​​- Date

Acest exemplu de selectare a cazului este o funcție care testează în ce trimestru intră o dată.

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("20.07.2019"))Sfârșitul SubFuncția GetQuarter (dt ca dată) ca întregDim sht Ca foaie de lucruSelectați Case dtCaz CDate („01/01/2019”) Pentru CDate („31/03/2019”)GetQuarter = 1Caz CDate („04/01/2019”) Pentru CDate („30.06.2019”)GetQuarter = 2Caz CDate („01.07.2019”) Pentru CDate („30.09.2019”)GetQuarter = 3Caz CDate („01.01.2019”) Pentru CDate („31.12.2019”)GetQuarter = 4Selectare sfârșitFuncția de sfârșit

Deoarece este o funcție, o puteți folosi ca funcție în Excel:

Ex. 5 Verificați dacă numărul este impar sau par

Acest exemplu testează dacă un număr este impar sau par.

123456789101112 Sub CheckOddEven ()Dim n Ca întregn = InputBox („Introduceți un număr”)Selectați Case n Mod 2Cazul 0MsgBox „Numărul este par”.Cazul 1MsgBox "Numărul este impar."Selectare sfârșitSfârșitul Sub

Ex. 6 Testați dacă Data este în ziua săptămânii sau în weekend

Aceste exemple vor testa dacă o dată cade într-o zi săptămânală sau într-un weekend.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt Ca datădt = CDate („01.01.2020”)Selectați Case Weekday (dt)Cazul vbLuniMsgBox „Este luni”Cazul vb marțiMsgBox „Este marți”Caz vbMiercuriMsgBox „Este miercuri”Cazul vbJoiMsgBox „Este joi”Caz vbVineriMsgBox „Este vineri”Caz vb sâmbătăMsgBox „Este sâmbătă”Caz vbDuminicăMsgBox „Este duminică”Selectare sfârșitSfârșitul Sub
123456789101112 Sub CheckWeekend ()Dim dt Ca datădt = CDate („01.01.2020”)Selectați Case Weekday (dt)Caz vb Sâmbătă, vbDuminicăMsgBox „Este un weekend”Alt cazMsgBox „Nu este un weekend”Selectare sfârșitSfârșitul Sub

VBA Select Case in Access

Toate exemplele de mai sus funcționează exact la fel în Access VBA ca în Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs ca bază de dateMai întâi ca RecordSetSetați dbs = CurrentDBSetați rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Cu prima.MoveFirst.Editați | ×Selectați Caz ​​primele câmpuri („Oraș”)Cazul „Austin”.rst.Fields ("TelCode") = "512"Cazul „Chicago”.rst.Fields ("TelCode") = "312"Caz „New YorK”.rst.Fields ("TelCode") = "1212"Cazul „San Fransisco”.rst.Fields ("TelCode") = "415"Selectare sfârșit.ActualizațiSe termina cuÎncheie Sus
wave wave wave wave wave