Usare il Select Case. - dal 04/09/04 pagina vista: volte Quando in procedure vba usiamo valutare condizioni da verificare, spesso ricorriamo alle istruzioni If...Then...End If che forse ci sono più congeniali visto che si basano su un nostro modo di ragionare abituale : SE si verifica questa condizione, ALLORA mi fai questo, ALTRIMENTI mi fai quest'altro (oppure non mi fai niente), ecc. ecc. Se le condizioni da verificare sono molte, si ricorre a tante istruzioni If ...Then...End If chiuse, oppure a tanti ElseIf quante sono le condizioni oltre la prima, o ancora agli operatori Or e And per concatenare condizioni da verificare. La compilazione di codice con molti If non è strutturalmente sbagliata, ma costringe rallentamenti nell'esecuzione del codice quando le condizioni sono molte e quelle previste si trovano più avanti rispetto alla prima condizione If : infatti vengono lette tutte le condizioni fino a che non viene trovata la condizione prevista. Esiste un'altro modo per gestire la verifica di condizioni, ed è il Select Case . La struttura Case risulta infatti più flessibile e completa rispetto ad istruzioni If nidificate, offrendo una maggiore semplicità di codice, oltre ad una più rapida esecuzione. Vediamo intanto la sintassi di un'istruzione Select Case : (con espressione si intende il soggetto da valutare, con elenco costanti si intende la possibile condizione da verificare del soggetto)
L'espressione in una struttura Case è di solito una variabile o una proprietà (per esempio di un controllo ActiveX). L'elenco delle costanti è il valore da verificare; può essere un valore numerico, una costante od una variabile stringa, un intervallo di valori, una condizione relazionale o una combinazione di questi elementi. Non vi sono limitazioni al numero di istruzioni che possono seguire un'istruzione Case. Facciamo subito qualche esempio:
In pratica questa struttura verifica quale (Value) delle OptionButton corrisponderà a True, ed esegue l'istruzione prevista dall'opzione selezionata. Se avessimo usato l'istruzione If, avremmo dovuto scrivere:
Per capire la differenza nella velocità dell'esecuzione, supponiamo che sia selezionata la OptionButton3 : con la struttura If il codice non sa quale sarà la condizione da eseguire, e quindi viene letta la prima condizione, poi la seconda infine la terza, che corrisponde alla situazione esistente, e solo a questo punto eseguite le istruzioni ; con la struttura Case già ad inizio istruzioni il codice sa che è l'OptionButton3 ad essere selezionata, e cerca quindi subito il Case che interessa eseguendo l'istruzione corrispondente. La proposizione Case può essere seguita anche da una qualsiasi delle seguenti forme di elenco costanti :
In tutti questi casi sarà necessario reperire l'"espressione" oggetto della/delle verifiche (quella espressione assegnata al Select Case). Possiamo utilizzare una variabile reperita sia attraverso una TextBox, una InputBox, una cella, o variabili restituite da un'altra procedura o istruzione, anche posta a monte del Select Case. Vediamo alcuni esempi dove una variabile (che chiameremo Valore) la reperiamo tramite la TextBox1; anche in questo esempio faccio restituire un semplice messaggio, ma ognuno sfrutterà le istruzioni a lui necessarie:
Le istruzioni Select Case possono essere nidificate. A ciascuna istruzione Select Case nidificata deve corrispondere un'istruzione End Select. In questo altro esempio nidifichiamo un'altra istruzione Select Case all'interno del secondo caso:
Questo tipo di costruzione risulta utile quando si voglia, all'interno di una condizione (o gruppo di condizioni) creare differenti alternative nell'ambito della condizione stessa. Un ultimo accorgimento quando si usi il SelectCase con espressioni che siano stringhe di testo: abbiamo visto che la variabile che rappresenta l'espressione può provenire da diverse parti, da una TextBox, da un valore selezionato in una ComboBox, o ListBox, da una cella del foglio di lavoro, da un'altra variabile, ecc.; in tutti questi casi non saremo mai sicuri di come è scritta la stringa per quanto concerne maiuscole/minuscole, e visto che dovremo scrivere nel codice l'elenco costanti esatto, conviene convertire la variabile tutta in maiuscolo (oppure tutto in minuscolo) e scrivere l'elenco costanti in maiuscolo. Esempio: supponiamo di voler selezionare dei nomi di squadre di calcio, e non sapremo se saranno scritti "Milan" o MILAN" o ancora "milan"; rendiamo quindi tutto maiuscolo con la funzione Ucase, e scriveremo i nomi nel codice tutto maiuscolo:
Ancora per comparare la diversità di costruzione istruzioni tra If...Then .. e una struttura Case, vediamo questa riga della routine di esempio sopra riportata: (numero è la variabile da valutare)
come si nota, la struttura Case ci consente un bel risparmio di istruzioni, risparmio tanto maggiore quanto maggiore è il numero degli intervalli da verificare. Con If siamo costretti ad usare gli operatori And per definire l'intervallo, e Or per concatenare gli intervalli. Se invece compariamo le differenze per quanto riguarda stringhe di testo, con la struttura Case scriviamo:
Concludo facendo notare che la costruzione con una struttura Case (quando possibile) è sicuramente più semplice e immediata da capire e scrivere rispetto alla struttura If..Then.
prelevato sul sito www.ennius.altervista.org |