In questo articolo ti illustro come è possibile iniziare a fare riferimento agli oggetti in VBA con il linguaggio VBA Excel. Scopri come far riferimento agli oggetti VBA Excel.
Introduzione ai riferimenti agli oggetti VBA
Come è possibile far riferimento a un oggetto in VBA?
Sapere come fare riferimento agli oggetti durante la scrittura del codice VBA è essenziale!
Questo perché, se vuoi lavorare con un particolare oggetto in VBA, devi prima identificarlo.
È possibile identificare gli oggetti in due modi.
- Riferimento completamente qualificato
- Riferimento semplificato
VBA Excel: riferimenti completamente qualificati e collegamenti di oggetti VBA
Iniziamo dando un’occhiata a come fare riferimento a un oggetto passando attraverso l’intera gerarchia di oggetti VBA Excel. Questo è noto come riferimento completo in quanto si comunica a Excel esattamente con quale oggetto VBA si vuol lavorare facendo riferimento a tutti i suoi oggetti “genitori” (in inglese parent).
Di solito è possibile semplificare i riferimenti completi. Tuttavia, prima è importante imparare a conoscere come funzionano i riferimenti completi.
I riferimenti completi sono la base dei riferimenti agli oggetti VBA e, in pratica, li userai la maggior parte del tempo. Inoltre, sono utili per capire meglio il codice VBA contenuto nelle tue macro Excel.
L’oggetto che si trova al vertice della gerarchia degli oggetti VBA Excel è l’oggetto Application.
Fare riferimento a questo oggetto è molto semplice.
Nell’Editor VB, si fa riferimento ad esso digitando il seguente codice:
Da quel momento in poi, è necessario iniziare a spostarsi lungo la gerarchia utilizzando l’operatore punto (.).
In altre parole, puoi collegare ogni oggetto VBA a quello precedente (l’oggetto principale) usando un punto (.).
I punti (.) vengono utilizzati per collegare e fare riferimento ai membri del modello di oggetti VBA di Excel “dall’alto verso il basso“.
Passiamo alla pratica.
Riprendiamo l’esempio della gerarchia di oggetti VBA di Excel.
Supponiamo di voler fare riferimento a un oggetto Range.
Come mostrato nell’immagine, questo oggetto si trova nella parte inferiore della gerarchia utilizzata nell’esempio. Ci sono 2 oggetti VBA e 3 passaggi tra l’oggetto Application e l’oggetto Range.
Ora sai come connettere i diversi oggetti tra loro. Semplicemente utilizzando con un punto (.).
Pertanto puoi fare riferimento a un oggetto Range usando la seguente struttura di base:
Possiamo rappresentare graficamente quanto appena spiegato.
Facile, non ti pare?
Questo è, tuttavia, solo un esempio generale. Noterai che questa struttura di base NON sta identificando un singolo oggetto VBA. È infatti necessario fare riferimento ad un oggetto particolare all’interno di una collezione. Ecco un esempio:
VBA Excel: come fare riferimento ad un oggetto VBA di una collezione
Il più delle volte, lavorerai con un particolare oggetto VBA di una collezione.
Nota che puoi anche lavorare con una collezione nel suo insieme. In effetti, la capacità di farlo è uno dei vantaggi delle collezioni.
Tuttavia, ora concentriamoci su come fare riferimento a un oggetto di una collezione.
Abbiamo a disposizione le seguenti opzioni:
- Utilizzare il nome dell’oggetto VBA
- Utilizzare un numero indice
1 | Utilizzare il nome dell’oggetto VBA
In questo caso, la sintassi che è necessario utilizzare per fare riferimento a un oggetto è la seguente:
NOTA
Non dimenticare le virgolette quando utilizzi questo metodo di riferimento agli oggetti VBA.
Se non inserisci le virgolette, Excel capisce che il nome dell’oggetto VBA è un nome di variabile.
Pertanto, non sarà in grado di identificare l’oggetto che desideri.
Ad esempio, se stai lavorando con una cartella di lavoro di Excel che contiene tre fogli di lavoro e vuoi lavorare con il Foglio1, puoi utilizzare uno dei seguenti metodi:
o in alternativa …
2 | Utilizzare un numero indice
Se scegli di utilizzare questa opzione, per far riferimento a un oggetto VBA, la sintassi da utilizzare è la seguente:
Questa struttura è sostanzialmente la stessa di quella precedente con due differenze:
- Invece di usare il nome dell’oggetto VBA, ci si riferisce ad esso usando il suo numero di indice.
- Non si usano le virgolette all’interno delle parentesi, solo un numero.
Riprendendo l’esempio precedente, per lavorare con il Foglio1, puoi utilizzare una delle due seguenti opzioni:
o in alternativa …
Ora che sai come fare riferimento a un singolo oggetto VBA all’interno di una collezione, torniamo al riferimento completo utilizzato in precedenza:
Supponiamo ora che l’oggetto con cui vogliamo lavorare sia la cella A1 del foglio di lavoro Foglio1 all’interno della cartella di lavoro chiamata Cartel1. Come possiamo scrivere il riferimento completo in questo caso?
Vediamo i due casi.
Se utilizzi il nome dell’oggetto per fare riferimento a ciascuno dei singoli oggetti VBA, il riferimento completo per questa cella è il seguente:
In alternativa, se utilizzi il numero indice, il riferimento completo è il seguente:
Come puoi ben immaginare, se dovessi fare riferimento a ogni singolo oggetto usando un riferimento completo, il tuo codice VBA diventerebbe piuttosto lungo molto rapidamente. Dal punto di vista della digitazione, questo potrebbe risultare un po’ fastidioso. Inoltre, e forse ancora più importante, questi lunghissimi pezzi di codice VBA possono risultare difficili da leggere.
Esistono alcuni modi con cui è possibile semplificare i riferimenti agli oggetti, rendendo il codice VBA molto più breve.
Diamo un’occhiata ad alcuni di questi metodi.
VBA Excel: semplificare i riferimenti agli oggetti
La possibilità di semplificare un riferimento a un oggetto VBA presenta diversi vantaggi. I vantaggi principali son due:
- puoi abbreviare il tuo codice VBA
- il tuo codice è più facile da leggere
Il motivo principale per cui è possibile semplificare i riferimenti agli oggetti completi è che il modello di oggetti VBA di Excel ha alcuni oggetti predefiniti.
Infatti, Excel, a meno che non si immetta qualcosa di diverso, fa riferimento per impostazione predefinita a questi oggetti predefiniti.
Diamo ora un’occhiata ai metodi che è possibile utilizzare per semplificare i riferimenti agli oggetti completi.
1 | Oggetto Application
L’oggetto VBA predefinito principale è l’oggetto Application. Excel assume come predefinito questo oggetto a prescindere da dove si trova effettivamente il tuo codice VBA.
Quando crei le macro, si presume che lavorerai con Excel. In altre parole, Excel presume che tu stia lavorando con l’oggetto Application. Pertanto, come ci si può aspettare, in genere si può omettere questo oggetto VBA di Excel dai riferimenti dell’oggetto. Specificare l’oggetto Application ha senso solo in alcuni casi.
Ora il codice precedentemente utilizzato nel nostro esempio diventa così:
2 | Cartella di lavoro e foglio di lavoro attivi
Il secondo gruppo di oggetti predefiniti che è possibile utilizzare per semplificare i riferimenti agli oggetti completi si applica quando si lavora all’interno di un modulo standard. All’interno dell’Editor VB, in genere è possibile trovare i moduli standard nella finestra del progetto sotto Moduli.
In questi casi, oltre a presupporre che si sta lavorando con l’oggetto Application, Excel presume che si stia lavorando con la cartella di lavoro attiva.
Pertanto, la cartella di lavoro Excel su cui si desidera lavorare è la cartella di lavoro attiva, è possibile omettere quella parte del riferimento all’oggetto VBA. Continuando con l’esempio precedente, il nostro codice può essere abbreviato come segue:
Infine, se sei sicuro che il foglio di lavoro di Excel con cui vuoi lavorare è il foglio di lavoro attivo corrente, puoi anche omettere quella parte del riferimento all’oggetto VBA. La dichiarazione può quindi essere abbreviata ulteriormente:
VBA Excel: i pericoli della semplificazione
Sulla base di quanto appena illustrato ne derivano alcune considerazioni.
In particolare, il secondo metodo di semplificazione descritto in precedenza si basa sull’identificazione corretta della cartella di lavoro attiva e del foglio di lavoro attivo. Se commetti un errore, ad esempio, pensando che il Foglio di lavoro attivo sia il Foglio1 quando in realtà è il Foglio2, dovrai affrontare dei problemi.
I problemi più probabili che incontrerai in questi casi sono che Excel:
- restituisce un messaggio di errore.
- restituisce un risultato errato.
- esegue un’azione errata che non è possibile annullare.
Un altro possibile svantaggio della semplificazione dei riferimenti agli oggetti completi è legato alla velocità di esecuzione. Ciò accade, ad esempio, se stai lavorando con una particolare macro che funziona con diversi fogli di lavoro di Excel. In tal caso, devi passare attraverso tutti loro per attivarli. Inutile dire che non è molto efficiente.
Considerando quanto detto sopra, assicurati di utilizzare questi metodi di semplificazione solo quando è appropriato. Cosa ancora più importante, ricorda che non devi semplificare i riferimenti pienamente qualificati in ogni momento. Infatti, spesso è meglio qualificare pienamente i riferimenti agli oggetti VBA.
Alcuni esperti di Excel, sostengono di NON poter fare a meno di utilizzare alcuni degli oggetti VBA predefiniti tranne alcune eccezioni. Una delle principali eccezioni, fa riferimento all’oggetto predefinito Application. Questo particolare oggetto VBA è raramente incluso nel codice VBA, anche se ci sono alcuni casi in cui è necessario fare riferimento all’applicazione.
In altre parole, avere una profonda conoscenza del modello di oggetti VBA di Excel e l’utilizzo di riferimenti completi ha due vantaggi principali:
- Affidabilità
- Precisione
Un’alternativa ai riferimenti pienamente qualificanti o alla loro semplificazione, è l’uso dell’istruzione With … End With. Questa istruzione semplifica la sintassi delle tue macro eseguendo diverse istruzioni che fanno riferimento allo stesso oggetto VBA.
Allo stesso tempo, grazie alla sua struttura, questa istruzione ti permette di mantenere i riferimenti agli oggetti completamente qualificati.
Osserviamo un semplice esempio con l’utilizzo dell’istruzione With … End With.
Oltre ai pericoli dell’utilizzo di questa semplificazione, precedentemente illustrati, c’è un ulteriore aspetto da considerare.
I due presupposti che ho elencato nel secondo metodo di semplificazione sono validi solo finché ci si trova in un modulo standard.
Pertanto, è necessario evitare di basarsi su questi presupposti quando si lavora in un altro tipo di modulo.
Ad esempio, se si sta lavorando nel modulo ThisWorkbook e si omette il riferimento all’oggetto Workbook, Excel presuppone che vuoi fare riferimento alla cartella di lavoro di Excel in cui si trova il codice.
Se ti trovi all’interno di un modulo di foglio, ad esempio il modulo Foglio1 e nel tuo codice non fai riferimento a un foglio specifico, il valore predefinito per Excel è il foglio che contiene il codice VBA.
Conclusioni
Conoscere il modello a oggetti VBA di Excel è essenziale ed estremamente importante. Non puoi ignorare questo argomento se desideri scrivere delle macro con Excel.
A causa della complessità e dell’estensione, il modello a oggetti VBA di Excel non è l’argomento più semplice da comprendere. Tuttavia, con un po’ di pratica e di studio, potrai padroneggiare l’argomento. Questo ti pone sulla buona strada per creare potenti macro Excel che ti consentiranno di aumentare la tua produttività e l’efficienza quando lavori con Excel e il VBA.
Ora, se sei hai letto questo articolo e quello precedente, non solo sai cosa è il modello a oggetti VBA di Excel, ma sei in grado di iniziare a creare riferimenti a oggetti in VBA.
Questa capacità di creare riferimenti agli oggetti VBA è ciò che consente di dire a Excel con quale oggetto si desidera lavorare e manipolare. Questa è un’abilità essenziale che ora potrai aggiungere alla tua cassetta degli strumenti di Excel.
Vuoi imparare a utilizzare il linguaggio Excel VBA?
Basta con i lavori noiosi e ripetitivi! Grazie al VBA puoi far lavorare Excel al tuo posto!
Ho registrato per te un corso interamente dedicato alle Macro e al VBA.
Attraverso degli esempi pratici, ti introdurrò, al mondo delle Macro di Excel illustrandoti tutto il potenziale per automatizzare le tue attività di lavoro quotidiane.
Cosa aspetti?
Sfrutta tutto il potenziale di Excel con il corso Macro e VBA!
Gentilissimo Dott. Damiano. nelle dichiarazioni dico dim sh1 as che farà riferimento al foglio1 che però ho nominato a piè del foglio Archivio1
e con dim sh2 farà riferimento al foglio2 sui quali sh1 e sh2 dovrò usare sh1.activate e sh2.activate
ho molta confusione potrebbe scrivere queste righe per capirci.
Per cortesia La ringrazio
Giorgio
Ciao Giorgio,
ecco il codice che puoi usare per dichiarare i fogli ... fare l'assegnazione e successivamente attivare i fogli:
Dim sh1 As Worksheet
Set sh1 = ThisWorkbook.Worksheets("Archivio1")
Dim sh2 As Worksheet
Set sh2 = ThisWorkbook.Worksheets("foglio2")
sh1.Activate
sh2.Activate