Introduzione
Questo articolo descrive come dichiarare e usare le variabili nelle routine secondarie di Excel in Visual Basic, Applications Edition (VBA), inclusi l'ambito e la durata delle variabili.
Variabili in una routine sub
Le variabili archiviano i valori che possono essere usati o modificati durante l'esecuzione del codice VBA. Questo articolo spiega:
- Come dichiarare le variabili.
- In che modo l'ambito della variabile determina dove è possibile utilizzare una variabile.
- Per quanto tempo una variabile mantiene il suo valore.
Dichiarare una variabile in una macro
Utilizzare l'istruzione Dim per dichiarare una variabile in una macro. Nell'esempio seguente vengono dichiarate due variabili come numeri interi:
Dim x As Integer, y As Integer
Perché entrambe le variabili sono dichiarate come numeri interix e y possono memorizzare numeri interi da -32.768 a 32.767.
Nota
Quando dichiarate più variabili in un'istruzione Dim , specificate il tipo di dati per ogni variabile.
Se non si specifica il tipo di dati per ogni variabile, solo la variabile immediatamente seguita da As Integer viene dichiarata come Integer. Nell'esempio seguente, x è un oggetto Variant ed y è un numero intero:
Dim x, y As Integer
Per altre informazioni, vedere la sezione Tipo di dati Variant di seguito.
Per eseguire un test delle variabili:
Aprire una cartella di lavoro in Excel.
Premere ALT+F11 per aprire il Visual Basic Editor.
Nel menuInserisci, selezionare Modulo.
Digita il codice seguente:
Sub Variable_Test()
Dim x come intero, y come intero
x = 10
y = 100
MsgBox "il valore di x è " & x & _
Chr(13) & "il valore di y è " & y
End SubEseguire la macro Variable_Test . Viene visualizzato il messaggio seguente:
the value of x is 10
the value of y is 100Selezionare OK.
Nella macro Variable_Test modificare la riga seguente:
x = 10a:
x = "error"Eseguire la macro Variable_Test .
Un errore di runtime si verifica perché "error" è un valore stringa e non può essere assegnato alla variabile xInteger .
Riepilogo dei tipi di dati
Questi sono i tipi di dati variabili comuni:
tipo di dati Variant
Se non si specifica un tipo di dati quando si dichiara una variabile o se non si dichiara affatto una variabile, Visual Basic assegna automaticamente il tipo di dati Variant alla variabile. Di seguito sono riportati i vantaggi delle variabili dichiarate come tipo di dati this:
- Le variabili possono contenere valori stringa, data, ora, booleani o numerici.
- Le variabili possono convertire automaticamente i valori in esse contenuti.
Per vedere come funziona nella macro Variable_Test:
Modificare il codice nella macro Variable_Test in:
Sub Variable_Test()
Dim x, y
x = "string"
y = 1.23
MsgBox "the value of x is " & x & _
Chr(13) & "the value of y is " & y
End Sub
Eseguire la macro Variable_Test .
La macro viene eseguita senza una mancata corrispondenza del tipo perché x sono y variabili Variant e possono contenere diversi tipi di dati.
Ambito di una variabile
L'ambito di una variabile determina dove può essere utilizzata nel progetto VBA. Una variabile può avere un ambito a livello di procedura, di modulo privato o pubblico, a seconda di dove e come è dichiarata.
Ambito a livello di procedura
Una variabile a livello di procedura può essere utilizzata solo all'interno della procedura in cui è dichiarata. Altre procedure non possono accedere al suo valore.
Per verificare che una variabile con ambito a livello di procedura non sia visibile all'esterno della procedura in cui è dichiarata:
Inserire un nuovo modulo nel progetto.
Digitare entrambe le macro seguenti nel modulo:
Sub Macro1() Dim x As Integer x = 10 MsgBox "x, visto da Macro1 è " & x 'la riga successiva corre Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, visto da Macro2 è " & x End SubEseguire Macro1 e verrà visualizzato il messaggio seguente:
x, as seen by Macro1 is 10Selezionare OK e verrà visualizzato il messaggio seguente:
x, as seen by Macro2 isSelezionare OK.
Macro2 non visualizza un valore per la variabile x perché la variabile x è locale a Macro1.
Ambito a livello di modulo privato e pubblico
È possibile dichiarare le variabili nella sezione Dichiarazioni nella parte superiore di un modulo, prima di qualsiasi procedura. Usare Public per rendere disponibile una variabile alle procedure durante tutto il progetto. Usare Dim o Private a livello di modulo per rendere la variabile disponibile solo per le routine in tale modulo.
Per vedere la differenza tra la dichiarazione pubblica e la dichiarazione Dim :
Salvare e chiudere le cartelle di lavoro aperte e quindi aprirne una nuova.
Avviare il Visual Basic Editor.
Inserire un modulo nel progetto.
Digitare il codice seguente in questo modulo:
Public x As Integer Sub Macro_1a() x = 10 MsgBox x Macro_1b End Sub Sub Macro_1b() x = x * 2 MsgBox x Macro2 End Sub
Inserire un altro modulo nel progetto.
Digitare il codice seguente in questo modulo:
Sub Macro2()
x = x * 3
MsgBox x
End SubEseguire Macro_1a macro nel primo modulo.
Con la variabile
xdichiarata comePublic x As Integer, tutte e tre le macro del progetto hanno accesso al valore dix. Nella prima finestra di messaggio viene visualizzato il valore 10. La seconda finestra di messaggio visualizza un valore pari a 20 (perchéxè moltiplicato per 2 inMacro_1b). La terza finestra di messaggio visualizza un valore di 60 (perché il valore dixè stato modificato in 20 inMacro_1be quindi è stato moltiplicato per 3 inMacro2).Modificare la riga di dichiarazione nel primo modulo da:
Public x As Integera:
Dim x As IntegerEseguire la macro Macro_1a .
Con la variabile
xdichiarata comeDim x As Integer, solo le macro nel primo modulo hanno accesso al valore dix. Quindi la prima finestra di messaggio visualizza un valore di 10, la seconda di messaggio visualizza un valore di 20 (perchéxviene moltiplicato per 2 inMacro_1b) e la terza finestra di messaggio visualizza un valore di 0 (perchéMacro2non vede il valore dixe utilizza un valore non inizializzato di zero).Modificare la riga di dichiarazione nel primo modulo da:
Dim x As Integera:
Private x As IntegerEseguire la macro Macro_1a .
Le stesse finestre di messaggio vengono visualizzate quando si utilizza l'istruzione Private e quando si utilizza l'istruzione Dim . La variabile
xha lo stesso ambito: è privata per il modulo in cui è dichiarata.
Suggerimento
A livello di modulo, Dim e Private assegnano a una variabile lo stesso ambito. Utilizzare Private se si desidera che l'ambito previsto sia esplicito.
Durata di una variabile
La durata di una variabile è il periodo durante il quale mantiene un valore. Quando una variabile perde l'ambito, non ha più un valore.
Inizializzare il valore di una variabile
All'avvio di una procedura, le relative variabili vengono inizializzate. Le variabili numeriche vengono inizializzate su zero, le stringhe a lunghezza variabile su una stringa di lunghezza zero (""), stringhe a lunghezza fissa con il carattere rappresentato dal codice carattere ASCII 0 e le variabili Variant su Empty. Una variante vuota è rappresentata come zero in un contesto numerico e come stringa di lunghezza zero in un contesto stringa.
Variabili a livello di procedura
Una variabile a livello di procedura dichiarata con Dim mantiene il suo valore fino al termine dell'esecuzione della procedura. Se la routine chiama un'altra routine, la variabile mantiene il suo valore durante l'esecuzione della routine chiamata, ma non è disponibile per la routine chiamata.
Per illustrare il funzionamento delle variabili a livello di procedura:
Inserire un nuovo modulo nel progetto.
Digitare entrambe le macro seguenti nel modulo:
Sub Macro1()
'Impostare x come variabile a livello di procedura
Dim x come numero intero
MsgBox "il valore inizializzato di x è " & x
x = 10
MsgBox "x è " & x
'la riga successiva esegue Macro2
Macro2
MsgBox "x è ancora " & x
End Sub
Sub Macro2()
MsgBox "x, visto da Macro2 è " & x
End SubEseguire Macro1.
Viene visualizzato il messaggio seguente:
the initialized value of x is 0Selezionare OK e verrà visualizzato il messaggio:
x is 10Selezionare OK e verrà visualizzato il messaggio seguente:
x, as seen by Macro2 isSelezionare OK.
Macro2non visualizza un valore per la variabilexperché la variabilexè locale aMacro1. Viene visualizzato il messaggio seguente:x is still 10Selezionare OK.
Eseguire Macro1.
Al Macro1 termine dell'esecuzione, il valore della variabile x a livello di procedura viene perso. Pertanto, quando si esegue Macro1 di nuovo, x viene inizializzato su zero.
Parola chiave statica
Se una variabile a livello di procedura viene dichiarata utilizzando la parola chiave Static , la variabile mantiene il suo valore finché il codice è in esecuzione. Pertanto, se si dispone di una variabile statica, alla successiva chiamata alla procedura, la variabile statica viene inizializzata sul suo ultimo valore.
Per vedere come funziona la parola chiave Static:
Modificare il codice in Macro1 in:
Sub Macro1() 'imposta x come variabile a livello di procedura Static x As Integer MsgBox "il valore inizializzato di x è " & x x = x + 10 MsgBox "x è " & x End Sub
Eseguire Macro1.
Verrà visualizzato il messaggio:
the initialized value of x is 0Selezionare OK e verrà visualizzato il messaggio:
x is 10Selezionare OK.
Eseguire la Macro1 e viene visualizzato il messaggio seguente:
the initialized value of x is 10Selezionare OK e verrà visualizzato il messaggio seguente:
x is 20Selezionare OK.
I valori visualizzati nei messaggi sono diversi la seconda volta perché la variabile x viene dichiarata come variabile statica e mantiene il valore dopo Macro1 la prima esecuzione.
Nota
Una variabile a livello di modulo e una variabile a livello di procedura statica hanno durate simili, ma i rispettivi ambiti sono diversi.
Per verificare la durata di una variabile a livello di modulo:
Modificare il codice nel modulo che contiene Macro1 nel modo seguente:
Dim x As Integer 'crea una variabile a livello di modulo Sub Macro1() MsgBox "il valore inizializzato di x è " & x x = x + 10 MsgBox "x è " & x End Sub
Eseguire Macro1 e verrà visualizzato il messaggio seguente:
the initialized value of x is 0Selezionare OK e verrà visualizzato il messaggio seguente:
x is 10Selezionare OK.
Eseguire Macro1 e verrà visualizzato questo messaggio:
the initialized value of x is 10Selezionare OK.
Viene visualizzato il messaggio seguente:
x is 20Selezionare OK.
I valori visualizzati nei messaggi sono diversi la seconda volta perché x viene dichiarata come variabile a livello di modulo e mantiene il valore dopo la prima esecuzione Macro1 .
Reimpostare un progetto per reimpostare le variabili
Per reimpostare le variabili statiche e a livello di modulo, reimpostare il progetto VBA nel Visual Basic Editor.
Se si esegue questa operazione per il progetto Macro1 e quindi si esegue nuovamente Macro1, il valore della variabile x viene inizializzato nuovamente su zero e viene visualizzato il primo messaggio:
the initialized value of x is 0