Discussione: Corso VBA
Visualizza messaggio singolo
Vecchio 29-03-2016, 21.02.11   #83
Alexsandra
Senior Member
WT Expert
 
L'avatar di Alexsandra
 
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.208
Alexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raro
#3

Oggetti e Routine in VBA



Abbiamo visto che il VBA è un linguaggio di programmazione orientato agli oggetti e consente di gestire le applicazioni con semplicità in quanto la Programmazione ad Oggetti è un sistema di organizzazione del codice di un programma mediante raggruppamento all'interno di oggetti, ovvero singoli elementi che presentano Proprietà e Metodi. In pratica non è più il programma a gestire il flusso di istruzioni, ma sono gli oggetti che interagiscono tra di loro intervenendo sulle azioni del programma.

Riferendoci alla nostra cartella di lavoro possiamo dire che essa è costituita da oggetti di varia natura, come gli oggetti grafici o i controlli (finestre di dialogo, pulsanti ecc.) incollati su un foglio, ma non è questa la peculiarità di un foglio elettronico la cui ossatura è costituita, partendo dal livello più basso, da:
  • celle
  • intervalli
  • fogli
  • cartelle di lavoro
Ricordiamo inoltre che se osserviamo questo insieme di oggetti come un albero genealogico il capostipite, o il culmine, spetta all'oggetto, denominato Application, che rappresenta, tutti gli Oggetti di Excel. Si tratta appunto di Excel stesso. Proseguendo nella discesa genealogica troveremo i seguenti oggetti:
  • L'oggetto Workbook : Che è la cartella di lavoro (cioè il nostro file)
  • L'oggetto Worksheet : Che è il foglio di lavoro (Foglio1, Foglio2 ecc...)
  • L'oggetto Range : Che è un intervallo di celle (A1: B12, C1:D12, ecc...)
Sintatticamente possiamo affermare che ciascun oggetto fa parte di una famiglia o classe e l'accesso al singolo membro di ciascuna classe si effettua attraverso metodi, pluralistici, cioè da una pluralità di metodi che collaborano e interagiscono con i vari oggetti in maniera omogenea e ai quali corrispondono insiemi di oggetti quali :Workbooks, Worksheet, Range e Cells, inoltre i membri più elevati si possono omettere nel caso che il soggetto sia attivo; vedremo meglio questo passaggio fra poche righe.

Fin qui abbiamo delineato i componenti principali cercando di esporre come vengono interpretati dal Visual Basic applicato al foglio elettronico, ma l'obiettivo vero è quello di focalizzare gli oggetti che formano l'ossatura, il nucleo di un foglio di lavoro, al cui centro, vi sono intervalli e celle con il loro contenuto di dati da elaborare o formule e il loro inquadramento nel mondo Visual Basic è fondamentale e aiuterà a capire meglio tutto il resto, vediamo di interpretare quanto appena affermato usando il Visual Basic. Con queste sintassi

Workbooks("prova.xls") e Worksheets("Foglio1")

Si individuano rispettivamente la cartella e il foglio di lavoro (notare i loro nomi virgolettati dentro le parentesi), ma dobbiamo però tenere presente che un elemento può anche venire individuato tramite un indice, il quale può essere o il numero di ordine o il nome fra virgolette, per capire meglio il concetto di indice possiamo dire che la sintassi Workbooks(2) e Workbooks("prova.xls") puntano entrambe alla stessa cartella prva.xls a patto che questa sia la seconda fra quelle aperte contemporaneamente da Excel.

Infatti se abbiamo solo la cartella prova.xls aperta, la sintassi esatta diventa Workbooks(1). A questo punto è abbastanza chiaro che l'indice che usiamo fra parentesi nell'oggetto Workbooks varia ed è strettamente legato al numero di cartelle aperte nel momento dell'esecuzione di questa istruzione, pertanto possiamo far notare che è possibile scrivere questa istruzione in tre diversi modi:
  • Application.Workbooks(1).Worksheets(1).Range("A1:B 10")
  • Application.Workbooks("prova.xls").Worksheets(1 ).Range("A1:B10")
  • Application.Workbooks("prova.xls").Worksheets(" Foglio1").Range("A1:B10")
Ricordate che poco sopra abbiamo però affermato che i membri più elevati si possono omettere quando sono attivi, per cui:
  • Se abbiamo Excel aperto
  • Se la cartella prova.xls è aperta
  • Se infine ci troviamo nel Foglio1
Possiamo ridurre tutto il listato ad un semplice Range("A1:B10"), in caso contrario credo che sia abbastanza chiaro come agire usando gli indici per individuare il nostro intervallo (o Range). Si deve inoltre prestare attenzione alle proprietà "pluralistiche" che poco sopra abbiamo citato: le prime volte è facile scordarsi del plurale, scrivendo Workbook("prova.xls") anziché Workbooks("prova.xls") oppure Worksheet("Foglio1") invece di Worksheets("Foglio1").


Le routine
Finora abbiamo usato diverse volte il termine Routine, vediamo ora di capire cosa sia. Una routine (o procedura) è definita come un insieme di codici che permettono di eseguire un'azione ed è generalmente di due tipi: Public o Private.
  • Public è quando ha validità per l’intero progetto
  • Private ha validità solo all’interno del Modulo sul quale e stata scritta.
Una routine inizia con la dichiarazione della parola chiave Sub, seguita da un nome e poi seguita da una serie di parentesi e si conclude con una dichiarazione End Sub che può essere digitato, ma appare automaticamente dopo aver digitato il nome della procedura seguito dalla pressione del tasto Invio per andare alla riga successiva. Il codice VBA o le dichiarazioni sono inseriti in mezzo tra le due dichiarazioni

Codice:
Public Sub CommandButton1_Click()
altro Codice ………..
End Sub

Come eseguire una routine
Ci sono molti modi per eseguire una macro, possiamo utilizzare la finestra di dialogo macro, o il tasto di scelta rapida, o in VBE o assegnando la macro a un oggetto. La finestra di dialogo macro è raggiungibile dalla scheda Visualizza della barra multifunzione, cliccando su macro e poi su Visualizza macro che aprirà la finestra di dialogo macro, in cui si deve selezionare il nome della macro e cliccare sul pulsante Esegui per eseguire la Sub/macro.

Fig. 1
Fig. 2

È inoltre possibile aprire la finestra di dialogo macro facendo clic su Macro nel gruppo Codice della scheda Sviluppo sulla barra multifunzione e scegliere Visual Basic Editor

Fig. 3
  • In Visual Basic Editor, si deve fare clic all'interno della sub e premere F5 (o fare clic su Esegui nel barra dei menu e quindi fare clic su Esegui Sub/UserForm).
  • Oppure, sempre in Visual Basic Editor, si deve fare clic su Strumenti nella barra dei menu, quindi fare clic su macro che apre la finestra di dialogo Macro. Nella finestra di dialogo Macro, selezionare il nome della macro e fare clic su Esegui per eseguire la macro.
Fig. 4

Un buon modo per eseguire una routine (o macro) potrebbe essere quella di fare clic su un pulsante accompagnato da un testo esplicativo posto sul foglio di lavoro, per questo è necessario assegnare la macro a un oggetto, forma, grafico o controllo. È possibile assegnare una macro a qualsiasi controllo agendo dalla scheda Sviluppo sulla barra multifunzione, cliccando su Inserisci nel gruppo Controlli, selezionare e fare clic sul pulsante nei controlli modulo e quindi fare clic sul foglio di lavoro in cui si desidera posizionarlo nell'angolo superiore sinistro del pulsante (è possibile spostare e ridimensionare in seguito).

Fig. 5

Successivamente cliccando col destro del mouse sul pulsante e dal menu a discesa che compare selezionare Assegna macro e si apre la finestra di dialogo Assegna macro dal quale è possibile selezionare e assegnare una macro all'oggetto disegnato.

Fig. 6

E’ possibile assegnare macro a qualsiasi oggetto, forma, immagine, grafico etc. inserito nel foglio di lavoro. Nella scheda Inserisci della barra multifunzione, è possibile inserire un oggetto, forma, immagine, elemento grafico, Tabella, Casella di testo, WordArt, etc. nel foglio di lavoro.
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato