Fogli di Lavoro: questi (s)conosciuti. - dal 04/09/04 pagina vista: volte

Credo necessario proporre questo articolo visto che molti pellegrini che mi scrivono hanno lacune su come identificare i fogli di lavoro (WorkSheets) di una cartella di lavoro (WorkBook).

Quando in una istruzione vba dobbiamo selezionare un foglio oppure fare riferimento ad una'area o una cella di un foglio di lavoro, quando insomma dobbiamo riferirci ad un foglio, la sintassi prevede di usare la parola Foglio in inglese, che sarà quindi : Worksheets oppure Sheets , seguita dal nome del Foglio oppure dal numero del Foglio, ed è qui che nascono i malintesi.

Usare il nome del Foglio:

"Foglio1",  "Foglio2",  "Foglio3",  ecc, che sono i termini con i quali Excel ci presenta i fogli di lavoro e li identifica, sono i NOMI dei fogli, che chiamandosi tutti Fogli, di default, devono essere necessariamente diversificati con l'aggiunta di un numero. E' stato scelto di usare una numerazione insieme al nome "Foglio" anzichè lettere alfabetiche, tipo Foglioa, Fogliob, Foglioc, ecc.ecc. per vari motivi, non ultimo l'internazionalità dei numeri rispetto a lettere alfabetiche. Per cui un'istruzione che miri al foglio2 si scriverà:

  • Worksheets("Foglio2").Select

Abbiamo usato il termine Worksheets subito seguito dal NOME del foglio, posto tra parentesi e tra doppi apici. Questa è la sintassi giusta e se dimentichiamo di scriverlo così il debugger si lamenta un pochino.

E' possibile rinominare i fogli, usando il nome che ci sembrerà più appropriato, modificando il nome posto nelle "linguette", in inglese "WorkbookTabs", e quindi usare il nuovo nome, ma sempre messo tra parentesi e doppi apici. E' possibile usare la sintassi Sheets al posto di Worksheets, il risultato è lo stesso:

  • Sheets("Pippo").Select

Usare il numero del foglio.

Un foglio di lavoro fa parte dell'"Insieme" Fogli di lavoro, e come tale possiede un numero indice (index) di identificazione che lo distingue appunto da tutti gli altri fogli dell'"insieme" fogli. Questo indice parte da 1 e prosegue per quanti fogli saranno presenti nella cartella di lavoro, e si incrementa sempre, ANCHE SE ELIMINIAMO UN FOGLIO  e ne aggiungiamo altri. Questo vuol dire che : se avendo 5 fogli, eliminiamo il Foglio3, poi aggiungiamo un foglio, questo nuovo foglio non sostituisce il numero indice del Foglio3, ma diventerà il numero indice 6. Poichè purtroppo influiscono sull'assegnazione del numero indice da parte di Excel anche le modalità di inserimento (prima o dopo il foglio attivo, prima o dopo aver eliminato uno o più fogli, ecc.) per evitare di creare confusione, consiglio di verificare sempre il numero indice del foglio al quale vorremo riferirci, attraverso la consultazione dall'editor di visual basic. Vedremo come andando avanti.

E' possibile quindi usare il numero indice per riferirsi ad un foglio di lavoro, e la sua sintassi sarà questa, senza doppi apici, e fra parentesi, riferendoci ancora al Foglio2 :

  • Worksheets(2).Select    oppure:

  • Sheets(2).Select

Il risultato tra i due modi di riferirci al foglio (nome o indice) sortirà il medesimo risultato. Ma è opportuno fare qualche precisazione.

Noi possiamo inserire quanti fogli vogliamo, e modificare il loro nome rinominandolo con ciò che vorremo, ma non potremo mai variare il numero indice assegnato al nuovo foglio da Excel, neppure se il nuovo foglio lo inseriamo davanti al primo foglio. In un caso (frequente) come questo, noi lo vediamo come primo foglio, ma Excel lo identifica come numero indice 4, o quello che sarà se i fogli già presenti erano più di 3. Se quindi usassimo, con l'intenzione di riferirci al nuovo foglio, l'istruzione Sheets(1).Select, in quanto primo foglio, col piffero che Excel ce lo selezionerà. Dovremo usare il suo numero indice. Aiutiamoci con delle immagini:

 i classici tre fogli e i loro nomi  rinominiamo i fogli

 

 inseriamo un nuovo foglio davanti al primo

rinominiamo anche questo e li ordiniamo per nome

Come vediamo nell'immagine 4 abbiamo stravolto completamente l'ordine in cui erano originariamente i fogli, e a noi ci appaiono nell'ordine: il primo foglio (orazio), il secondo foglio (Paperino), ecc. Se ora volessimo usare la sintassi numero per riferirci ai fogli, creeremmo sicuramente dei casotti, ecco infatti come excel vede il loro numero indice, e lo possiamo verificare anche noi, aprendo l'editor di visual basic e controllando nella finestra "Progetto":

Dall'immagine vediamo che i fogli sono identificati da Excel con il loro numero indice (Foglio1, Foglio2, Foglio3, Foglio4) seguiti tra parentesi dal rispettivo nome del foglio. Volendo quindi identificare tramite indice il "foglioOrazio" dovremo usare:

  • Sheets(4).Select  oppure usare la sintassi che fa riferimento al nome:

  • Sheets("Orazio").Select

Il Foglio dal nome "Orazio", per essendo il primo a video, in realtà e il foglio (indice) 4.

Per evitare confusioni tra Foglio1 come numero indice e nome del foglio (Foglio1) tra parentesi, ribadiamo che il primo termine E' il termine che identifica il numero indice e tra parentesi il Nome del Foglio. Se non l'avessimo rinominati, nè spostati,  vedremmo questo:

anche se i fogli a video li vediamo così, con il Foglio4 primo tra i fogli :

 

Rinominare o Nominare i Fogli di lavoro col vba.

Sperando di aver chiarito i concetti sopra esposti, vediamo anche di capire come sia possibile rinominare i fogli tramite codice vba. Dovremo intervenire sulla proprietà Name del Foglio di lavoro, assegnando il nuovo nome, La sintassi è semplice:

Worksheets("Foglio1").Name = "nuovo nome"  'tra doppi apici in quanto il nome è una stringa.

cioè si identifica il foglio al quale cambiare il nome, e si assegna con uguale (=) il nuovo nome, per cui andrà bene anche l'identificazione del foglio dal numero anzichè dal nome, così:

Worksheets(1).Name = "nuovo nome"  'tra doppi apici in quanto il nome è una stringa.

Se poi il nuovo nome lo vorremo assegnare tramite variabili, basterà indicare i vettori da assegnare alle variabili, e concatenare le variabili al posto di "nuovo nome". Esempio, supponiamo di avere due celle, la A1 e la B1 (i vettori), in cui avremo due nomi, un nome di un agente e il nome di un mese, e vogliamo chiare appunto il foglio col nomeagente e il mese, scriveremo questa istruzione:

X = Range("A1").Value  ' e con X  si prende il nome che sarà in A1, o dove vorrete
Y = Range("B1").Value 
' e con Y si prende il secondo nome in B1, o dove vorrete
Worksheets("nomefoglio").Name = "" & X & Y & ""

Buon lavoro.

prelevato sul sito www.ennius.altervista.org