eval (ez_write_tag ([[468,60], “sourcedaddy_com-box-3”, “ezslot_1”, 102, “0”, “0”])); de Select Case Statement
MS-Excel / Algemene opmaak
Meerdere tests uitvoeren met If … ElseIf is een handige techniek – het is een “VBA-tool” waar je vaak naar luistert. Het wordt echter snel onpraktisch naarmate het aantal tests dat u moet maken groter wordt. Het is oké voor twee of drie tests, maar net zomin als dat maakt de logica moeilijker te volgen.
Voor deze situaties is de Select Case-instructie van VBA een betere keuze. Het idee is dat u aan het begin een logische uitdrukking geeft en vervolgens een reeks mogelijke resultaten opsomt. Voor elk mogelijk resultaat, een casus genoemd, geeft u een of meer VBA-statements op die u moet uitvoeren als de casus waar blijkt te zijn. Hier is de syntaxis:
Select Case TestExpression Case FirstCaseList Case SecondCaseList <etc> Case Else End Select
TestExpression
Deze uitdrukking wordt geëvalueerd aan het begin van de structuur. moet een waarde retourneren (logisch, numeriek, tekenreeks, enzovoort).
CaseList
Een lijst met een of meer mogelijke resultaten voor TestExpression. Deze resultaten zijn waarden of uitdrukkingen gescheiden door komma’s. VBA onderzoekt elk element in de lijst om te zien of er een overeenkomt met de TestExpression. De uitdrukkingen kunnen een van de volgende vormen aannemen:ExpressionExpression To ExpressionIs LogicalOperator ExpressionHet trefwoord To definieert een reeks waarden (bijvoorbeeld 1 tot 10) . Het trefwoord Is definieert een reeks waarden met een open einde (bijvoorbeeld Is > = 100).
Uitspraken
Dit zijn de uitspraken die VBA uitvoert als een deel van de bijbehorende CaseList komt overeen met de TestExpression. VBA voert de optionele ElseStatements uit als geen CaseList een match voor de TestExpression bevat.
Opmerking: als meer dan één CaseList een element bevat dat overeenkomt de TestExpression, VBA voert alleen de instructies uit die zijn gekoppeld aan de CaseList die als eerste verschijnt in de Select Case-structuur.
Listing laat zien hoe u Select Case zou gebruiken om het Frequency-argumentprobleem aan te pakken.
Een procedure die gebruikt Selecteer casus om meerdere waarden te testen Voorbeeld van een casus: testscores omzetten in lettercijfers
Laten we, om u een beter idee te geven van de Select Case-instructie, een ander voorbeeld bekijken dat de unieke talenten van deze krachtige structuur. Stel dat u een procedure wilt schrijven die een ruwe testscore omzet in een lettercijfer volgens de volgende tabel:
Ruwe score | Lettercijfer |
90 en hoger | A |
Tussen 80 en 89 | B |
Tussen 70 en 79 | C |
Tussen 60 en 69 | D |
Minder dan 60 | F |
Listing toont de LetterGrade-procedure, die een Select Case-statement gebruikt om de conversie uit te voeren.
Het rawScore-argument is een geheel getal tussen 0 en 100. De Select Case-structuur controleert eerst of rawScore negatief is en als dat het geval is, retourneert de functie een foutbericht. De volgende Case-instructie controleert of de score lager is dan 60, en de functie retourneert het lettercijfer “F” als dat zo is. De volgende Case-verklaring zoekt naar een score die lager is dan 70. Als we zover komen, weten we al (dankzij de voorgaande Case-verklaring) dat de score minstens 60 is. Daarom controleert deze case echt of de score is tussen 60 en 70 (inclusief 60, maar niet inclusief 70). Als dit het geval is, wordt de letter “D” geretourneerd. De rest van de Case-verklaringen verlopen op dezelfde manier. De Case Else controleert op een score groter dan 100 en retourneert een ander foutbericht als dat het geval is.
Een ander voorbeeld: de RGB-functie temmen
U kunt de RGB (rood, groen, blauw) VBA-functie op elk gewenst moment gebruiken. specificeer een kleur voor een eigenschap. Elk van de drie genoemde argumenten (rood, groen en blauw) zijn gehele getallen tussen 0 en 255 die bepalen hoeveel van elke componentkleur in de uiteindelijke kleur wordt gemengd. In de rode component betekent 0 bijvoorbeeld dat er geen rood aanwezig is en 255 betekent dat puur rood aanwezig is. Als alle drie waarden hetzelfde zijn, krijgt u een grijstint.
Hier zijn enkele voorbeeldwaarden voor elke component die gemeenschappelijke kleuren produceren:
Rood | Blauw | Groen | Resultaat |
0 | 0 | 0 | Zwart |
0 | 0 | 255 | Blauw |
0 | 255 | 0 | Groen |
0 | 255 | 255 | Cyaan |
255 | 0 | 0 | Rood |
255 | 0 | 255 | Margenta |
255 | 255 | 0 | Geel |
255 | 255 | 255 | Wit |
Laten we echter, in plaats van deze combinaties uit het hoofd te leren, VBA en Case selecteren aan het werk zetten om het kiezen van kleuren gemakkelijker te maken. toont de functie VBAColor, waarmee u namen kunt gebruiken (bijvoorbeeld “rood” of “blauw”) in plaats van cryptisch numb er combinaties om 16 van de meest voorkomende kleuren in te stellen.
Een functie die een kleurnaam accepteert als een string en de corresponderende RGB-waarde retourneert
VBAColor heeft een enkel argument, colorName, wat de naam is van de kleur die u willen werken. Merk op hoe de Select Case-instructie het argument masseert om fouten te voorkomen:
Select Case LCase(Trim(colorName))
De Trim-functie verwijdert alle overbodige spaties aan het begin en einde van het argument, en de LCase-functie converteert colorName naar kleine letters. Dit zorgt ervoor dat de functie niet hoofdlettergevoelig is, wat betekent dat het “niet uitmaakt of je zwart, ZWART of Zwart verzendt: de functie zal nog steeds werken.
De rest van de functie gebruikt Case-instructies om te controleren op de verschillende kleurnamen en retourneer de juiste RGB-waarde. U kunt de ColorTester-procedure gebruiken om VBAColora een werveling te geven. Deze procedure formatteert alleen de lettertypekleur van de momenteel geselecteerde werkbladcel.
Opmerking: VBA definieert ook acht kleurconstanten die je kunt gebruiken als je alleen de basiskleuren nodig hebt: vbBlack, vbBlue, vbCyan, vbGreen, vbMagenta, vbRed, vbWhite en vbYellow.