Gli oggetti Excel

    

    Gli Oggetti di Excel

    Excel e Vba, per creare e far funzionare le loro elaborazioni, utilizzano Classi e Oggetti. Diamo una definizione di entrambi per capire i concetti di programmazione ad oggetti.
    • Classe è una porzione di programma che definisce le proprietà, i metodi e gli eventi – in breve il comportamento di uno o più oggetti che verranno creati in fase di esecuzione.
    • Oggetto è un’entità che incorpora sia dati sia il codice che li elabora.. In un certo senso una Classe è una entità di progettazione mentre un Oggetto è una entità di esecuzione.
    Come le Userform, viste nella Lezione precedente, anche Microsoft Excel è formato da oggetti che incorporano proprietà, metodi ed eventi.
    La presente Lezione introduce agli oggetti più comuni e più frequentemente utilizzati in Excel VBA. I concetti da illustrare sarebbero innumerevoli, tuttavia la trattazione è volutamente stringata, in quanto è tutto ampiamente descritto nella guida in linea di Excel VBA.
    Suggerimento:
    come è già stato spiegato nel secondo paragrafo della Lezione riguardante l’ambiente di sviluppo; un metodo molto efficace per comprendere la logica di utilizzo degli oggetti appartenenti ad Excel VBA è creare delle macro e studiarne il codice Visual Basic associato. Nel caso si incontrasse un'istruzione, un oggetto o una proprietà di cui si vuole conoscere le caratteristiche, posizionarsi col cursore sulla parola interessata e premere il tasto "F1". Questo provoca l'apertura della guida in linea direttamente sull’elemento cercato. In questa Lezione vedremo gli Oggetti di Excel.

    L'oggetto Application

    Rappresenta l'intera applicazione Microsoft Excel. Esso contiene:
    • Impostazioni e opzioni per l'intera applicazione, ad esempio molte delle opzioni della finestra di dialogo Opzioni del menu Strumenti.
    • Metodi membri di Application che compiono azioni sugli oggetti membro (per esempio Calculate), eventualmente restituendo un valore (p.e. Evaluate) o un oggetto (p.e. Intersect).
    • Proprietà membri di Application che restituiscono insiemi di oggetti (p.e. Workbooks cioè l'insieme delle Cartelle di lavoro aperte), oggetti (p.e. ActiveCell la cella attiva, ActiveSheet il Foglio attivo) oppure restituiscono valori (p.e. Path che restituisce una stringa col percorso dell'applicazione)..
    Il seguente paragone dovrebbe chiarire la differenza tra Metodi e Proprietà di un oggetto:

    Ipotizziamo che il nostro oggetto sia il forno della nostra cucina. Ebbene, esso ha determinate caratteristiche: interuttore di accensone, n.ro di resistenze, termostato, grill, ventilazione etc. Noi possiamo interagire col forno accendendolo (applicazione del metodo Forno.Accendi), impostando una temperatura sul termostato (impostazione della proprietà Forno.Termostato=250), leggendo il numero di resistenze (lettura della proprietà Forno.Resistenze.Count); etc....

    Molte delle proprietà e dei metodi relativi agli oggetti più comuni di Excel, quali il foglio attivo (proprietà ActiveSheet), la cella attiva (proprietà ActiveCell), le cartelle di lavoro aperte (proprietà Workbooks), un range di celle (proprietà Range) possono essere utilizzati senza specificarne il qualificatore dell'oggetto a cui appartengono. Invece di scrivere "Application.ActiveCell.Font.Bold = True" sarà ad esempio possibile scrivere "ActiveCell.Font.Bold = True".
    Questo è possibile in quanto, per default, viene assunto come qualificatore l'oggetto parent attivo. Ciò significa che, ad esempio, Range("A1") verrà interpretato come Application.ActiveSheet.Range("A1"). Se vogliamo riferirci ad uno specifico foglio dovremo scrivre Worksheets("Foglio2").Range("A1"), che a sua volta verrebbe tradotto come Application.ActiveWorkbook.Worksheets("Foglio2").Range("A1").
    Ma, ancora, se vogliamo riferirici ad uno specifico range di uno specifico foglio di una specifca cartella aperta, dovremo scrivere p.e. Workbooks("AltraCartella").Worksheets("Foglio2").Range("A1"), interpretato a sua volta come Application.Workbooks("AltraCartella").Worksheets("Foglio2").Range("A1").

    La seguente metafora dovrebbe chiarire l'importanza della corretta attribuzione della paternità ad un oggetto:

    Abbiamo una stanza con dentro una sedia ed una scrivania con alcuni cassetti. Sulla scrivania c'è una tastiera, un mouse, nei cassetti della scrivania ci sono una penna ed una gomma. Io ed il mio fedele cagnolino di nome VBA entriamo nella stanza. Ora se io dico "VBA, portami la sedia", VBA non avrà alcun problema a portarmi la sedia. Idem se gli dico portami la tastiera. Ma se gli dico "VBA, portami la gomma" il povero VBA gira nella stanza come una trottola, ma non trova la gomma perché la gomma non "appartiene" alla stanza né alla scrivania, ma "appartiene" al cassetto della scrivania. Quindi se gli dico "VBA, prendimi la gomma dentro il cassetto della scrivania", ecco che il nostro amico VBA torna scodinzolando con la gomma tra i denti.

    Molte delle proprietà e dei metodi relativi agli oggetti più comuni di Excel, quali il foglio attivo (proprietà ActiveSheet), la cella attiva (proprietà ActiveCell), le cartelle di lavoro aperte (proprietà Workbooks), un intervallo di celle (proprietà Range) possono essere utilizzati senza specificarne il qualificatore dell'oggetto a cui appartengono. Invece di scrivere Application.ActiveCell.Font.Bold = True sarà ad esempio possibile scrivere solamente ActiveCell.Font.Bold = True Questo è possibile in quanto, per default, viene assunto come qualificatore l'oggetto parent attivo. Ciò significa che, ad esempio, Range("A1") verrà interpretato come Application.ActiveSheet.Range("A1") Se vogliamo riferirci ad uno specifico foglio dovremo scrivere: Worksheets("Foglio2").Range("A1"), che a sua volta verrebbe tradotto come: Application.ActiveWorkbook.Worksheets("Foglio2").Range("A1"). Ma, ancora, se vogliamo riferirci ad uno specifico intervallo di uno specifico foglio di una specifica cartella aperta, dovremo scrivere: Workbooks("AltraCartella").Worksheets("Foglio2").Range("A1") che a sua volta, viene interpretato come: Application.Workbooks("AltraCartella").Worksheets("Foglio2").Range("A1")

    L'insieme Workbooks

    Workbook rappresenta una cartella di lavoro di Microsoft Excel, ed è un elemento dell'insieme Workbooks. L'insieme Workbooks contiene tutti gli oggetti Workbook aperti di Microsoft Excel.
    Vediamo alcuni esempi di metodi e proprietà per la restituzione di un oggetto Workbook.
    Questo esempio chiude tutte le cartelle di lavoro aperte.
    	Workbooks.Close
    Questo esempio aggiunge una nuova cartella di lavoro vuota col metodo Add.
    	Workbooks.Add
    Questo esempio apre il file Array.xls come cartella di lavoro di sola lettura.
    	Workbooks.Open FileName:="Array.xls", ReadOnly:=True
    Questo esempio attiva la prima cartella di lavoro aperta
    	Workbooks(1).Activate
    La corrispondenza tra il numero di indice e la rispettiva cartella è determinata dall'ordine nel quale le cartelle di lavoro sono state aperte o create. Workbooks(1) è la cartella di lavoro aperta/creata per prima, mentre Workbooks(Workbooks.Count) è quella aperta/creata per ultima. L'attivazione di una cartella di lavoro non ne modifica il numero di indice. Nel calcolo del numero di indice sono comprese tutte le cartelle di lavoro, anche quelle nascoste.

    Vediamo le caratteristiche di alcune proprietà

    La proprietà Name restituisce il nome della cartella di lavoro. Non è possibile impostare il nome della cartella di lavoro utilizzando questa proprietà. Per salvare la cartella di lavoro con un nome diverso, utilizzare il metodo SaveAs. Questo esempio attiva il foglio di lavoro Foglio1 della cartella di lavoro Cogn.xls, che deve essere già aperta.
    	Workbooks("Cogn.xls").Worksheets("Foglio1").Activate
    La proprietà ActiveWorkbook restituisce la cartella di lavoro attiva. Questo esempio imposta il nome dell'autore della cartella di lavoro attiva.
    	ActiveWorkbook.Author = "Mauro Cognolato"
    Per definire le routine di evento riguardanti la cartella Excel attiva esiste un modulo di codice predefinito denominato "ThisWorkbook", visibile in finestra di progetto. La casella degli oggetti contiene l’oggetto Workbook, mentre la casella eventi contiene tutti gli eventi associati a Workbook.
    Esempio, proviamo ad inserire la routine seguente nel modulo di codice "ThisWorkBook" della cartella di lavoro Ciao.xls, utilizzata nel capitolo precedente.
    	Private Sub Workbook_Open()
    	    FrmCiao.show
    	End Sub
    La routine attiva la UserForm "FrmCiao" quando viene aperto il documento Excel.
    Marius44(A.M.)-Albatros54(A.G.) © 2015