Vo VBA, Vyberte Prípad je alternatívou k Vyhlásenie If-Then, čo vám umožní otestovať, či sú splnené podmienky, a pre každú podmienku spustiť špecifický kód. Výber príkazu je vhodnejší ako príkaz If, ak existuje niekoľko podmienok na spracovanie.
Vyberte Príklad prípadu
Tento príklad vyzve užívateľa na YesBook MessageBox a otestuje, ktorú možnosť si užívateľ vybral:
1234567891011121314 | Sub Select_Case_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Vyberte položku Case nResultPrípad vb ÁnoMsgBox „Áno“Prípad vbNoMsgBox „Nie“Prípad vbCancelMsgBox „Zrušiť“Ukončiť výberKoniec pod |
Ďalej sme napísali ekvivalent pomocou vyhlásenia If. Všimnete si, že vyhlásenie o výbere prípadov zahŕňa o niečo menej písania - táto výhoda je umocnená pri testovaní viacerých kritérií.
12345678910111213 | Sub If_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Ak nResult = vbYes ThenMsgBox „Áno“ElseIf nResult = vbNo PotomMsgBox „Nie“ElseIf nResult = vbZrušiť PotomMsgBox „Zrušiť“Koniec AkKoniec pod |
Syntax prípadu
Syntax príkazu Select Case Statement je nasledovná:
12345678910 | Vyberte prípad [testovací výraz]Prípad [Podmienka 1][Opatrenie, ak je splnená podmienka 1]Prípad [Podmienka 2][Opatrenie, ak je splnená podmienka 2]Prípad [Podmienka n][Opatrenie, ak je splnená podmienka n]Prípad inak[Ak nič z toho nie je pravda]Ukončiť výber |
Kde:
[Testovací výraz] - Je hodnota, ktorú treba hodnotiť. Obvykle je to premenná.
[Opatrenie, ak je splnená podmienka n] - Je iba kód, ktorý sa má spustiť, ak je splnená podmienka (rovnako ako pri vyhlásení If)
[Podmienka n] - Je podmienkou testovať. Existuje mnoho rôznych spôsobov testovania podmienok. Budeme o nich diskutovať nižšie.
Príkazom na prípad sa spustí kód PRVEJ podmienky, o ktorej sa zistí, že je PRAVDA. Ak nie je splnená žiadna podmienka, nebude vykonaný žiadny kód, pokiaľ nie je pridaná klauzula Else.
Vyberte Kritériá prípadu
Select Cases je možné použiť na vyhodnotenie číselných hodnôt aj textu. Najprv si prediskutujeme, ako použiť Select Cases na vyhodnotenie numerických výrazov.
Presná zhoda - čísla
Presnú zhodu môžete ľahko otestovať pomocou vyhlásenia o prípade:
1 | Prípad 10 |
alebo pridajte čiarky na testovanie presných zhody s viacerými číslami:
1 | Prípad 20, 30, 40 |
1234567891011121314 | Sub ExactMatch_Numbers ()Dim n ako celé číslon = CInt (InputBox ("…"))Vyberte prípad čPrípad 10„Ak n je 10, potomPrípad 20, 30, 40„Ak n je 20/30/40 PotomPrípad inak„Ak n nie je 10/20/30/40 PotomUkončiť výberKoniec pod |
Rozsahy
Môžete otestovať, či číslo spadá do rozsahu takto:
1 | Prípad 55 až 74 |
Tento postup vygeneruje pre študenta skóre písmena na základe jeho číselného skóre:
12345678910111213141516171819202122 | Sub Calc_Grade ()Dim Score As IntegerDim LetterGrade ako reťazecSkóre = InputBox („Zadajte skóre študentov“)Vyberte položku Case ScorePrípad 90 až 100LetterGrade = "A"Prípad 80 až 90LetterGrade = "B"Prípad 70 až 80LetterGrade = "C"Prípad 60 až 70LetterGrade = "D"Prípad inakLetterGrade = "F"Ukončiť výberMsgBox „Študentský stupeň je:“ & LetterGradeKoniec pod |
Rozsahy môžete testovať aj pomocou kufríka Case Is
Vyberte možnosť Case Is
1234 | Prípad je <55'Nerob ničPrípad <= 74MsgBox „V dosahu“ |
Pamätajte si, že vo veci sa bude vykonávať kód iba IBA pre prvý zápas.
Tento postup vypočíta známku študenta pomocou prípadu namiesto prípadu.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade ()Dim Score As IntegerDim LetterGrade ako reťazecSkóre = InputBox („Zadajte skóre študentov“)Vyberte položku Case ScorePrípad je> = 90LetterGrade = "A"Prípad je> = 80LetterGrade = "B"Prípad je> = 70LetterGrade = "C"Prípad je> = 60LetterGrade = "D"Prípad inakLetterGrade = "F"Ukončiť výberMsgBox „Študentský stupeň je:“ & LetterGradeKoniec pod |
Prípad inak
Na koniec svojho prípadu môžete pridať „Prípad inak“, aby ste urobili niečo, ak nie sú splnené žiadne podmienky:
1 | Prípad inak |
Pozrite sa na koniec predchádzajúceho príkladu kódu a zistite, ako je možné použiť Case Else.
Vyberte operátor Case - Text & Like
Naše príklady prípadov prípadu zatiaľ fungovali iba s číslami. Môžete tiež použiť príkazy Select Case s textom.
Presná zhoda - text
Môžete otestovať, či sa výraz zhoduje s presnou frázou, ako je táto:
1 | Prípad "repa" |
Alebo pomocou čiarok otestujte, či sa výraz presne zhoduje s viac ako jednou frázou:
1 | Puzdro "Apple", "Banán", "Oranžový" |
Zostavenie vyzerá takto:
12345678910 | Sub ExactMatch_Food ()Vyberte rozsah prípadov („a1“). HodnotaPrípad "repa"MsgBox „Zelenina“Puzdro "Apple", "Banán", "Oranžový"MsgBox „Ovocie“Ukončiť výberKoniec pod |
Veľké a malé písmená
Štandardne VBA rozlišuje malé a veľké písmená. To znamená, že VBA považuje „text“ za odlišný od „textu“. Ak chcete rozlišovať malé a veľké písmena, pridajte do hornej časti modulu text na porovnanie možností:
1 | Možnosť Porovnať text |
Tento príklad spôsobí, že funkcia Case Select pri práci s textom nerozlišuje malé a veľké písmená:
123456789101112 | Možnosť Porovnať textSub ExactMatch_Food ()Vyberte rozsah prípadov („a1“). HodnotaPrípad "repa"MsgBox „Zelenina“Puzdro "Apple", "Banán", "Oranžový"MsgBox „Ovocie“Ukončiť výberKoniec pod |
Case Like
Operátor Like vám umožňuje robiť nepresné porovnania. Ak sa text zhoduje, Like vráti hodnotu TRUE, ak sa nezhoduje, vráti hodnotu FALSE. Operátor Like sa tak ľahko používa s príkazmi If, ale s prípadmi Case Case to nebude fungovať tak ľahko.
Prípad ako - Neúspešný test
Nasledujúci kód ukazuje, že operátor Like nepracuje s prípadom Select Case:
1234567891011 | Sub Select_Case_Like_DoesnotWork ()Tlmené slovo ako reťazecslovo = "COCOA"Vyberte prípadové slovoPrípadové slovo2 Ako „*C*C*“MsgBox „dobré“Prípad inakMsgBox „Nie je dobré“Ukončiť výberKoniec pod |
Prípad ako - správny spôsob
Môžeme však pridať výraz TRUE, aby vyhlásenie Select fungovalo s operátorom Like:
1234567891011 | Sub Select_Case_Like_CorrectWay ()Tlmené slovo ako reťazecslovo = "COCOA"Vyberte možnosť Case TruePrípadové slovo ako „*C*C*“MsgBox „dobré“Prípad inakMsgBox „Nie je dobré“Ukončiť výberKoniec pod |
Prípad - Colon
Pri použití Prípadu môžete pridať toľko riadkov kódu, koľko chcete spustiť s každou podmienkou. Ak však potrebujete spustiť iba jeden riadok kódu. Na označenie všetkého na rovnaký riadok môžete použiť dvojbodku (:).
Tu je ten istý príklad študentskej známky ako predtým, s výnimkou použitia dvojbodky na skrátenie kódu:
1234567891011121314151617 | Sub Calc_Grade_colon ()Dim Score As IntegerDim LetterGrade ako reťazecSkóre = InputBox („Zadajte skóre študentov“)Vyberte položku Case ScorePrípad 90 až 100: LetterGrade = „A“Prípad 80 až 90: LetterGrade = „B“Prípad 70 až 80: LetterGrade = „C“Prípad 60 až 70: LetterGrade = „D“Iný prípad: LetterGrade = "F"Ukončiť výberMsgBox „Študentský stupeň je:“ & LetterGradeKoniec pod |
Výber prípadu - A / alebo - Viaceré podmienky
Operátory And / Or môžete použiť na testovanie ďalších kritérií spolu s prípadom výberu.
V tomto prípade používame prípad Select na premennú „vek“, ale chceme tiež otestovať sex. Na vykonanie komplexnejšieho testu teda použijeme operátor And:
123456789101112131415161718 | Sub NestedSelectCase ()Tlmený sex ako reťazecDim vek ako celé číslosex = „muž“ alebo ženavek = 15Vyberte Prípadový vekPrípad je <20 a sex = "muž"Msgbox „Muži do 20 rokov“Prípad je <20 a sex = "žena"Msgbox „Žena do 20 rokov“Prípad je> = 20 a sex = „muž“Msgbox „Muž nad 20“Prípad je> = 20 a sex = „žena“Msgbox „Žena nad 20“Ukončiť výberKoniec pod |
Vnorené vyhlásenia o prípade
Rovnako ako príkazy If môžete do seba vnoriť výpisy prípadov:
123456789101112131415161718192021222324 | Sub NestedSelectCase ()Tlmený sex ako reťazecDim vek ako celé číslosex = „muž“ alebo ženavek = 15Vyberte Prípadový vekPrípad je <20Vyberte Prípadový sexPrípad "muž"MsgBox „Muži do 20 rokov“Prípad "žena"MsgBox „Žena do 20 rokov“Ukončiť výberPrípad je> = 20 a sex = „žena“Vyberte Prípadový sexPrípad "muž"MsgBox „Muž nad 20“Prípad "žena"MsgBox „Žena nad 20“Ukončiť výberUkončiť výberKoniec pod |
Prípadový prípad vs. Príkaz If
Čím viac podmienok je testovaných, tým užitočnejšie je vyhlásenie o prípade v porovnaní s vyhlásením If. Pozrime sa na príklad.
Tu je kód požadovaný na testovanie, či sa názov pracovného hárka rovná množine hodnôt pomocou príkazu If:
12345 | If Name = "Budget" Alebo Name = "Forecast" Or Name = "Trailing12" Or _Name = "Flex" Alebo Name = "OtherRatios" Alebo Name = "Porovnanie" Alebo _Potom zadajte meno = "BudReview" alebo názov = "P & L_Review" alebo názov = "iné"'Urob niečoKoniec Ak |
Tu je rovnaký kód, ktorý namiesto toho používa príkaz Select:
12345 | Vyberte názov prípaduPrípad „Budget“, „Forecast“, „Trailing12“, „Flex“, „OtherRatios", _„Porovnanie“, „BudReview“, „P & L_Review“, „Iné“'Urob niečoUkončiť výber |
Môžete vidieť, že v tomto scenári je oveľa jednoduchšie použiť príkaz Select. Je to výrazne menej písania a je to oveľa jednoduchšie čítať.
Príklady výberu prípadov VBA
Príklad 1. Prípadová informácia Užívateľom definovaná funkcia (UDF)
Zopakujme si vyššie uvedený príklad výpočtu známky a vytvorte UDF na výpočet skóre študenta:
12345678910111213141516 | Funkcia GetGrade (skóre ako celé číslo) ako reťazecVyberte položku Case ScorePrípad 90 až 100GetGrade = "A"Prípad 80 až 90GetGrade = "B"Prípad 70 až 80GetGrade = "C"Prípad 60 až 70GetGrade = "D"Prípad inakGetGrade = "F"Ukončiť výberKoncová funkcia |
Teraz môžeme použiť funkciu GetGrade v našom pracovnom hárku programu Excel na rýchly výpočet známok študentov:
Ex 2. Názov testovacieho hárku / Prípad prípadu slučky
Tento kód bude prechádzať cez všetky pracovné hárky v zošite, hárky bez ochrany, ktoré spĺňajú určité kritériá:
123456789101112 | Sub Case_UnProtectSheet ()Dim ws As worksheetZa každé ws v pracovných listochVyberte položku Case ws.Name 'Zoznam všetkých hárkov s pomermiPrípad „Budget“, „Forecast“, „Trailing12“, „Flex“, „OtherRatios", _„Porovnanie“, „BudReview“, „P & L_Review“, „Iné“ws.UnprotectUkončiť výberĎalšie wsKoniec pod |
Príklad 3. Vyberte veľkosť písmen - hodnota bunky
Tento príklad testuje skóre študenta v bunke tak, že známku z písmena pošle priamo do bunky vpravo.
12345678910111213141516 | Sub TestCellValue ()Dim bunka ako rozsahNastaviť bunku = rozsah („C1“)Vyberte bunku prípadu. HodnotaPrípad 90 až 100bunka.Offset (0, 1) = "A"Prípad 80 až 90bunka.Offset (0, 1) = "B"Prípad 70 až 80bunka.Offset (0, 1) = "C"Prípad 60 až 80bunka.Offset (0, 1) = "D"Ukončiť výberKoniec pod |
Príklad 4. Vyberte veľkosť písmen - dátumy
Tento príklad výberu prípadov je funkcia, ktorá testuje, do ktorého štvrťroka dátum spadá.
123456789101112131415161718 | Dátum čiastkového testu ()MsgBox GetQuarter (CDate ("20. 7. 2019"))Koniec podFunkcia GetQuarter (dt ako dátum) ako celé čísloDim sht As ako pracovný listVyberte prípad dtVec CDate („01/01/2019“) To CDate („03/31/2019“)GetQuarter = 1Vec CDate („04/01/2019“) To CDate („06/30/2019“)GetQuarter = 2Prípad CDate („07/01/2019“) To CDate („09/30/2019“)GetQuarter = 3Vec CDate („10/01/2019“) Na CDate („31.12.2019“)GetQuarter = 4Ukončiť výberKoncová funkcia |
Pretože je to funkcia, môžete ju použiť ako funkciu v programe Excel:
Napr. 5 Skontrolujte, či je číslo nepárne alebo párne
Tento príklad testuje, či je číslo párne alebo nepárne.
123456789101112 | Sub CheckOddEven ()Dim n ako celé číslon = InputBox („Zadajte číslo“)Vyberte prípad n Mod 2Prípad 0MsgBox „Číslo je párne“.Prípad 1MsgBox „Číslo je nepárne.“Ukončiť výberKoniec pod |
Napr. 6 Otestujte, či je dátum vo všedný deň alebo víkend
Tieto príklady vyskúšajú, či dátum pripadá na deň v týždni alebo víkend.
123456789101112131415161718192021 | Sub CheckWeekDay ()Dim dt As Datedt = CDate ("1/1/2020")Select Case Weekday (dt)Prípad vb. PondelokMsgBox „Je pondelok“Prípad vbÚterýMsgBox „Je utorok“Prípad vb StredaMsgBox „Je streda“Prípad vbŠtvrtokMsgBox „Je štvrtok“Prípad vbPiatokMsgBox „Je piatok“Prípad vbSobotaMsgBox „Je sobota“Prípad vb. NedeľaMsgBox „Je nedeľa“Ukončiť výberKoniec pod |
123456789101112 | Vedľajší kontrolný víkend ()Dim dt As Datedt = CDate ("1/1/2020")Select Case Weekday (dt)Prípad vbSobota, vb NedeľaMsgBox „Je víkend“Prípad inakMsgBox „Nie je víkend“Ukončiť výberKoniec pod |
Vyberte prípad VBA v Accesse
Všetky vyššie uvedené príklady fungujú v programe Access VBA úplne rovnako ako v programe Excel VBA.
123456789101112131415161718192021 | Sub TestCellValue ()Dim dbs ako databázaNajprv vyberte ako RecordSetNastaviť dbs = CurrentDBNastaviť rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)S prvým.Pohyb Po prvé.UpraviťVyberte prípad prvé pole. („Mesto“)Prípad "Austin".rst.Fields ("TelCode") = "512"Prípad "Chicago".rst.Fields ("TelCode") = "312"Prípad „New YorK“.rst.Fields ("TelCode") = "1212"Prípad "San Fransisco".rst.Fields ("TelCode") = "415"Ukončiť výber.AktualizáciaUkončiť sKoniec Sus |