Vyhlásenie o prípade VBA

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