fbpx

VBA Tutorial Parte 8: il modello a oggetti di Excel

Cosa sono gli oggetti di Excel?

Il termine Oggetti di Excel (collettivamente denominato Modello a oggetti di Excel) si riferisce alle entità che compongono una cartella di lavoro di Excel, come fogli di lavoro, righe, colonne, intervalli di celle e la cartella di lavoro stessa di Excel.

Ogni oggetto in Excel ha un numero di Proprietà, che sono archiviate come parte di quell’oggetto. Ad esempio, le proprietà di un foglio di lavoro di Excel includono il nome del foglio di lavoro, la protezione, la proprietà Visible, l’area di scorrimento, ecc. Pertanto, se durante l’esecuzione di una macro volessimo nascondere un foglio di lavoro di Excel, potremmo farlo accedendo all’oggetto Worksheet, e modificare la proprietà ‘Visibile’.

Excel VBA ha un tipo speciale di oggetto, chiamato Collection. Come suggerisce il nome, una Collection fa riferimento a un gruppo di oggetti di Excel. Ad esempio, la Collection ‘Rows’ è un oggetto che contiene tutte le righe di un foglio di lavoro.

 

Accedere agli oggetti di Excel

È possibile accedere agli oggetti principali di Excel (direttamente o indirettamente) dall’oggetto ‘Workbooks’, che è una collection di tutte le cartelle di lavoro attualmente aperte. Ogni oggetto ‘Workbook’ contiene l’oggetto ‘Sheets’ (costituito da tutti i fogli di lavoro e i fogli grafici della cartella di lavoro) e, a sua volta, ogni oggetto ‘Sheet’ contiene un oggetto ‘Rows’ (costituito da tutte le righe del foglio di lavoro) e un oggetto ‘Columns’ (costituito da tutte le colonne del foglio di lavoro), ecc.

Nella tabella seguente sono elencati alcuni degli oggetti Excel più comunemente usati. Per un elenco più completo degli oggetti VBA di Excel, visita il sito Web per sviluppatori di Microsoft Office.

OggettoDescrizione
ApplicationL'applicazione Excel corrente.
WorkbooksL'oggetto Workbooks è una collection di tutte le cartelle di lavoro di Excel aperte nell'applicazione Excel corrente.

Una singola cartella di lavoro può essere estratta dall'oggetto Workbooks utilizzando il numero di indice della cartella di lavoro oppure il suo nome (ad esempio Workbooks(1) o Workbooks("Cartel1")).
WorkbookÈ possibile accedere a un oggetto Workbook dalla collection Workbooks utilizzando il numero di indice della cartella di lavoro o il suo nome (ad esempio Workbooks(1) o Workbooks("Cartel1")). Puoi anche usare 'ActiveWorkbook' per accedere alla cartella di lavoro attiva.

Dall'oggetto Workbook è possibile accedere all'oggetto Sheets, che è una collection di tutti i fogli (fogli di lavoro e fogli grafici) della cartella di lavoro e inoltre è possibile accedere all'oggetto Worksheets, che è una collection di tutti i fogli di lavoro della cartella di lavoro .
SheetsL'oggetto Sheets è una collection di tutti i fogli di una cartella di lavoro. Questi fogli possono essere fogli di lavoro o grafici. È possibile estrarre un singolo foglio dall'oggetto Sheets utilizzando il numero di indice o il nome del singolo foglio (ovvero Sheets(1) o Sheets("Foglio1")).
WorksheetsL'oggetto Worksheets è una collection di tutti i fogli di lavoro in una cartella di lavoro (vale a dire tutti i fogli, tranne i fogli grafici). Un singolo foglio di lavoro può essere estratto dall'oggetto Worksheets utilizzando il suo numero di indice o il suo nome (ad esempio Worksheets(1) o Worksheets("Foglio1")).
WorksheetÈ possibile accedere a un oggetto Worksheet dagli oggetti Sheets o Worksheets utilizzando il numero di indice del Foglio o il suo nome (ad es. Sheets(1), Worksheets(1), Sheets("Foglio1") o Worksheets("Foglio1")). Puoi anche usare 'ActiveSheet' per accedere al foglio attivo.

Dall'oggetto Worksheet è possibile accedere agli oggetti Rows e Columns, che sono collection di oggetti Range relativi alle Righe e alle Colonne del foglio di lavoro. È inoltre possibile accedere a una singola cella o a qualsiasi intervallo di celle contigue nel foglio di lavoro.
RowsL'oggetto Rows è una collection di tutte le righe di un foglio di lavoro. È possibile accedere a un oggetto Range costituito da una singola riga del foglio di lavoro utilizzando un numero di indice (ovvero Rows(1))
ColumnsL'oggetto Columns è una collection di tutte le colonne di un foglio di lavoro. È possibile accedere a un oggetto Range costituito da una singola colonna del foglio di lavoro utilizzando un numero indice (ad es. Columns(1))
RangeL'oggetto Range rappresenta un numero qualsiasi di celle contigue in un foglio di lavoro. Può trattarsi di una sola cella o di tutte le celle del foglio di lavoro.

Un intervallo costituito da una sola cella può essere restituito da un foglio di lavoro, utilizzando la proprietà Cells (ovvero Worksheet.Cells(1,1)).

In alternativa, è possibile fare riferimento a un intervallo specificando un intervallo di celle o una cella di inizio e fine (ad es. Worksheet.Range("A1:B10") OR Worksheet.Range("A1", "B10") OR Worksheet.Range(Cells(1,1), Cells(10,2))).

Nota che se il secondo riferimento di cella viene omesso dall'intervallo (ad es. Worksheet.Range("A1") oppure Worksheet.Range(Cells(1,1)), questo restituirà un intervallo costituito da una sola cella.

 

La tabella qua sopra mostra come sia possibile accedere agli oggetti Excel tramite oggetti ‘parent’. Ad esempio, un intervallo di celle può essere referenziato dall’espressione:

Workbooks("WB1").Worksheets("WS1").Range("A1:B10")

 

Assegnare un oggetto a una variabile

Un altro punto da notare, quando si lavora con gli oggetti di Excel è che, quando un oggetto viene assegnato a una variabile nel codice vba, è necessario utilizzare la parola chiave Set come segue:

Dim DataWb As Workbook
Set DataWb = Workbooks("Data.xlsx") 

 

L’oggetto attivo

In qualsiasi momento, Excel avrà una cartella di lavoro attiva, che è la cartella di lavoro attualmente selezionata. Allo stesso modo, ci saranno un foglio di lavoro attivo e un intervallo attivo, ecc.

È possibile fare riferimento alla cartella o al foglio di lavoro attivo, nel codice vba come ActiveWorkbook o ActiveSheet, e è possibile accedere all’intervallo attivo facendo riferimento a Selection.

Se, nel tuo codice VBA, fai riferimento a un foglio di lavoro, senza fare riferimento a una cartella di lavoro specifica, Excel passa automaticamente alla cartella di lavoro attiva. Allo stesso modo, se si fa riferimento a un intervallo, senza fare riferimento a una cartella di lavoro o a un foglio di lavoro specifici, Excel utilizza automaticamente il foglio di lavoro attivo nella cartella di lavoro attiva.

Pertanto, se si desidera fare riferimento all’intervallo A1:B10 sul foglio di lavoro attivo, all’interno della cartella di lavoro attiva, è possibile semplicemente digitare:

Range("A1:B10")

 

Modificare l’oggetto attivo

Se, durante l’esecuzione del codice, si desidera modificare la cartella di lavoro, il foglio di lavoro, l’intervallo, ecc. attivi, ciò può essere fatto utilizzando i metodi ‘Activate’ o ‘Select’ come segue:

Workbooks("Cartel1.xlsm").Activate
Worksheets("Data").Select
Range("A1", "B10").Select

 

Metodi oggetto come i metodi ‘Activate’ o ‘Select’ usati sopra, sono discussi più dettagliatamente di seguito.

 

Le Proprietà degli oggetti

Agli oggetti VBA sono associate proprietà correlate. Ad esempio, l’oggetto Workbook ha le proprietà ‘Name’, ‘RevisionNumber’, ‘Sheets’ e molte altre. È possibile accedere a queste proprietà facendo riferimento al nome dell’oggetto seguito da un punto e quindi dal nome della proprietà. Ad esempio, è possibile accedere al nome della cartella di lavoro attiva facendo riferimento a ActiveWorkbook.Name. Pertanto, per assegnare il nome della cartella di lavoro attiva alla variabile wbName, è possibile utilizzare il seguente codice:

Dim wbName As String
wbName = ActiveWorkbook.Name 

 

In precedenza abbiamo illustrato come utilizzare l’oggetto Workbook per accedere a un foglio di lavoro usando il comando:

Workbooks("WB1").Worksheets("WS1")

 

Questo perché la collection Worksheets è una proprietà dell’oggetto Workbook.

Alcune proprietà dell’oggetto sono di sola lettura, il che significa che non è possibile modificarne i valori. Comunque, è possibile modificare il valore di alcune proprietà dell’oggetto. Ad esempio, se si desidera modificare il nome del foglio attivo in ‘il mio foglio di lavoro’, ciò potrebbe essere fatto semplicemente assegnando il nome ‘il mio foglio di lavoro’ alla proprietà ‘Name’ del foglio attivo, come segue:

 
ActiveSheet.Name = "il mio foglio di lavoro"

 

I Metodi degli oggetti

Gli oggetti VBA hanno anche metodi che eseguono azioni specifiche. I metodi oggetto sono procedure associate a un tipo di oggetto specifico. Ad esempio, l’oggetto Workbook ha i metodi ‘Activate’, ‘Close’, ‘Save’ e molti altri.

Un metodo oggetto può essere chiamato facendo riferimento al nome dell’oggetto seguito da un punto e quindi dal nome del metodo. Ad esempio, la cartella di lavoro attiva può essere salvata utilizzando il codice:

ActiveWorkbook.Save 

 

Come qualsiasi altra procedura, i metodi possono avere argomenti da fornire quando viene chiamato il metodo. Ad esempio, il metodo ‘Close’ della cartella di lavoro ha tre argomenti opzionali che vengono utilizzati per fornire informazioni al metodo, ad esempio se la cartella di lavoro deve essere salvata prima della chiusura, ecc.

Gli argomenti del metodo vengono forniti al metodo facendo seguire la chiamata al metodo con i valori degli argomenti, separati da virgole. Ad esempio, se si desidera salvare la cartella di lavoro attiva come file .csv chiamato ‘Cartel2’, si chiamerà il metodo SaveAs con l’argomento Filename impostato su ‘Cartel2’ e l’argomento FileFormat impostato su xlCSV:

ActiveWorkbook.SaveAs  "Cartel2",  xlCSV 

 

Per rendere più leggibile il codice, è possibile utilizzare argomenti denominati quando si chiama un metodo. In questo caso, si digita il nome dell’argomento seguito dall’operatore di assegnazione := e quindi il valore. Pertanto, la chiamata di cui sopra al metodo SaveAs della cartella di lavoro potrebbe essere scritta come:

ActiveWorkbook.SaveAs  Filename:="Book2",  [FileFormat]:=xlCSV

 

Un elenco degli oggetti di Excel, con le loro proprietà e metodi sono forniti nel Visualizzatore oggetti all’interno dell’Editor di Visual Basic. Per visualizzarlo, basta premere F2 dall’interno dell’editor di Visual Basic.

 

Esempi

Esempio 1

Il seguente frammento di codice VBA è stato precedentemente utilizzato per illustrare l’uso del ciclo For Each. È ora utile osservare nuovamente questo codice per esaminare i riferimenti all’oggetto Worksheets (presi per impostazione predefinita dalla cartella di lavoro attiva) e il riferimento a ciascun singolo foglio di lavoro. Si noti che si accede alla proprietà ‘Name’ del foglio di lavoro per visualizzare il nome di ciascun foglio di lavoro.

' Ciclo su ogni foglio della cartella attiva
' per mostrare il nome del foglio in una finestra di messaggio
Dim wSheet As Worksheet

For Each wSheet in Worksheets
     MsgBox "Trovato il foglio di lavoro: " & wSheet.Name
Next wSheet

 

Esempio 2

Il seguente codice VBA illustra come è possibile accedere a fogli di lavoro e intervalli in diverse cartelle di lavoro. Illustra anche come accedere agli oggetti Excel attivi per impostazione predefinita se non viene fatto riferimento a nessun oggetto specifico. Questo esempio illustra anche l’uso della parola chiave Set per assegnare un oggetto Excel a una variabile.

Questo esempio mostra anche il metodo PasteSpecial chiamato per l’oggetto Range. Questo metodo imposta l’argomento ‘Paste’ sul valore ‘xlPasteValues’.

' Copia un intervallo di celle da Foglio1 di un'altra cartella (chiamata "Data.xlsx"),
' e incolla i valori nel foglio "Risultati" della cartella attiva (chiamata "CurrWb.xlsm")

Dim dataWb As Workbook

Set DataWb = Workbooks.Open("C:\Data")

' Nota che DataWb è la cartella attiva.
' quindi il codice seguente accede all'oggetto 'Sheets' di DataWb.

Sheets("Sheet1").Range("A1:B10").Copy

' Incolla i valori dell'intervallo copiato nel foglio "Risultati" della
' cartella attiva. Nota che, siccome CurrWb non è la cartella attiva
' è necessario specificarla.

Workbooks("CurrWb").Sheets("Risultati").Range("A1").PasteSpecial  Paste:=xlPasteValues

 

Esempio 3

Il seguente codice VBA mostra come sia possibile accedere all’oggetto Columns (collection) dall’oggetto Worksheet. Si vede anche che, quando si accede a una cella o a un intervallo di celle sul foglio di lavoro attivo, è possibile omettere il riferimento al foglio di lavoro. Ancora una volta il codice fornisce un esempio della parola chiave Set, che viene utilizzata per assegnare un oggetto Range alla variabile ‘Col’.

Questo codice include anche un esempio di come accedere e modificare la proprietà Value dell’oggetto Range.

' Esegue un loop lungo i valori in colonna A del foglio "Foglio2",
' esegue operazioni matematiche su ciascun valore, e scrive il risultato in
' colonna A del foglio attivo ("Foglio1")

Dim i As Integer
Dim Col As Range
Dim dVal As Double

' Imposta la variabile 'Col' per essere la colonna A di Foglio2

Set Col = Sheets("Sheet2").Columns("A")
i = 1

' Esegue un loop su ogni cella della colonna 'Col' finché
' non incontra una cella vuota

Do Until IsEmpty(Col.Cells(i))

     ' Applica operazioni aritmetiche al valore della cella attiva
     dVal = Col.Cells(i).Value * 3 - 1

     ' Il comando qua sotto copia il risultato nella colonna A
     ' del foglio attivo - non occorre specificare
     ' il nome del foglio in quanto è il foglio attivo.
     Cells(i, 1).Value = dVal
     i = i + 1

Loop

 

Vai a VBA Tutorial Parte 9 – Gli eventi di Excel

Torna alla pagina Tutorial VBA