Select Case-strukturen er en nyttig VBA-struktur til beslutninger, der involverer tre eller flere muligheder i Excel 2016 (selvom den også fungerer med to muligheder, hvilket giver et alternativ til If-Then-Else-strukturen).
Et eksempel på Select Case
Følgende eksempel viser, hvordan du bruger strukturen Vælg sag:
Sub ShowRabat3()
Dim mængde så længe
Dim Rabat Som Dobbelt
Antal = InputBox("Indtast antal: ")
Vælg Sagsmængde
Case 0 til 24
Rabat = 0,1
Sag 25 til 49
Rabat = 0,15
Sag 50 til 74
Rabat = 0,2
Sagen er >= 75
Rabat = 0,25
Afslut Vælg
MsgBox “Rabat: “ & Rabat
Slut Sub
I dette eksempel evalueres mængdevariablen. Rutinen kontrollerer for fire forskellige tilfælde (0–24, 25–49, 50–74 og 75 eller derover).
Et hvilket som helst antal udsagn kan følge hver sagsudsagn, og de udføres alle, hvis sagen er sand. Hvis du kun bruger én sætning, som i dette eksempel, kan du placere sætningen på samme linje som Case-nøgleordet, efterfulgt af et kolon - VBA-sætningsseparatortegnet. Dette gør koden mere kompakt og en smule tydeligere. Sådan ser rutinen ud i dette format:
Sub ShowRabat4 ()
Dim mængde så længe
Dim Rabat Som Dobbelt
Antal = InputBox("Indtast antal: ")
Vælg Sagsmængde
Tilfælde 0 til 24: Rabat = 0,1
Case 25 til 49: Rabat = 0,15
Tilfælde 50 til 74: Rabat = 0,2
Case Er >= 75: Rabat = 0,25
Afslut Vælg
MsgBox “Rabat: “ & Rabat
Slut Sub
Når VBA udfører en Select Case-struktur, afsluttes strukturen, så snart VBA finder en sand sag og udfører sætningerne for den sag.
Et indlejret Select Case-eksempel
Som vist i det følgende eksempel kan du indlejre Select Case-strukturer. Denne rutine undersøger den aktive celle og viser en meddelelse, der beskriver cellens indhold. Bemærk, at proceduren har tre Select Case-strukturer, og hver har sin egen End Select-sætning:
Sub CheckCell()
Dæmp besked som streng
Vælg sagen er tom (ActiveCell)
Sagen Sandt
Msg = "er tom."
Tilfældet Andet
Vælg Case ActiveCell.HasFormula
Sagen Sandt
Msg = "har en formel"
Tilfældet Andet
Vælg Case IsNumeric (ActiveCell)
Sagen Sandt
Msg = "har et nummer"
Tilfældet Andet
Msg = "har tekst"
Afslut Vælg
Afslut Vælg
Afslut Vælg
MsgBox “Cell “ & ActiveCell.Address & “ “ & Msg
Slut Sub
Logikken lyder sådan her:
Find ud af, om cellen er tom.
Hvis den ikke er tom, skal du se, om den indeholder en formel.
Hvis der ikke er nogen formel, skal du finde ud af, om den indeholder en numerisk værdi eller tekst.
Når rutinen slutter, indeholder Msg-variablen en streng, der beskriver cellens indhold. MsgBox-funktionen viser denne meddelelse.
En meddelelse, der vises af CheckCell-proceduren.
Du kan indlejre Select Case-strukturer så dybt, som du har brug for det, men sørg for, at hver Select Case-sætning har en tilsvarende End Select-sætning.
Hvis du stadig ikke er overbevist om, at indrykning af kode er besværet værd, tjener den forrige liste som et godt eksempel. Fordybningerne virkelig for at gøre redeniveauerne tydelige. Tag et kig på den samme procedure uden nogen indrykning:
Sub CheckCell()
Dæmp besked som streng
Vælg sagen er tom (ActiveCell)
Sagen Sandt
Msg = "er tom."
Tilfældet Andet
Vælg Case ActiveCell.HasFormula
Sagen Sandt
Msg = "har en formel"
Tilfældet Andet
Vælg Case IsNumeric (ActiveCell)
Sagen Sandt
Msg = "har et nummer"
Tilfældet Andet
Msg = "har tekst"
Afslut Vælg
Afslut Vælg
Afslut Vælg
MsgBox “Cell “ & ActiveCell.Address & “ “ & Msg
Slut Sub
Ret uforståeligt, ikke?