- Seleziona un caso di esempio
- Sintassi dell'istruzione case
- Seleziona i criteri del caso
- Seleziona caso - Operatore di testo e Mi piace
- Caso - Colon
- Selezione del caso - E/O - Condizioni multiple
- Dichiarazioni di casi nidificati
- Case Statement contro If Statement
- Esempi di casi selezionati VBA
- VBA Seleziona caso in Access
In VBA, il Seleziona la dichiarazione del caso è un'alternativa al Istruzione If-Then, che consente di verificare se le condizioni sono soddisfatte, eseguendo codice specifico per ogni condizione. L'istruzione Select è preferibile all'istruzione If quando sono presenti più condizioni da elaborare.
Seleziona un caso di esempio
Questo esempio richiede all'utente un MessageBox YesNoCancel e verifica quale opzione l'utente ha selezionato:
1234567891011121314 | Sub Select_Case_Yes_No_Cancel()Dim nResult As VbMsgBoxResultnResult = MsgBox("… ", vbYesNoCancel)Seleziona caso nRisultatoCaso vbSìMsgBox "Sì"Caso vbNoMsgBox "No"Caso vbAnnullaMsgBox "Annulla"Fine selezioneFine sottotitolo |
Di seguito abbiamo scritto l'equivalente utilizzando invece un'istruzione If. Noterai che l'istruzione Case Select richiede una digitazione leggermente inferiore: questo vantaggio è amplificato quando si testano più criteri.
12345678910111213 | Sub Se_Sì_No_Annulla()Dim nResult As VbMsgBoxResultnResult = MsgBox("… ", vbYesNoCancel)Se nResult = vbSì AlloraMsgBox "Sì"ElseIf nResult = vbNo ThenMsgBox "No"ElseIf nResult = vbCancel ThenMsgBox "Annulla"Finisci seFine sottotitolo |
Sintassi dell'istruzione case
La sintassi dell'istruzione Select Case è la seguente:
12345678910 | Seleziona caso [Espressione di prova]Caso [Condizione 1][Azione se la condizione 1 è vera]Caso [Condizione 2][Azione se la condizione 2 è vera]Caso [Condizione n][Azione se la condizione n è vera]Caso Altro[Azione se nessuna è vera]Fine selezione |
In cui si:
[Espressione di prova] - È il valore da valutare. Di solito questa è una variabile.
[Azione se la condizione n è vera] - È solo il codice da eseguire se la condizione è soddisfatta (proprio come con un'istruzione If)
[Condizione n] - È la condizione da testare. Ci sono molti modi diversi per testare le condizioni. Li discuteremo di seguito.
L'istruzione Case eseguirà il codice per la FIRST condizione che è TRUE. Se non viene soddisfatta alcuna condizione, non verrà eseguito alcun codice, a meno che non venga aggiunta la clausola Else.
Seleziona i criteri del caso
Seleziona casi può essere utilizzato per valutare sia i valori numerici che il testo. Per prima cosa discuteremo come utilizzare Select Cases per valutare le espressioni numeriche.
Corrispondenza esatta - Numeri
Puoi facilmente verificare una corrispondenza esatta con una Case Statement:
1 | Caso 10 |
o aggiungi virgole per verificare le corrispondenze esatte con più numeri:
1 | Caso 20, 30, 40 |
1234567891011121314 | Sub ExactMatch_Numbers()Dim n As Integern = CInt(InputBox("…"))Seleziona Caso nCaso 10'Se n è 10 AlloraCaso 20, 30, 40'Se n è 20/30/40 AlloraCaso Altro'Se n non è 10/20/30/40 AlloraFine selezioneFine sottotitolo |
Intervalli
Puoi verificare se un numero rientra in un intervallo in questo modo:
1 | Caso da 55 a 74 |
Questa procedura genererà un punteggio letterale per uno studente in base al suo punteggio numerico:
12345678910111213141516171819202122 | Sub Calc_Grade()Dim Score As IntegerDim LetterGrade As StringPunteggio = InputBox ("Inserisci punteggio studente")Seleziona punteggio casoCase da 90 a 100LetterGrade = "A"Caso da 80 a 90LetterGrade = "B"Case da 70 a 80LetterGrade = "C"Caso da 60 a 70LetterGrade = "D"Caso AltroLetterGrade = "F"Fine selezioneMsgBox "Il voto dello studente è: " & LetterGradeFine sottotitolo |
Puoi anche testare le gamme con Case Is
Seleziona il caso è
1234 | Il caso è < 55'Fare nienteCaso <= 74MsgBox "Nell'intervallo" |
Ricorda che l'istruzione Case eseguirà il codice SOLO per la prima corrispondenza.
Questa procedura calcolerà il voto di uno studente utilizzando Case Is invece di Case To.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade()Dim Score As IntegerDim LetterGrade As StringPunteggio = InputBox ("Inserisci punteggio studente")Seleziona punteggio casoIl caso è >= 90LetterGrade = "A"Il caso è >= 80LetterGrade = "B"Il caso è >= 70LetterGrade = "C"Il caso è >= 60LetterGrade = "D"Caso AltroLetterGrade = "F"Fine selezioneMsgBox "Il voto dello studente è: " & LetterGradeFine sottotitolo |
Caso Altro
Puoi aggiungere "Case Else" alla fine della tua Case Statement per fare qualcosa se non sono soddisfatte le condizioni:
1 | Caso Altro |
Vedere la fine dell'esempio di codice precedente per vedere come è possibile utilizzare Case Else.
Seleziona caso - Operatore di testo e Mi piace
Finora i nostri esempi Select Case hanno funzionato solo con i numeri. Puoi anche utilizzare le istruzioni Select Case con il testo.
Corrispondenza esatta - Testo
Puoi verificare se l'espressione corrisponde a una frase esatta come questa:
1 | Caso "Barbabietole" |
Oppure usa le virgole per verificare se l'espressione corrisponde esattamente a più di una frase:
1 | Caso "Mela", "Banana", "Arancia" |
Mettendolo insieme sembra:
12345678910 | Sub ExactMatch_Food()Seleziona Case Range ("a1"). ValoreCaso "Barbabietole"MsgBox "Verdura"Caso "Mela", "Banana", "Arancia"MsgBox "Frutta"Fine selezioneFine sottotitolo |
Maiuscolo e minuscolo
Per impostazione predefinita, VBA fa distinzione tra maiuscole e minuscole. Ciò significa che VBA considera "Testo" diverso da "testo". Per disattivare la distinzione tra maiuscole e minuscole, aggiungi l'opzione Confronta testo nella parte superiore del modulo:
1 | Opzione Confronta testo |
Questo esempio renderà il Case Select insensibile alle maiuscole quando si lavora con il testo:
123456789101112 | Opzione Confronta testoSub ExactMatch_Food()Seleziona Case Range ("a1"). ValoreCaso "Barbabietole"MsgBox "Verdura"Caso "Mela", "Banana", "Arancia"MsgBox "Frutta"Fine selezioneFine sottotitolo |
Caso come
L'operatore Like ti permette di fare confronti imprecisi. Se il testo corrisponde, Like restituisce TRUE, se non corrisponde restituisce FALSE. Ciò rende l'operatore Like facile da usare con le istruzioni If, tuttavia non funzionerà altrettanto facilmente con le istruzioni Case.
Caso simile - Un test fallito
Il codice seguente dimostra che l'operatore Like non funziona con Select Case:
1234567891011 | Sub Select_Case_Like_DoesnotWork()Parola fioca come stringaparola = "CACAO"Seleziona la parola del casoCase word2 Come "*C*C*"MsgBox "Buono"Caso AltroMsgBox "Non va bene"Fine selezioneFine sottotitolo |
Case Like - Il modo corretto
Tuttavia, possiamo aggiungere nell'espressione TRUE per far funzionare l'istruzione Select con l'operatore Like:
1234567891011 | Sub Select_Case_Like_CorrectWay()Parola fioca come stringaparola = "CACAO"Seleziona maiuscolo veroParola maiuscola come "*C*C*"MsgBox "Buono"Caso AltroMsgBox "Non va bene"Fine selezioneFine sottotitolo |
Caso - Colon
Quando si utilizza un'istruzione Case è possibile aggiungere tutte le righe di codice che si desidera eseguire con ciascuna condizione. Tuttavia, se hai solo bisogno di eseguire una riga di codice. Puoi usare i due punti ( : ) per scrivere tutto sulla stessa riga.
Ecco lo stesso esempio di voto dello studente di prima, tranne per l'uso dei due punti per abbreviare il codice:
1234567891011121314151617 | Sub Calc_Grade_due punti()Dim Score As IntegerDim LetterGrade As StringPunteggio = InputBox ("Inserisci punteggio studente")Seleziona punteggio casoCase da 90 a 100: LetterGrade = "A"Case da 80 a 90: LetterGrade = "B"Case da 70 a 80: LetterGrade = "C"Case da 60 a 70: LetterGrade = "D"Case Else: LetterGrade = "F"Fine selezioneMsgBox "Il voto dello studente è: " & LetterGradeFine sottotitolo |
Selezione del caso - E/O - Condizioni multiple
È possibile utilizzare gli operatori And/Or per testare criteri aggiuntivi insieme al Select Case.
In questo esempio stiamo usando un Select Case sulla variabile "età", ma vogliamo anche testare il sesso. Quindi usiamo l'operatore And per eseguire il test più complesso:
123456789101112131415161718 | Sub NestedSelectCase()Dim sex As StringDim age As Integersesso = "maschio" 'o femminaetà = 15Seleziona l'età del casoIl caso è < 20 e sesso = "maschio"Msgbox "Uomo sotto i 20"Il caso è < 20 e sesso = "femmina"Msgbox "Donna under 20"Il caso è >= 20 e sesso = "maschio"Msgbox "Uomo oltre 20"Il caso è >= 20 e sesso = "femmina"Msgbox "Donna over 20"Fine selezioneFine sottotitolo |
Dichiarazioni di casi nidificati
Proprio come le istruzioni If, puoi annidare le istruzioni Case l'una nell'altra:
123456789101112131415161718192021222324 | Sub NestedSelectCase()Dim sex As StringDim age As Integersesso = "maschio" 'o femminaetà = 15Seleziona l'età del casoIl caso è < 20Seleziona il sesso del casoCaso "maschio"MsgBox "Uomo sotto i 20 anni"Caso "femmina"MsgBox "Donna sotto i 20 anni"Fine selezioneIl caso è >= 20 e sesso = "femmina"Seleziona il sesso del casoCaso "maschio"MsgBox "Uomo oltre 20"Caso "femmina"MsgBox "Donna over 20"Fine selezioneFine selezioneFine sottotitolo |
Case Statement contro If Statement
Maggiore è il numero di condizioni da testare, più utile è l'istruzione Case rispetto a un'istruzione If. Diamo un'occhiata a un esempio.
Ecco il codice necessario per verificare se il nome di un foglio di lavoro è uguale a un insieme di valori utilizzando un'istruzione If:
12345 | If Name = "Budget" Or Name = "Previsione" Or Name = "Trailing12" Or _Nome = "Flex" Oppure Nome = "OtherRatios" Oppure Nome = "Confronto" Oppure _Nome = "BudReview" Oppure Nome = "P&L_Review" Oppure Nome = "Altro" Allora'Fare qualcosaFinisci se |
Ecco lo stesso codice che utilizza invece un'istruzione Select:
12345 | Seleziona il nome del casoCaso "Budget", "Previsione", "Trailing12", "Flex", "Altri rapporti", _"Confronto", "BudReview", "P&L_Review", "Altro"'Fare qualcosaFine selezione |
Puoi vedere che è molto più semplice usare un'istruzione Select in questo scenario. È molto meno digitante ed è molto più facile da leggere.
Esempi di casi selezionati VBA
Es 1. Case Statement Funzione definita dall'utente (UDF)
Riproduciamo il nostro esempio di calcolo del voto sopra e creiamo una UDF per calcolare il punteggio di uno studente:
12345678910111213141516 | Funzione GetGrade (punteggio come numero intero) come stringaSeleziona punteggio casoCase da 90 a 100OttieniGrado = "A"Caso da 80 a 90OttieniGrado = "B"Case da 70 a 80OttieniGrado = "C"Caso da 60 a 70OttieniGrado = "D"Caso AltroOttieniGrado = "F"Fine selezioneFine funzione |
Ora possiamo utilizzare la funzione GetGrade nel nostro foglio di lavoro Excel per calcolare rapidamente i voti degli studenti:
Es 2. Nome del foglio di prova / Dichiarazione del caso del loop
Questo codice scorrerà tutti i fogli di lavoro in una cartella di lavoro, fogli UnProtecting che soddisfano determinati criteri:
123456789101112 | Sub Case_UnProtectSheet()Dim ws come foglio di lavoroPer ogni ws nei fogli di lavoroSeleziona Case ws.Name "Elenco di tutti i fogli con rapporti"Caso "Budget", "Previsione", "Trailing12", "Flex", "Altri rapporti", _"Confronto", "BudReview", "P&L_Review", "Altro"ws.UnprotectFine selezioneAvanti wFine sottotitolo |
Es 3. Seleziona caso - Valore cella
Questo esempio testerà il punteggio di uno studente in una cella, emettendo il voto in lettere direttamente nella cella a destra.
12345678910111213141516 | Sub TestCellValue()Cella debole come intervalloImposta cella = Intervallo ("C1")Seleziona Case cell.ValueCase da 90 a 100cella.Offset(0, 1) = "A"Caso da 80 a 90cella.Offset(0, 1) = "B"Case da 70 a 80cella.Offset(0, 1) = "C"Caso da 60 a 80cell.Offset(0, 1) = "D"Fine selezioneFine sottotitolo |
Es 4. Seleziona caso - Date
Questo esempio Case Select è una funzione che verifica in quale trimestre rientra una data.
123456789101112131415161718 | Data di prova secondaria ()MsgBox GetQuarter(CDate("7/20/2019"))Fine sottotitoloFunzione GetQuarter (dt As Date) As IntegerDim sht come foglio di lavoroSeleziona Caso dtCaso CDate("01/01/2019") A CDate("31/03/2019")OttieniQuarter = 1Caso CDate("04/01/2019") A CDate("06/30/2019")OttieniQuarter = 2Caso CDate("07/01/2019") A CDate("09/30/2019")OttieniQuarter = 3Caso CDate("10/01/2019") A CDate("31/12/2019")OttieniQuarter = 4Fine selezioneFine funzione |
Poiché è una funzione, puoi usarla come funzione all'interno di Excel:
Ex. 5 Controlla se il numero è pari o dispari
Questo esempio verifica se un numero è pari o dispari.
123456789101112 | Sub CheckDispariPari()Dim n As Integern = InputBox("Inserisci un numero")Seleziona caso n Mod 2Caso 0MsgBox "Il numero è pari."Caso 1MsgBox "Il numero è dispari."Fine selezioneFine sottotitolo |
Ex. 6 Verifica se la data è nei giorni feriali o nel fine settimana
Questi esempi verificheranno se una data cade in un giorno feriale o in un fine settimana.
123456789101112131415161718192021 | Sub CheckWeekDay()Dim dt come datadt = CDate("1/1/2020")Seleziona caso Giorno della settimana (dt)Caso vblunedìMsgBox "È lunedì"Caso vbMartedìMsgBox "È martedì"Caso vbMercoledìMsgBox "E' mercoledì"Caso vbGiovedìMsgBox "E' giovedì"Caso vbVenerdìMsgBox "È venerdì"Caso vbSabatoMsgBox "E' sabato"Caso vbSundayMsgBox "E' domenica"Fine selezioneFine sottotitolo |
123456789101112 | Sub CheckWeekend()Dim dt come datadt = CDate("1/1/2020")Seleziona caso Giorno della settimana (dt)Caso vbSaturday, vbSundayMsgBox "E' un fine settimana"Caso AltroMsgBox "Non è un fine settimana"Fine selezioneFine sottotitolo |
VBA Seleziona caso in Access
Tutti gli esempi precedenti funzionano esattamente allo stesso modo in Access VBA come in Excel VBA.
123456789101112131415161718192021 | Sub TestCellValue()Dim dbs come databaseDim prima come RecordSetImposta dbs = CurrentDBSet rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)con prima.Sposta prima.ModificareSeleziona Case rst.Fields("Città")Caso "Austin".rst.Fields("TelCode") = "512"Caso "Chicago".rst.Fields("TelCode") = "312"Caso "New York".rst.Fields("TelCode") = "1212"Caso "San Francisco".rst.Fields("TelCode") = "415"Fine selezione.AggiornareTermina conFine Sus |