VBA Select Case Statement

In VBA, de Selecteer Case Statement is een alternatief voor de Als-dan-verklaring, zodat u kunt testen of aan de voorwaarden is voldaan, door voor elke voorwaarde specifieke code uit te voeren. De Select-instructie heeft de voorkeur boven de If-instructie wanneer er meerdere voorwaarden zijn om te verwerken.

Selecteer casusvoorbeeld

Dit voorbeeld vraagt ​​de gebruiker met een YesNoCancel MessageBox en test welke optie de gebruiker heeft geselecteerd:

1234567891011121314 Sub Select_Case_Yes_No_Cancel()Dim nResult As VbMsgBoxResultnResult = MsgBox("… ", vbYesNoCancel)Selecteer Case nResultaatGeval vbJaMsgBox "Ja"Zaak vbNeeMsgBox "Nee"Case vbAnnulerenMsgBox "Annuleren"Einde SelecterenEinde sub

Hieronder hebben we het equivalent uitgeschreven met behulp van een If-statement. U zult merken dat bij de Case Select Statement iets minder getypt hoeft te worden - dit voordeel wordt versterkt wanneer meerdere criteria worden getest.

12345678910111213 Sub Als_Ja_Nee_Annuleren()Dim nResult As VbMsgBoxResultnResult = MsgBox("… ", vbYesNoCancel)Als nResult = vbJa DanMsgBox "Ja"ElseIf nResult = vbNee DanMsgBox "Nee"ElseIf nResult = vbCancel ThenMsgBox "Annuleren"Stop alsEinde sub

Syntaxis van casusverklaring

De syntaxis van Case Statement is als volgt:

12345678910 Selecteer Case [Testuitdrukking]Kast [Conditie 1][Actie als voorwaarde 1 waar is]Kast [Conditie 2][Actie als voorwaarde 2 waar is]Geval [Voorwaarde n][Actie als voorwaarde n waar is]Geval Anders[Actie als er geen waar is]Einde Selecteren

Waar:

[Testuitdrukking] - Is de waarde te evalueren. Meestal is dit een variabele.

[Actie als voorwaarde n waar is] - Is alleen de code die moet worden uitgevoerd als aan de voorwaarde is voldaan (net als bij een If-instructie)

[Voorwaarde n] - Is de voorwaarde om te testen. Er zijn veel verschillende manieren om omstandigheden te testen. We zullen ze hieronder bespreken.

De Case Statement zal de code uitvoeren voor de EERSTE voorwaarde die WAAR blijkt te zijn. Als aan geen enkele voorwaarde wordt voldaan, wordt er geen code uitgevoerd, tenzij de Else-clausule wordt toegevoegd.

Selecteer Case Criteria

Select Cases kan worden gebruikt om zowel numerieke waarden als tekst te evalueren. Eerst zullen we bespreken hoe u Select Cases kunt gebruiken om numerieke uitdrukkingen te evalueren.

Exacte overeenkomst - cijfers

U kunt eenvoudig testen op een exacte match met een Case Statement:

1 Geval 10

of voeg komma's toe om te testen op exacte overeenkomsten met meerdere getallen:

1 Kast 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers()Dim n als geheel getaln = CInt(InvoerBox("… "))Selecteer Case nrGeval 10' Als n 10 is, danKast 20, 30, 40' Als n 20/30/40 is, danGeval Anders' Als n niet 10/20/30/40 is, danEinde SelecterenEinde sub

Bereiken

U kunt testen of een getal binnen een bereik valt, zoals:

1 Geval 55 tot 74

Deze procedure genereert een letterscore voor een student op basis van hun numerieke score:

12345678910111213141516171819202122 Sub Calc_Grade()Dimscore als geheel getalDim LetterGrade As StringScore = InputBox ("Voer studentenscore in")Selecteer CasescoreGeval 90 tot 100LetterGrade = "A"Geval 80 tot 90LetterGrade = "B"Geval 70 tot 80LetterGrade = "C"Kast 60 tot 70LetterGrade = "D"Geval AndersLetterGrade = "F"Einde SelecterenMsgBox "Het cijfer van de student is: " & LetterGradeEinde sub

U kunt ook bereiken testen met de Case Is

Selecteer Case Is

1234 Kast is < 55'Niets doenGeval <= 74MsgBox "Binnen bereik"

Onthoud dat de Case Statement alleen code zal uitvoeren voor ALLEEN de eerste match.

Deze procedure berekent het cijfer van een student met behulp van Case Is in plaats van Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade()Dimscore als geheel getalDim LetterGrade As StringScore = InputBox ("Voer studentenscore in")Selecteer CasescoreKast is >= 90LetterGrade = "A"Kast is >= 80LetterGrade = "B"Kast is >= 70LetterGrade = "C"Kast is >= 60LetterGrade = "D"Geval AndersLetterGrade = "F"Einde SelecterenMsgBox "Het cijfer van de student is: " & LetterGradeEinde sub

Geval Anders

U kunt aan het einde van uw Case Statement "Case Else" toevoegen om iets te doen als er niet aan de voorwaarden wordt voldaan:

1 Geval Anders

Zie het einde van het vorige codevoorbeeld om te zien hoe Case Else kan worden gebruikt.

Selecteer Hoofdletter - Tekst en de Like-operator

Tot nu toe hebben onze Select Case-voorbeelden alleen met cijfers gewerkt. U kunt ook Select Case-instructies met tekst gebruiken.

Exacte overeenkomst - tekst

U kunt testen of de uitdrukking overeenkomt met een exacte zin zoals deze:

1 Koffer "Bieten"

Of gebruik komma's om te testen of de uitdrukking exact overeenkomt met meer dan één zin:

1 Doos "Appel", "Banaan", "Oranje"

Het in elkaar zetten ziet er als volgt uit:

12345678910 Sub ExactMatch_Food()Selecteer Case Range ("a1"). WaardeKoffer "Bieten"MsgBox "Groente"Doos "Appel", "Banaan", "Oranje"MsgBox "Fruit"Einde SelecterenEinde sub

Kleine en hoofdletters

Standaard is VBA is hoofdlettergevoelig. Dit betekent dat VBA "Tekst" anders beschouwt dan "tekst". Om hoofdlettergevoeligheid uit te schakelen, voegt u de optie Tekst vergelijken toe aan de bovenkant van uw module:

1 Optie Tekst vergelijken

Dit voorbeeld maakt Case Select niet hoofdlettergevoelig bij het werken met tekst:

123456789101112 Optie Tekst vergelijkenSub ExactMatch_Food()Selecteer Case Range ("a1"). WaardeKoffer "Bieten"MsgBox "Groente"Doos "Appel", "Banaan", "Oranje"MsgBox "Fruit"Einde SelecterenEinde sub

Case Like

Met de Like Operator kunt u onnauwkeurige vergelijkingen maken. Als de tekst overeenkomt, retourneert Like WAAR, als het niet overeenkomt, wordt FALSE geretourneerd. Dit maakt de Like-operator gemakkelijk te gebruiken met If Statements, maar het zal niet zo gemakkelijk werken met Case Statements.

Case Like - Een mislukte test

De volgende code laat zien dat de Like-operator niet werkt met Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork()Dim woord als stringwoord = "CACAO"Selecteer HoofdletterwoordHoofdlettergebruik 2 Zoals "*C*C*"MsgBox "Goed"Geval AndersMsgBox "Niet goed"Einde SelecterenEinde sub

Case-achtig - op de juiste manier

We kunnen echter de TRUE-expressie toevoegen om de Select-instructie te laten werken met de Like-operator:

1234567891011 Sub Select_Case_Like_CorrectWay()Dim woord als stringwoord = "CACAO"Selecteer Case TrueHoofdlettergebruik zoals "*C*C*"MsgBox "Goed"Geval AndersMsgBox "Niet goed"Einde SelecterenEinde sub

Geval - Dubbele punt

Wanneer u een Case Statement gebruikt, kunt u bij elke voorwaarde zoveel regels code toevoegen als u wilt. Als u echter maar één regel code hoeft uit te voeren. U kunt een dubbele punt (: ) gebruiken om alles op dezelfde regel te schrijven.

Hier is hetzelfde voorbeeld van een leerlingcijfer als voorheen, behalve het gebruik van een dubbele punt om de code in te korten:

1234567891011121314151617 Sub Calc_Grade_colon()Dimscore als geheel getalDim LetterGrade As StringScore = InputBox ("Voer studentenscore in")Selecteer CasescoreCase 90 tot 100: LetterGrade = "A"Geval 80 tot 90: LetterGrade = "B"Geval 70 tot 80: LetterGrade = "C"Zaak 60 tot 70: LetterGrade = "D"Anders: LetterGrade = "F"Einde SelecterenMsgBox "Het cijfer van de student is: " & LetterGradeEinde sub

Case Select - En/of - Meerdere voorwaarden

U kunt de En/of Operators gebruiken om samen met de Select Case aanvullende criteria te testen.

In dit voorbeeld gebruiken we een Select Case op de variabele 'leeftijd', maar we willen ook seks testen. Dus gebruiken we de And-operator om de meer complexe test uit te voeren:

123456789101112131415161718 Sub genestSelectCase()Dim seks als stringDim leeftijd als geheel getalsex = "mannelijk" ' of vrouwelijkleeftijd = 15Selecteer Case leeftijdGeval is < 20 en geslacht = "mannelijk"Msgbox "Man onder de 20"Geval is < 20 en geslacht = "vrouwelijk"Msgbox "Vrouw onder de 20"Zaak is >= 20 En geslacht = "mannelijk"Msgbox "Man boven de 20"Zaak is >= 20 En geslacht = "vrouwelijk"Msgbox "Vrouw boven de 20"Einde SelecterenEinde sub

Geneste zaakverklaringen

Net als If Statements kun je Case Statements in elkaar nesten:

123456789101112131415161718192021222324 Sub genestSelectCase()Dim seks als stringDim leeftijd als geheel getalsex = "mannelijk" ' of vrouwelijkleeftijd = 15Selecteer Case leeftijdGeval is < 20Selecteer Case-seksCase "mannelijk"MsgBox "Man onder de 20"Case "vrouwelijk"MsgBox "Vrouw onder de 20"Einde SelecterenZaak is >= 20 En geslacht = "vrouwelijk"Selecteer Case-seksCase "mannelijk"MsgBox "Man boven de 20"Case "vrouwelijk"MsgBox "Vrouw boven de 20"Einde SelecterenEinde SelecterenEinde sub

Case-verklaring vs. If-verklaring

Hoe meer voorwaarden er getest moeten worden, hoe nuttiger de Case Statement wordt vergeleken met een If Statement. Laten we een voorbeeld bekijken.

Hier is de code die nodig is om te testen of een werkbladnaam gelijk is aan een reeks waarden met behulp van een If-instructie:

12345 Als Naam = "Budget" Of Naam = "Voorspelling" Of Naam = "Trailing12" Of _Naam = "Flex" Of Naam = "OtherRatios" Of Naam = "Vergelijking" Of _Name = "BudReview" Of Name = "P&L_Review" Of Name = "Other" Dan'Doe ietsStop als

Hier is dezelfde code die in plaats daarvan een Select Statement gebruikt:

12345 Selecteer zaaknaamCase "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Vergelijking", "BudReview", "P&L_Review", "Overig"'Doe ietsEinde Selecteren

U kunt zien dat het in dit scenario veel gemakkelijker is om een ​​Select Statement te gebruiken. Het is aanzienlijk minder typen en het is veel gemakkelijker te lezen.

VBA Select Case-voorbeelden

Vb 1. Case Statement door gebruiker gedefinieerde functie (UDF)

Laten we ons bovenstaande voorbeeld van cijferberekening herhalen en een UDF maken om de score van een leerling te berekenen:

12345678910111213141516 Functie GetGrade (score als geheel getal) als tekenreeksSelecteer CasescoreGeval 90 tot 100GetGrade = "A"Geval 80 tot 90GetGrade = "B"Geval 70 tot 80GetGrade = "C"Kast 60 tot 70GetGrade = "D"Geval AndersGetGrade = "F"Einde SelecterenFunctie beëindigen

Nu kunnen we de functie GetGrade in ons Excel-werkblad gebruiken om snel leerlingcijfers te berekenen:

Vb 2. Naam testblad / Verklaring lusgeval

Deze code doorloopt alle werkbladen in een werkmap, UnProtecting-bladen die aan bepaalde criteria voldoen:

123456789101112 Sub Case_UnProtectSheet()Dim ws als werkbladVoor elke ws In werkbladenSelecteer Zaak ws.Naam 'Lijst van alle bladen met VerhoudingenCase "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Vergelijking", "BudReview", "P&L_Review", "Overig"ws.Bescherming opheffenEinde SelecterenVolgende wsEinde sub

Voorbeeld 3. Selecteer Case - Celwaarde

In dit voorbeeld wordt de score van een student in een cel getest, waarbij het cijfer van de letter rechtstreeks naar de cel aan de rechterkant wordt uitgevoerd.

12345678910111213141516 Sub TestCellValue()Dim cel als bereikCel instellen = bereik ("C1")Selecteer Case cel.WaardeGeval 90 tot 100cel.Offset(0, 1) = "A"Geval 80 tot 90cel.Offset(0, 1) = "B"Geval 70 tot 80cel.Offset(0, 1) = "C"Geval 60 tot 80cel.Offset(0, 1) = "D"Einde SelecterenEinde sub

Vb 4. Selecteer Zaak - Datums

Dit Case Select-voorbeeld is een functie die test in welk kwartaal een datum valt.

123456789101112131415161718 Subtestdatum ()MsgBox GetQuarter(CDate("20-07-2019"))Einde subFunctie GetQuarter(dt As Date) As IntegerDim sht als werkbladSelecteer Case dtZaak CDate("01/01/2019") Naar CDate("31/03/2019")GetQuarter = 1Zaak CDate("04/01/2019") Naar CDate("06/30/2019")GetQuarter = 2Zaak CDate("07/01/2019") Naar CDate("30/09/2019")GetQuarter = 3Zaak CDate("10/01/2019") Naar CDate("31/12/2019")GetQuarter = 4Einde SelecterenFunctie beëindigen

Omdat het een functie is, kun je het als een functie in Excel gebruiken:

Ex. 5 Controleer of het getal oneven of even is

Dit voorbeeld test of een getal even of oneven is.

123456789101112 Sub CheckOddEven()Dim n als geheel getaln = InputBox ("Voer een getal in")Selecteer Case n Mod 2Geval 0MsgBox "Het getal is even."Zaak 1MsgBox "Het nummer is oneven."Einde SelecterenEinde sub

Ex. 6 Test of de datum op een weekdag of in het weekend valt

Deze voorbeelden zullen testen of een datum op een weekdag of een weekend valt.

123456789101112131415161718192021 Sub ControleWeekDag()Dim dt als datumdt = CD-datum("1/1/2020")Selecteer Case Weekdag(dt)Case vbMaandagMsgBox "Het is maandag"Casus vbDinsdagMsgBox "Het is dinsdag"Zaak vbwoensdagMsgBox "Het is woensdag"Casus vbDonderdagMsgBox "Het is donderdag"Zaak vbvrijdagMsgBox "Het is vrijdag"Zaak vbZaterdagMsgBox "Het is zaterdag"Casus vbZondagMsgBox "Het is zondag"Einde SelecterenEinde sub
123456789101112 Sub CheckWeekend()Dim dt als datumdt = CD-datum("1/1/2020")Selecteer Case Weekdag(dt)Zaak vbzaterdag, vbzondagMsgBox "Het is weekend"Geval AndersMsgBox "Het is geen weekend"Einde SelecterenEinde sub

VBA Case selecteren in Access

Alle bovenstaande voorbeelden werken in Access VBA precies hetzelfde als in Excel VBA.

123456789101112131415161718192021 Sub TestCellValue()Dim dbs als databaseDim eerst als RecordSetStel dbs = CurrentDB inStel rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)Met eerst.Beweeg eerst.BewerkingSelecteer eerst Case.Fields("Plaats")Koffer "Austin".rst.Fields("TelCode") = "512"Koffer "Chicago".rst.Fields("TelCode") = "312"Koffer "New York".rst.Fields("TelCode") = "1212"Koffer "San Francisco".rst.Fields("TelCode") = "415"Einde Selecteren.UpdateEindigt metEinde zo
wave wave wave wave wave