Excel VBA: Hierarchy e Collections

Vediamo nel dettaglio la Gerarchia (Hierarchy), le Collections, gli oggetti Workbook e Worksheet.

Sono nozioni fondamentali per padroneggiare il linguaggio VBA.

La Gerarchia VBA

Un oggetto puo' contenere un altro oggetto che a sua volta puo' contenere un altro oggetto con alcune determinate proprieta' e cosi via. Abbiamo quandi a che fare con una Gerarchia. la Gerarchia parte da un primo oggetto fondamentale che li contiene tutti: e' l'applicativo Excel che viene denominato Application.

 L'oggetto Application contiene fondamentalmente tutti file che posso creare, i Workbook. Un Workbook contiene tutti i fogli di lavoro che posso creare, ovvero i Worksheet, i quali contengono tutti gli oggetti di cui sono composti, esempio l'oggetto Range che individua le celle.


Supponiamo quindi di creare un file excel chiamato "esempio" che contiene tre fogli di lavoro: "Database", "Calcolo" e "Report".

 Poi mi pongo nell'ambiente VBA del foglio "Database" e in una routine vba scrivo Range("A1") = "ciao mondo". In realta' quello che scrivo ecorrisponde a  qualcosa di questo tipo


Application.Workbooks("esempio").Worksheets(1).Range("A1").Value = "ciao mondo"


Non devo scrivere tutto quanto solo perche' mi sono posto nell'ambiente di lavoro del foglio Database, ma se voglio accedere ad altri foglio o altri workbook devo avere chiaro il concetto di Gerarchia.


Le collections

Workbooks e Worksheets sono plurali. Questo perche' sono denomiati Collections. Workbooks contiene tutti i file Excel che sono stati aperti, e Worksheets contiene tutti i fogli di lavoro di un dato Workbook. Ci sono 3 modi per riferirsi ad un worksheet contenuto in un workbook:

1) Utilizzando il numero di indice (Index Number) :

Worksheets(1).Range("A1").Value = "ciao mondo"

2) Utilizzando il nome del worksheet

Worksheets("Database").Range("A1").Value = "ciao mondo"

3) Utilizzando il nome in codice (Codename)

Foglio1.Range("A1").Value = "ciao mondo"



Index Number, Sheet Name, CodeName

Se apriamo la "gestione progetti" del VBA Editor possiamo accedere a queste informazioni.

 L' Index Number e' il numero dello sheet contando dall'alto, il Codename e' il nome a sinistra e il nome del worksheet e' mostrato tra parentesi tonde.

Nella situazione di "default" Excel assegna allo sheet una notazione di questo tipo: Per il CodeName: "FoglioN ", per lo SheetName "FoglioN" dove N e' un indice corrispondente all'ordine di creazione dei vari fogli (ma non e' il l 'Index Number!):  Avro' dunque  Foglio1(Foglio1). Quindi
il nome del worksheet (Sheet Name) lo posso cambiare dall'etichetta del foglio di lavoro e potrei riportarmi a questa situazione  Foglio1(Database). Quindi potrei cambiare il Codename in "Nuovo"  dalla  finestra proprieta' dell'editor VBA riportandomi ad esempio a questa situazione: Nuovo(Database), ma l' Index Number rimane lo stesso ( "1" in questo caso) a meno che non vado a cancellare lo sheet.

Attenzione a non confondere la numerazione dei fogli di lavoro con l'Index Number!  Ad esempio

Foglio1(Foglio1)
Foglio2(Foglio2)
Foglio3(Foglio3)

Nella situazione di cui sopra abbiamo corrispondenza tra la numerazione dei fogli e l'Index Number.  Ma se vado a cancellare il Foglio 2 ottengo


Foglio1(Foglio1)
Foglio3(Foglio3)

Adesso l'Index Number del Foglio1 e' sempre 1, ma l'Index Number del Foglio 3 e' diventato "2".



Properties e Methods

Durante la scrittura del codice delle routine che abbiamo definito nelle scorse sessioni ci saremo accorti che ad alcune parole chiave corrisponde una certa azione, mentre altre sembrano piuttosto risportare delle informazioni di un dato oggetto. Ad esempio:

Worksheets.add  aggiunge un nuovo sheet, workbook.open apre un work sheet

mentre ad esempio

Worksheets.count riporta il numero degli sheets presenti nel Workbook.

Allora le Properties, o Proprieta' riportano un valore descrittivo di un certo oggetto, cioe' riportano il valore di un qualcosa che esiste gia', appunto una proprieta',  mentre ai  Methods (Metodi) corrisponde invece una certa azione nell'ambito di una Collection (esempio aggiungere un nuovo sheet o aprire un nuovo Workbook).


sessione successiva: Excel VBA: salvare file