Select Case-strukturen er en nyttig VBA-struktur for beslutninger som involverer tre eller flere alternativer i Excel 2016 (selv om den også fungerer med to alternativer, og gir et alternativ til If-Then-Else-strukturen).
Et eksempel på Select Case
Følgende eksempel viser hvordan du bruker strukturen Velg sak:
Sub ShowRabatt3()
Dim mengde så lenge
Dim rabatt som dobbel
Mengde = InputBox(“Skriv inn mengde: “)
Velg Saksantall
Sak 0 til 24
Rabatt = 0,1
Sak 25 til 49
Rabatt = 0,15
Sak 50 til 74
Rabatt = 0,2
Saken er >= 75
Rabatt = 0,25
Avslutt Velg
MsgBox "Rabatt: " & rabatt
End Sub
I dette eksemplet blir Mengde-variabelen evaluert. Rutinen kontrollerer for fire forskjellige tilfeller (0–24, 25–49, 50–74 og 75 eller høyere).
Et hvilket som helst antall utsagn kan følge hver saksutsagn, og de utføres alle hvis saken er sann. Hvis du bare bruker én setning, som i dette eksemplet, kan du sette setningen på samme linje som nøkkelordet Case, etterfulgt av et kolon – VBA-setningsskilletegnet. Dette gjør koden mer kompakt og litt tydeligere. Slik ser rutinen ut i dette formatet:
Sub ShowRabatt4 ()
Dim mengde så lenge
Dim rabatt som dobbel
Mengde = InputBox(“Skriv inn mengde: “)
Velg Saksantall
Tilfelle 0 til 24: Rabatt = 0,1
Sak 25 til 49: Rabatt = 0,15
Tilfelle 50 til 74: Rabatt = 0,2
Case Is >= 75: Rabatt = 0,25
Avslutt Velg
MsgBox "Rabatt: " & rabatt
End Sub
Når VBA kjører en Select Case-struktur, avsluttes strukturen så snart VBA finner en sann sak og utfører setningene for den saken.
Et nestet Select Case-eksempel
Som vist i følgende eksempel, kan du neste Select Case-strukturer. Denne rutinen undersøker den aktive cellen og viser en melding som beskriver cellens innhold. Legg merke til at prosedyren har tre Select Case-strukturer, og hver har sin egen End Select-setning:
Sub CheckCell()
Dim melding som streng
Velg Case IsEmpty (ActiveCell)
Tilfelle sant
Msg = "er tom."
Case Else
Velg Case ActiveCell.HasFormula
Tilfelle sant
Msg = "har en formel"
Case Else
Velg Sak IsNumeric (ActiveCell)
Tilfelle sant
Msg = "har et nummer"
Case Else
Msg = "har tekst"
Avslutt Velg
Avslutt Velg
Avslutt Velg
MsgBox "Cell" & ActiveCell.Address & " " & Msg
End Sub
Logikken er omtrent slik:
Finn ut om cellen er tom.
Hvis den ikke er tom, se om den inneholder en formel.
Hvis det ikke er noen formel, finn ut om den inneholder en numerisk verdi eller tekst.
Når rutinen avsluttes, inneholder Msg-variabelen en streng som beskriver cellens innhold. MsgBox-funksjonen viser den meldingen.
En melding som vises av CheckCell-prosedyren.
Du kan neste Select Case-strukturer så dypt du trenger, men sørg for at hver Select Case-setning har en tilsvarende End Select-setning.
Hvis du fortsatt ikke er overbevist om at innrykkkode er verdt innsatsen, fungerer den forrige oppføringen som et godt eksempel. Fordypningene virkelig for å gjøre hekkenivåene klare. Ta en titt på samme prosedyre uten innrykk:
Sub CheckCell()
Dim melding som streng
Velg Case IsEmpty (ActiveCell)
Tilfelle sant
Msg = "er tom."
Case Else
Velg Case ActiveCell.HasFormula
Tilfelle sant
Msg = "har en formel"
Case Else
Velg Sak IsNumeric (ActiveCell)
Tilfelle sant
Msg = "har et nummer"
Case Else
Msg = "har tekst"
Avslutt Velg
Avslutt Velg
Avslutt Velg
MsgBox "Cell" & ActiveCell.Address & " " & Msg
End Sub
Ganske uforståelig, ikke sant?