- Selecteer casusvoorbeeld
- Syntaxis van casusverklaring
- Selecteer Case Criteria
- Selecteer Hoofdletter - Tekst en de Like-operator
- Geval - Dubbele punt
- Case Select - En/of - Meerdere voorwaarden
- Geneste zaakverklaringen
- Case-verklaring vs. If-verklaring
- VBA Select Case-voorbeelden
- VBA Case selecteren in Access
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 |