VBA Select Case Statement

I VBA, Vælg sagserklæring er et alternativ til If-Then erklæring, så du kan teste, om betingelserne er opfyldt, og køre specifik kode for hver betingelse. Select -erklæringen foretrækkes frem for If -erklæringen, når der er flere betingelser, der skal behandles.

Vælg case -eksempel

Dette eksempel beder brugeren om en YesNoCancel MessageBox og tester, hvilken mulighed brugeren valgte:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult Som VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Vælg Sag nResultSag vbJaMsgBox "Ja"Sag vbNrMsgBox "Nej"Sag vbCancelMsgBox "Annuller"Afslut VælgAfslut Sub

Nedenfor har vi i stedet skrevet det tilsvarende ved hjælp af en If -erklæring. Du vil bemærke, at Case Select -erklæringen indebærer lidt mindre indtastning - denne fordel forstærkes, når du tester flere kriterier.

12345678910111213 Sub If_Yes_No_Cancel ()Dim nResult Som VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Hvis nResult = vbJaMsgBox "Ja"ElseIf nResult = vbNo SåMsgBox "Nej"ElseIf nResult = vbCancel HerefterMsgBox "Annuller"Afslut HvisAfslut Sub

Sagserklæring Syntaks

Syntaks for Select Case Statement er som følger:

12345678910 Vælg sag [Testudtryk]Sag [Betingelse 1][Handling hvis betingelse 1 er sand]Sag [Betingelse 2][Handling hvis betingelse 2 er sand]Sag [Betingelse n][Handling hvis betingelse n er sand]Sag ellers[Handling hvis ingen er sande]Afslut Vælg

Hvor:

[Testudtryk] - Er værdien at vurdere. Normalt er dette en variabel.

[Handling hvis betingelse n er sand] - Er bare koden, der skal køres, hvis betingelsen er opfyldt (ligesom med en If -erklæring)

[Betingelse n] - Er betingelsen for at teste. Der er mange forskellige måder at teste forholdene på. Vi vil diskutere dem nedenfor.

Sagserklæringen vil udføre koden for den FØRSTE betingelse, der findes SAND. Hvis ingen betingelse er opfyldt, udføres der ingen kode, medmindre Else -klausulen tilføjes.

Vælg sagskriterier

Select Cases kan bruges til at evaluere både numeriske værdier og tekst. Først vil vi diskutere, hvordan du bruger Select Cases til at evaluere numeriske udtryk.

Præcis match - tal

Du kan nemt teste for en nøjagtig match med en sagserklæring:

1 Sag 10

eller tilføj kommaer for at teste for nøjagtige kampe med flere tal:

1 Sag 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers ()Dim n Som heltaln = CInt (InputBox ("…"))Vælg sag nSag 10'Hvis n er 10 SåSag 20, 30, 40'Hvis n er 20/30/40 SåSag ellers'Hvis n ikke er 10/20/30/40 SåAfslut VælgAfslut Sub

Intervaller

Du kan teste, om et tal falder inden for et område som sådan:

1 Sag 55 til 74

Denne procedure genererer en bogstavscore for en elev baseret på deres numeriske score:

12345678910111213141516171819202122 Sub Calc_Grade ()Dim Score som heltalDim LetterGrade som strengScore = InputBox ("Enter Student Score")Vælg sagscoreSag 90 til 100LetterGrade = "A"Sag 80 til 90LetterGrade = "B"Sag 70 til 80LetterGrade = "C"Sag 60 til 70LetterGrade = "D"Sag ellersLetterGrade = "F"Afslut VælgMsgBox "Elevens karakter er:" & LetterGradeAfslut Sub

Du kan også teste intervaller med Case Is

Vælg Case Is

1234 Sagen er <55'Gøre ingentingSag <= 74MsgBox "In Range"

Husk, at sagserklæringen kun vil udføre kode for KUN den første kamp.

Denne procedure beregner en elevs karakter ved hjælp af Case Is i stedet for Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Score som heltalDim LetterGrade som strengScore = InputBox ("Enter Student Score")Vælg sagscoreSag er> = 90LetterGrade = "A"Sag er> = 80LetterGrade = "B"Sag er> = 70LetterGrade = "C"Sag er> = 60LetterGrade = "D"Sag ellersLetterGrade = "F"Afslut VælgMsgBox "Elevens karakter er:" & LetterGradeAfslut Sub

Sag ellers

Du kan tilføje "Case Else" til slutningen af ​​din sagserklæring for at gøre noget, hvis ingen betingelser er opfyldt:

1 Sag ellers

Se slutningen på det forrige kodeeksempel for at se, hvordan Case Else kan bruges.

Vælg sag - tekst og lignende operatør

Hidtil har vores Select Case -eksempler kun fungeret med tal. Du kan også bruge Select Case -sætninger med tekst.

Præcis match - tekst

Du kan teste, om udtrykket matcher en nøjagtig sætning som denne:

1 Sag "rødbeder"

Eller brug kommaer til at teste, om udtrykket nøjagtigt matcher mere end én sætning:

1 Etui "Apple", "Banan", "Orange"

At sætte det sammen ligner:

12345678910 Sub ExactMatch_Food ()Vælg Case Range ("a1"). VærdiSag "rødbeder"MsgBox "Grøntsag"Etui "Apple", "Banan", "Orange"MsgBox "Frugt"Afslut VælgAfslut Sub

Store og små bogstaver

Som standard er VBA er store og små bogstaver. Det betyder, at VBA anser "Tekst" anderledes end "tekst". For at deaktivere store og små bogstaver skal du tilføje Option Compare Text til toppen af ​​dit modul:

1 Mulighed Sammenlign tekst

Dette eksempel vil gøre Case Select store og små bogstaver ufølsomme, når du arbejder med tekst:

123456789101112 Mulighed Sammenlign tekstSub ExactMatch_Food ()Vælg Case Range ("a1"). VærdiSag "rødbeder"MsgBox "Grøntsag"Etui "Apple", "Banan", "Orange"MsgBox "Frugt"Afslut VælgAfslut Sub

Case Like

Like Operator giver dig mulighed for at foretage unøjagtige sammenligninger. Hvis teksten matcher, returnerer Like SAND, hvis den ikke matcher, returnerer den FALSK. Dette gør Like -operatøren let at bruge med If -erklæringer, men den fungerer ikke lige så let med sagserklæringer.

Case Like - En mislykket test

Følgende kode viser, at Like -operatøren ikke fungerer med Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Svagt ord som strengword = "COCOA"Vælg Case -ordCase word2 Like "*C*C*"MsgBox "Godt"Sag ellersMsgBox "Ikke godt"Afslut VælgAfslut Sub

Case Like - Den korrekte måde

Vi kan dog tilføje det SANDE udtryk for at få Select -sætningen til at fungere med Like -operatøren:

1234567891011 Sub Select_Case_Like_CorrectWay ()Svagt ord som strengword = "COCOA"Vælg Case TrueSagord som "*C*C*"MsgBox "Godt"Sag ellersMsgBox "Ikke godt"Afslut VælgAfslut Sub

Sag - kolon

Når du bruger en sagserklæring, kan du tilføje så mange linjer med kode, som du gerne vil køre med hver betingelse. Men hvis du kun skal køre en linje med kode. Du kan bruge et kolon (:) til at skrive alt på samme linje.

Her er det samme elevkaraktereksempel som før, undtagen at bruge et kolon til at forkorte koden:

1234567891011121314151617 Sub Calc_Grade_colon ()Dim Score som heltalDim LetterGrade som strengScore = InputBox ("Enter Student Score")Vælg sagscoreSag 90 til 100: LetterGrade = "A"Sag 80 til 90: LetterGrade = "B"Sag 70 til 80: LetterGrade = "C"Sag 60 til 70: LetterGrade = "D"Ellers sag: LetterGrade = "F"Afslut VælgMsgBox "Elevens karakter er:" & LetterGradeAfslut Sub

Case Select - Og / Eller - Flere betingelser

Du kan bruge And / Eller -operatørerne til at teste yderligere kriterier sammen med Select Case.

I dette eksempel bruger vi en Select Case på variablen 'alder', men vi vil også teste køn. Så vi bruger And Operator til at udføre den mere komplekse test:

123456789101112131415161718 Sub NestedSelectCase ()Dim sex As StringDim alder Som heltalkøn = "han" eller kvindealder = 15Vælg Sagens alderCase Is <20 And sex = "male"Msgbox "Mand under 20"Sag er <20 Og sex = "kvinde"Msgbox "Kvinde under 20"Sag er> = 20 Og køn = "mand"Msgbox "Mand over 20"Sag er> = 20 Og køn = "kvinde"Msgbox "Kvinde over 20"Afslut VælgAfslut Sub

Indlejrede sagserklæringer

Ligesom If -erklæringer kan du indlejre sagsopgørelser inde i hinanden:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Dim sex As StringDim alder Som heltalkøn = "han" eller kvindealder = 15Vælg Sagens alderSag er <20Vælg Case -sexSag "mand"MsgBox "Mand under 20"Sag "kvinde"MsgBox "Kvinde under 20"Afslut VælgSag er> = 20 Og køn = "kvinde"Vælg Case sexSag "mand"MsgBox "Mand over 20"Sag "kvinde"MsgBox "Kvinde over 20"Afslut VælgAfslut VælgAfslut Sub

Sagserklæring vs. if -erklæring

Jo flere betingelser der skal testes, jo mere nyttig er sagserklæringen sammenlignet med en If -erklæring. Lad os se på et eksempel.

Her er den kode, der kræves for at teste, om et regnearks navn er lig med et sæt værdier ved hjælp af en If -erklæring:

12345 Hvis Navn = "Budget" Eller Navn = "Prognose" Eller Navn = "Efterfølgende12" Eller _Name = "Flex" Eller Name = "OtherRatios" Eller Name = "Comparison" Eller _Name = "BudReview" Eller Name = "P & L_Review" Eller Name = "Other" Herefter'Gør nogetAfslut Hvis

Her er den samme kode ved hjælp af en Select Statement i stedet:

12345 Vælg sagsnavnSag "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Sammenligning", "BudReview", "P & L_Review", "Andet"'Gør nogetAfslut Vælg

Du kan se, at det er meget lettere at bruge en Select -erklæring i dette scenario. Det er betydeligt mindre at skrive, og det er meget lettere at læse.

VBA Select Case -eksempler

Eks. 1. Sagserklæring Brugerdefineret funktion (UDF)

Lad os replikere vores eksempel på karakterberegning ovenfor og oprette en UDF til at beregne en elevs score:

12345678910111213141516 Funktion GetGrade (Score As Integer) As StringVælg sagscoreSag 90 til 100GetGrade = "A"Sag 80 til 90GetGrade = "B"Sag 70 til 80GetGrade = "C"Sag 60 til 70GetGrade = "D"Sag ellersGetGrade = "F"Afslut VælgAfslut funktion

Nu kan vi bruge Function GetGrade i vores Excel -regneark til hurtigt at beregne elevernes karakterer:

Eks. 2. Testarkets navn / loop -erklæring

Denne kode går gennem alle regneark i en projektmappe, Un -Protecting sheets, der opfylder visse kriterier:

123456789101112 Sub Case_UnProtectSheet ()Dim ws Som regnearkFor hver gang i regnearkVælg Case ws.Name 'Liste over alle ark med forholdSag "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Sammenligning", "BudReview", "P & L_Review", "Andet"ws.BeskytAfslut VælgNæste wsAfslut Sub

Eks. 3. Vælg sag - celleværdi

Dette eksempel tester en elevs score i en celle og sender bogstavkarakteren direkte til cellen til højre.

12345678910111213141516 Sub TestCellValue ()Dim celle som områdeIndstil celle = område ("C1")Vælg sagcelle. VærdiSag 90 til 100cell.Offset (0, 1) = "A"Sag 80 til 90cell.Offset (0, 1) = "B"Sag 70 til 80cell.Offset (0, 1) = "C"Sag 60 til 80cell.Offset (0, 1) = "D"Afslut VælgAfslut Sub

Eks. 4. Vælg sag - datoer

Dette Case Select -eksempel er en funktion, der tester, hvilken kvartal der falder ind.

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("7/20/2019"))Afslut SubFunktion GetQuarter (dt As Date) Som IntegerDim sht Som regnearkVælg Case dtSag CDate ("01/01/2019") Til CDate ("31/03/2019")GetQuarter = 1Sag CDate ("04/01/2019") Til CDate ("06/30/2019")GetQuarter = 2Sag CDate ("07/01/2019") Til CDate ("30/09/2019")GetQuarter = 3Sag CDate ("10/01/2019") Til CDate ("31/12/2019")GetQuarter = 4Afslut VælgAfslut funktion

Fordi det er en funktion, kan du bruge den som en funktion i Excel:

Eks. 5 Kontroller, om tallet er ulige eller lige

Dette eksempel tester, om et tal er ulige eller lige.

123456789101112 Sub CheckOddEven ()Dim n Som heltaln = InputBox ("Indtast et tal")Vælg Case n Mod 2Sag 0MsgBox "Tallet er lige."Sag 1MsgBox "Tallet er ulige."Afslut VælgAfslut Sub

Eks. 6 Test, om datoen er på hverdag eller weekend

Disse eksempler tester, om en dato falder på en hverdag eller en weekend.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt As Datedt = CDate ("1/1/2020")Vælg sag Ugedag (dt)Sag vbMandagMsgBox "Det er mandag"Sag vbTirsdagMsgBox "Det er tirsdag"Sag vb onsdagMsgBox "Det er onsdag"Sag vbTorsdagMsgBox "Det er torsdag"Sag vbFredagMsgBox "Det er fredag"Sag vbSaturdayMsgBox "Det er lørdag"Sag vbSøndagMsgBox "Det er søndag"Afslut VælgAfslut Sub
123456789101112 Sub CheckWeekend ()Dim dt As Datedt = CDate ("1/1/2020")Vælg sag Ugedag (dt)Sag vbSaturday, vbSundayMsgBox "Det er en weekend"Sag ellersMsgBox "Det er ikke en weekend"Afslut VælgAfslut Sub

VBA Select Case i Access

Alle ovenstående eksempler fungerer nøjagtig det samme i Access VBA som i Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs som databaseDim først som RecordSetIndstil dbs = CurrentDBIndstil rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Med første.MoveFirst.RedigereVælg Case rst.Fields ("By")Sag "Austin".rst.Fields ("TelCode") = "512"Sag "Chicago".rst.Fields ("TelCode") = "312"Sag "New YorK".rst.Fields ("TelCode") = "1212"Sag "San Fransisco".rst.Fields ("TelCode") = "415"Afslut Vælg.OpdaterAfslut medAfslut Sus
wave wave wave wave wave