Lavorare con i Fogli di lavoro. - dal 04/09/04 pagina vista: volte Ovvero : come eseguire una serie di operazioni che facciamo su un foglio, anche su tutti gli altri fogli della cartella. Mi sembrava che in più articoli e/o risposte avessi spiegato come lavorare con tutti i fogli di lavoro di una cartella di excel (WorkBook), ma continuano richieste su questo argomento, e quindi propongo un'articolo più specifico. Premesso che la guida in linea del vba è piuttosto chiara al riguardo, proviamo a puntualizzare tre situazioni in cui ci potremo trovare:
Cominciamo col ricordare che ogni foglio di un WorkBook fa parte di un "Insieme", l' "Insieme Fogli" (WorkSheets), e come su tutti gli "insiemi" in Excel, possiamo impostare dei Cicli For per agire su ogni singolo componente dell'"insieme". Proprio come facciamo (e il sito è pieno di esempi) quando si devono scorrere celle in una determinata zona o sull'intero foglio. Comunque, tanto per chiarire: Worksheet (senza la "s" del plurale inglese) è il Foglio di lavoro, mentre Worksheets rappresenta tutti i fogli di lavoro della cartella. L'istruzione base che serve a scorrere tutti i fogli, sarà molto semplice, questa:
dove ws è la variabile che identifica un singolo foglio, e l'istruzione dice: Per Ogni foglio nell'insieme Fogli, esegui le istruzioni di cosa fare, e passa al foglio successivo con Next ws. E' chiaro che verrano "scorsi" tutti i fogli fino all'ultimo, e in ogni foglio verranno eseguite le istruzioni. E' altresì evidente che questo sarà per forza di cose, il ciclo esterno, il primo asd essere eseguito, rispetto ad altri cicli, che saranno interni a questo, e che potranno servire per eseguire determinate istruzioni all'interno di ogni foglio. Facciamo un esempio, utilizzando una routine già presente in questa sezione, e che serve a trovare una parola, cercandola in ogni cella di un foglio. Modifichiamo questa routine in modo da eseguire la ricerca della parola anche sugli altri fogli della cartella. Commento solo le modifiche: Troviamo infatti l'istruzione vista sopra (For Each ws....) e in aggiunta l'istruzione num = Worksheets.Count che serve a contare quanti fogli sono presenti nella cartella. Con questo numero, faremo un controllo, tramite un contatore: la variabile att, che si incrementa di una unità ad ogni foglio scorso, per sapere se saremo all'ultimo foglio, ed avviseremo a fine ciclo con il messaggio che la ricerca è terminata. In grassetto le modifiche:
Potremo quindi compiere qualsiasi operazione all'interno di un ciclo che scorra tutti i fogli, come impostare valori in determinate celle, oppure impostare colori all'interno di celle, o ancora assegnare formule, colorare i fonts, impostare aree di stampa e mandarle in stampa, ecc. ecc.. E' evidente che qualsiasi istruzione faremo eseguire, sarà relativa al foglio in quel momento scorso, e reso attivo tramite l'istruzione ws.Activate. Se invece vogliamo escludere uno o più fogli dall'esecuzione di una serie di istruzioni, dovremo comunque istruire un ciclo che scorra tutti i fogli, tranne quelli non interessati. Imposteremo quindi delle condizioni che idendificheranno i fogli da escludere. Avremo due possibilità:
Se poi si volessero saltare più fogli si potrà impostare con l'operatore Or altre condizioni, ad esempio per il foglio 2 e il 5:
Vediamo ora alcune routine veloci:
Buon lavoro. prelevato sul sito www.ennius.altervista.org |