VBA Select Case Statement

A VBA -ban a Válassza az Esettanulmány lehetőséget alternatívája a Ha-akkor állítás, lehetővé téve annak tesztelését, hogy a feltételek teljesülnek -e, és minden feltételhez külön kódot futtat. A Select Statement előnyösebb az If utasítással szemben, ha több feltétel szükséges a feldolgozásra.

Válassza az esetpéldát

Ez a példa a YesNoCancel MessageBox -ot kéri a felhasználótól, és teszteli, hogy a felhasználó melyik lehetőséget választotta:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult VbMsgBoxResult névennResult = MsgBox ("…", vbYesNoCancel)Válassza a Case nResult lehetőségetEset vbIgenMsgBox "Igen"Eset vbNoMsgBox "Nem"VbCancel ügyMsgBox "Mégse"Vége KiválasztásEnd Sub

Az alábbiakban az If kifejezést használva írtuk ki a megfelelőt. Észre fogja venni, hogy az esetkiválasztási nyilatkozat valamivel kevesebb gépelést foglal magában - ez az előny fokozódik, ha több feltételt tesztel.

12345678910111213 Ha If_Yes_No_Cancel ()Dim nResult VbMsgBoxResult névennResult = MsgBox ("…", vbYesNoCancel)Ha nResult = vbIgen AkkorMsgBox "Igen"KülönbenHa nResult = vbNo AkkorMsgBox "Nem"KülönbenHa nResult = vbTörölje AkkorMsgBox "Mégse"Vége HaEnd Sub

Esettanulmány szintaxisa

A Kiválasztott eset nyilatkozat szintaxisa a következő:

12345678910 Eset kiválasztása [Tesztkifejezés]Eset [1. feltétel][Teendő, ha az 1. feltétel teljesül]Eset [2. feltétel][Teendő, ha a 2. feltétel teljesül]Eset [n. Feltétel][Teendő, ha az n feltétel teljesül]Más eset[Teendő, ha egyik sem igaz]Vége Kiválasztás

Ahol:

[Tesztkifejezés] - Értékelni kell. Általában ez egy változó.

[Teendő, ha az n feltétel teljesül] - Csak akkor kell futtatni a kódot, ha a feltétel teljesül (mint az If utasítás esetén)

[N feltétel] - A tesztelés feltétele. A körülmények tesztelésének sokféle módja van. Az alábbiakban ezeket tárgyaljuk.

Az Esettanulmány végrehajtja az ELSŐ feltétel kódját, amely IGAZ. Ha egyetlen feltétel sem teljesül, akkor nem hajtódik végre kód, kivéve, ha az Else záradékot hozzáadjuk.

Válassza az Esetfeltételek lehetőséget

A Kiválasztott esetek mind a számértékek, mind a szöveg kiértékelésére használható. Először azt fogjuk megvitatni, hogyan használhatjuk a Kiválasztott eseteket a numerikus kifejezések értékeléséhez.

Pontos egyezés - számok

Könnyen tesztelheti a pontos egyezést egy esetjelentéssel:

1 10. eset

vagy adjon hozzá vesszőket a pontos egyezések teszteléséhez több számmal:

1 20., 30., 40. eset
1234567891011121314 Pontos Match_Numbers ()Dim n Mint egészn = CInt (InputBox ("…"))Válassza a n esetet10. eset'Ha n 10, akkor20., 30., 40. eset'Ha n 20/30/40, akkorMás eset'Ha n nem 10/20/30/40, akkorVége KiválasztásEnd Sub

Tartományok

Tesztelheti, hogy egy szám a következő tartományba esik -e:

1 55–74. Eset

Ez az eljárás betű pontszámot generál a diák számára számszerű pontszámuk alapján:

12345678910111213141516171819202122 Sub Calc_Grade ()Dim Score as IntegerHalvány LetterGrade karakterlánckéntPontszám = InputBox ("Enter Student Score")Válassza az Esetpontszám lehetőséget90–100. EsetLetterGrade = "A"80-90. EsetLetterGrade = "B"70–80. EsetLetterGrade = "C"60–70. EsetLetterGrade = "D"Más esetLetterGrade = "F"Vége KiválasztásMsgBox "A diákok osztályzata:" & LetterGradeEnd Sub

A tartományokat a Case Is segítségével is tesztelheti

Válassza a Case Is lehetőséget

1234 Az eset <55'Ne csinálj semmitEset <= 74MsgBox "Hatótávolság"

Ne feledje, hogy az esetjelentés CSAK az első mérkőzésre hajt végre kódot.

Ez az eljárás kiszámítja a tanuló érdemjegyét az Eset helyett a Címzett helyett.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Score as IntegerHalvány LetterGrade karakterlánckéntPontszám = InputBox ("Enter Student Score")Válassza az Esetpontszám lehetőségetEset> = 90LetterGrade = "A"Eset> = 80LetterGrade = "B"Eset> = 70LetterGrade = "C"Eset> = 60LetterGrade = "D"Más esetLetterGrade = "F"Vége KiválasztásMsgBox "A diákok osztályzata:" & LetterGradeEnd Sub

Más eset

Hozzáadhatja az „Eset más” szót az Ügynyilatkozatának végéhez, hogy tegyen valamit, ha nem teljesülnek feltételek:

1 Más eset

Lásd az előző kódpélda végén, hogy hogyan használható a Case Else.

Válassza a Case - Text & Like Operator lehetőséget

A Select Case példák eddig csak számokkal működtek. A Select Case utasításokat szöveggel is használhatja.

Pontos egyezés - szöveg

Tesztelheti, hogy a kifejezés pontosan egyezik -e a következő kifejezéssel:

1 "Cékla" tok

Vagy vesszővel ellenőrizze, hogy a kifejezés pontosan megfelel -e egynél több kifejezésnek:

1 "Apple", "Banana", "Orange" tok

Összerakása így néz ki:

12345678910 Pontos Match_Food ()Válassza a Case Range ("a1") értéket"Cékla" tokMsgBox "Zöldség""Apple", "Banana", "Orange" tokMsgBox "Gyümölcs"Vége KiválasztásEnd Sub

Nagy-és kisbetű

Alapértelmezés szerint a VBA megkülönbözteti a kis- és nagybetűket. Ez azt jelenti, hogy a VBA a „szöveget” másnak tekinti, mint a „szöveget”. A kis- és nagybetűk megkülönböztetésének kikapcsolásához adja hozzá a Szöveg összehasonlítása opciót a modul tetejéhez:

1 Opció Szöveg összehasonlítása

Ebben a példában a kis- és nagybetűk megkülönböztethetetlenné válnak, ha szöveggel dolgozik:

123456789101112 Opció Szöveg összehasonlításaPontos Match_Food ()Válassza a Case Range ("a1") értéket"Cékla" tokMsgBox "Zöldség""Apple", "Banana", "Orange" tokMsgBox "Gyümölcs"Vége KiválasztásEnd Sub

Tetszik

A Like operátor lehetővé teszi, hogy pontatlan összehasonlításokat végezzen. Ha a szöveg egyezik, a Like IGAZ értéket ad vissza, ha nem, akkor HAMIS értéket ad vissza. Ez megkönnyíti a Like operátor használatát az If Statement -okkal, de nem fog olyan könnyen működni az Case Statement -ekkel.

Eset tetszik - sikertelen teszt

A következő kód azt mutatja, hogy a Like operátor nem működik a Select Case alkalmazással:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Halvány szó karakterlánckéntszó = "COCOA"Válassza a Kisbetűs szótKisbetűs szó2 Mint: "*C*C*"MsgBox "Jó"Más esetMsgBox "Nem jó"Vége KiválasztásEnd Sub

Hasonló eset - A helyes út

Azonban hozzáadhatjuk a TRUE kifejezést, hogy a Select Statement működjön együtt a Like operátorral:

1234567891011 Sub Select_Case_Like_CorrectWay ()Halvány szó karakterlánckéntszó = "COCOA"Válassza a Case True lehetőségetKisbetűs szó, mint "*C*C*"MsgBox "Jó"Más esetMsgBox "Nem jó"Vége KiválasztásEnd Sub

Ügy - Colon

Esettanulmány használatakor annyi feltételt adhat hozzá, amennyi kódot szeretne futtatni minden feltétellel. Ha azonban csak egy sor kódot kell futtatnia. A kettőspont (:) használatával mindent ugyanarra a sorra írhat.

Itt ugyanaz a tanulói besorolási példa, mint korábban, kivéve, ha kettőspontot használ a kód lerövidítésére:

1234567891011121314151617 Sub Calc_Grade_colon ()Dim Score as IntegerHalvány LetterGrade karakterlánckéntPontszám = InputBox ("Enter Student Score")Válassza az Esetpontszám lehetőséget90–100. Eset: LetterGrade = "A"80. és 90. eset: LetterGrade = "B"70. és 80. eset: LetterGrade = "C"60. és 70. eset: LetterGrade = "D"Más eset: LetterGrade = "F"Vége KiválasztásMsgBox "A diákok osztályzata:" & LetterGradeEnd Sub

Esetválasztás - és / vagy - Több feltétel

Az És / vagy operátorok segítségével további kritériumokat tesztelhet a kiválasztott eset mellett.

Ebben a példában Select Case -t használunk az „age” változón, de szeretnénk tesztelni a szexet is. Tehát az And operátort használjuk a bonyolultabb teszt elvégzésére:

123456789101112131415161718 Sub NestedSelectCase ()Halvány szex, mint karakterláncDim kor Egész számnem = "férfi" vagy nőéletkor = 15Válassza az Eset kora lehetőségetAz eset <20 És a szex = "férfi"Msgbox "Férfi 20 év alatt"Eset <20 És szex = "nő"Msgbox "Nő 20 év alatt"Eset> = 20 És szex = "férfi"Msgbox "Férfi 20 felett"Eset> = 20 És szex = "nő"Msgbox "Nő 20 felett"Vége KiválasztásEnd Sub

Beágyazott esetek nyilatkozatai

Akárcsak az If állítások, a Case -állítások egymásba ágyazhatók:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Halvány szex, mint karakterláncDim kor Egész számnem = "férfi" vagy nőéletkor = 15Válassza az Eset kora lehetőségetAz eset <20Válassza az Eset szex lehetőségetTok "férfi"MsgBox "Férfi 20 év alatt""Nő" esetMsgBox "Nő 20 év alatt"Vége KiválasztásEset> = 20 És szex = "nő"Válassza az Eset szex lehetőségetTok "férfi"MsgBox "Férfi 20 felett""Nő" esetMsgBox "Nő 20 felett"Vége KiválasztásVége KiválasztásEnd Sub

Esettanulmány vs. If nyilatkozat

Minél több feltételt kell tesztelni, annál hasznosabb az Esettanulmány összehasonlítása az If nyilatkozattal. Nézzünk egy példát.

Íme a kód, amely szükséges annak teszteléséhez, hogy a munkalap neve megegyezik -e egy értékkészlettel az If utasítás használatával:

12345 Ha Név = "Költségkeret" Vagy Név = "Előrejelzés" Vagy Név = "Trailing12" Vagy _Name = "Flex" Vagy Name = "OtherRatios" Vagy Name = "Comparison" Vagy _Name = "BudReview" Vagy Name = "P & L_Review" Vagy Name = "Other" Akkor'Csinálj valamitVége Ha

Itt ugyanaz a kód, a Select Statement használatával:

12345 Válassza ki az eset nevétEset "Költségvetés", "Előrejelzés", "Trailing12", "Flex", "OtherRatios", _"Összehasonlítás", "BudReview", "P & L_Review", "Egyéb"'Csinálj valamitVége Kiválasztás

Láthatja, hogy ebben a forgatókönyvben sokkal könnyebb használni a Kiválasztási nyilatkozatot. Jelentősen kevesebb a gépelés, és sokkal könnyebb olvasni.

Példák a VBA kiválasztott esetekre

Ex 1. Esetnyilatkozat, felhasználó által definiált funkció (UDF)

Ismételjük meg a fenti osztályzatszámítási példánkat, és hozzunk létre egy UDF -et a tanuló pontszámának kiszámításához:

12345678910111213141516 Funkció GetGrade (Pontszám egészként) karakterlánckéntVálassza az Esetpontszám lehetőséget90–100. EsetGetGrade = "A"80-90. EsetGetGrade = "B"70–80. EsetGetGrade = "C"60–70. EsetGetGrade = "D"Más esetGetGrade = "F"Vége KiválasztásVége funkció

Most már használhatjuk a GetGrade funkciót az Excel munkalapunkon a diákok érdemjegyeinek gyors kiszámításához:

Példa 2. A tesztlap neve / a hurok esetének megállapítása

Ez a kód végigmegy a munkafüzet összes munkalapján, a Védelmetlen lapokon, amelyek megfelelnek bizonyos feltételeknek:

123456789101112 Sub Case_UnProtectSheet ()Dim ws munkalapkéntMinden egyes munkalaphozVálassza a Case ws.Name lehetőséget. Minden arányt tartalmazó lap listájaEset "Költségvetés", "Előrejelzés", "Trailing12", "Flex", "OtherRatios", _"Összehasonlítás", "BudReview", "P & L_Review", "Egyéb"ws. VédelemVége KiválasztásKövetkező wsEnd Sub

Pl. Válassza ki a Kis- és nagybetűs értéket

Ez a példa egy tanuló pontszámát teszteli egy cellában, és a betű osztályzatát közvetlenül a jobb oldali cellába adja ki.

12345678910111213141516 Sub TestCellValue ()Homályos cella mint tartományCella beállítása = tartomány ("C1")Válassza ki a Case cell.Value lehetőséget90–100. Esetcell.Offset (0, 1) = "A"80-90. Esetcell.Offset (0, 1) = "B"70–80. Esetcell.Offset (0, 1) = "C"60–80. Esetcell.Offset (0, 1) = "D"Vége KiválasztásEnd Sub

Példa 4. Válassza a Case - Dates lehetőséget

Ez az esetkiválasztási példa egy olyan függvény, amely teszteli, hogy egy dátum melyik negyedévébe esik.

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("2019.07.20."))End SubFunkció GetQuarter (dt dátumként) egész számkéntDim sht munkalapkéntVálassza a Case dtCDate ügy ("01/01/2019") CDate ("03/31/2019")GetQuarter = 1CDate ügy ("04/01/2019") CDate -hez ("2019.06.30.")GetQuarter = 2CDate ügy ("07/01/2019") CDate ("09/30/2019")GetQuarter = 3CDate ügy ("10/01/2019") CDate -hez ("2019/12/31")GetQuarter = 4Vége KiválasztásVége funkció

Mivel ez egy függvény, funkcióként is használhatja az Excelben:

Volt. 5 Ellenőrizze, hogy a szám páratlan vagy páratlan

Ez a példa azt vizsgálja, hogy egy szám páratlan vagy páratlan.

123456789101112 Sub CheckOddEven ()Dim n Mint egészn = InputBox ("Adjon meg egy számot")Válassza a Case n Mod 2 lehetőséget0. esetMsgBox "A szám páros."1. esetMsgBox "A szám páratlan."Vége KiválasztásEnd Sub

Volt. 6 Ellenőrizze, hogy a dátum hétköznap vagy hétvége

Ezek a példák tesztelik, hogy egy dátum hétköznapra vagy hétvégére esik -e.

123456789101112131415161718192021 RészellenőrzésWeekDay ()Dim dt dátumkéntdt = CDate ("2020.01.01.")Eset hétköznapjának kiválasztása (dt)VbHétfőMsgBox "Hétfő van"Ügy vbKeddMsgBox "kedd van"Ügy vbSzerdaMsgBox "Szerda van"Vb csütörtökMsgBox "Csütörtök van"VbPéntekMsgBox "Péntek van"Ügy vbSombatMsgBox "Szombat van"VbVasárnapMsgBox "Vasárnap van"Vége KiválasztásEnd Sub
123456789101112 Sub CheckWeekend ()Dim dt dátumkéntdt = CDate ("2020.01.01.")Eset hétköznapjának kiválasztása (dt)VbSaturday, vbSundayMsgBox "Ez egy hétvége"Más esetMsgBox "Nem hétvége"Vége KiválasztásEnd Sub

VBA Válassza ki az esetet az Access szolgáltatásban

A fenti példák mindegyike pontosan ugyanúgy működik az Access VBA -ban, mint az Excel VBA -ban.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs mint adatbázisElsőként RecordSet névenÁllítsa be a dbs = CurrentDB értéketÁllítsa be az rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Az elsővel.MoveFirst.SzerkesztésVálassza a Case rst.Fields ("City") lehetőséget"Austin" eset.rst.Fields ("TelCode") = "512""Chicago" eset.rst.Fields ("TelCode") = "312""New YorK" ügy.rst.Fields ("TelCode") = "1212""San Fransisco" ügy.rst.Fields ("TelCode") = "415"Vége Kiválasztás.FrissítésVége ezzelVége Sus

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave