L'estructura Select Case és una estructura VBA útil per a decisions que impliquen tres o més opcions a Excel 2016 (tot i que també funciona amb dues opcions, proporcionant una alternativa a l'estructura If-Then-Else).
Un exemple de selecció de cas
L'exemple següent mostra com utilitzar l'estructura Selecciona cas:
Sub ShowDiscount3()
Dim Quantitat As Long
Redueix el descompte com a doble
Quantitat = InputBox("Introdueix la quantitat: ")
Seleccioneu Quantitat de caixa
Cas 0 a 24
Descompte = 0,1
Cas 25 a 49
Descompte = 0,15
Cas 50 a 74
Descompte = 0,2
El cas és >= 75
Descompte = 0,25
Finalitzar la selecció
MsgBox "Descompte: " & Descompte
End Sub
En aquest exemple, s'està avaluant la variable Quantitat. La rutina comprova quatre casos diferents (0–24, 25–49, 50–74 i 75 o més).
Cada instrucció Case pot seguir qualsevol nombre d'instruccions, i totes s'executen si el cas és cert. Si només feu servir una instrucció, com en aquest exemple, podeu posar la sentència a la mateixa línia que la paraula clau Case, precedida de dos punts: el caràcter separador de la instrucció VBA. Això fa que el codi sigui més compacte i una mica més clar. Així és com es veu la rutina en aquest format:
Sub ShowDiscount4 ()
Dim Quantitat As Long
Redueix el descompte com a doble
Quantitat = InputBox("Introdueix la quantitat: ")
Seleccioneu Quantitat de caixa
Cas 0 a 24: descompte = 0,1
Cas del 25 al 49: descompte = 0,15
Cas 50 a 74: descompte = 0,2
El cas és >= 75: descompte = 0,25
Finalitzar la selecció
MsgBox "Descompte: " & Descompte
End Sub
Quan VBA executa una estructura Select Case, l'estructura es surt tan bon punt VBA troba un cas veritable i executa les declaracions per a aquest cas.
Un exemple de Selecció de cas imbricat
Tal com es demostra a l'exemple següent, podeu niar estructures Select Case. Aquesta rutina examina la cel·la activa i mostra un missatge que descriu el contingut de la cel·la. Tingueu en compte que el procediment té tres estructures Select Case i cadascuna té la seva pròpia instrucció End Select:
Sub CheckCell ()
Atenuar el missatge com a cadena
Seleccioneu el cas és buit (ActiveCell)
Cas Veritable
Msg = "està en blanc".
Cas Altre
Seleccioneu Case ActiveCell.HasFormula
Cas Veritable
Msg = "té una fórmula"
Cas Altre
Seleccioneu Case IsNumeric (ActiveCell)
Cas Veritable
Msg = "té un número"
Cas Altre
Msg = "té text"
Finalitzar la selecció
Finalitzar la selecció
Finalitzar la selecció
MsgBox "Cell " & ActiveCell.Address & " " & Msg
End Sub
La lògica és una cosa així:
Esbrineu si la cel·la està buida.
Si no està buit, comproveu si conté una fórmula.
Si no hi ha fórmula, esbrineu si conté un valor numèric o text.
Quan la rutina acaba, la variable Msg conté una cadena que descriu el contingut de la cel·la. La funció MsgBox mostra aquest missatge.
Un missatge que mostra el procediment CheckCell.
Podeu niuar les estructures de Select Case tan profundament com necessiteu, però assegureu-vos que cada instrucció Select Case tingui una instrucció End Select corresponent.
Si encara no esteu convençuts que val la pena l'esforç de sagnar el codi, la llista anterior serveix com a bon exemple. Els sagnis realment per deixar clars els nivells de nidificació. Mireu el mateix procediment sense cap sagnat:
Sub CheckCell ()
Atenuar el missatge com a cadena
Seleccioneu el cas és buit (ActiveCell)
Cas Veritable
Msg = "està en blanc".
Cas Altre
Seleccioneu Case ActiveCell.HasFormula
Cas Veritable
Msg = "té una fórmula"
Cas Altre
Seleccioneu Case IsNumeric (ActiveCell)
Cas Veritable
Msg = "té un número"
Cas Altre
Msg = "té text"
Finalitzar la selecció
Finalitzar la selecció
Finalitzar la selecció
MsgBox "Cell " & ActiveCell.Address & " " & Msg
End Sub
Bastant incomprensible, eh?