In VBA, come in qualsiasi linguaggio di programmazione, variabili e costanti sono nomi che rappresentano valori. Come suggerito dai nomi, i valori delle variabili possono cambiare, mentre le costanti hanno generalmente valori fissi.
Ad esempio, è possibile utilizzare la costante ‘Pi’ per memorizzare il valore 3,14159265 … Il valore di ‘Pi’ non cambierà nel corso del programma, ma è utile archiviare questo valore in una costante per facilità d’uso .
Inoltre, potremmo utilizzare una variabile denominata ‘sVAT_Rate’ per memorizzare l’aliquota IVA da pagare sui beni acquistati. Il valore di sVAT_Rate può variare, a seconda del tipo di merce.
Tipi di dati
Tutte le variabili e le costanti contengono valori che appartengono a un tipo di dati. La tabella seguente mostra i tipi di dati di VBA, insieme a una descrizione di ciascun tipo e l’intervallo dei valori possibili.
Tipo di dati | Dimensione in memoria | Descrizione | Intervallo di valori |
---|---|---|---|
Byte | 1 byte | Rappresenta un numero senza segno (non negativo), spesso utilizzato per i dati binari | da 0 a 255 |
Boolean | 2 bytes | Un semplice valore Vero o Falso | True o False |
Integer | 2 bytes | Numero intero (senza decimali) | da -32.768 a +32.767 |
Long | 4 bytes | Intero lungo (senza decimali) | da -2.147.483.648 a +2.147.483.647 |
Single | 4 bytes | Numero in virgola mobile a precisione singola | da -3.4e38 a +3.4e38 |
Double | 8 bytes | Numero in virgola mobile a precisione doppia | da -1.8e308 a +1.8e308 |
Currency | 8 bytes | Un numero in virgola mobile con un numero fisso di posizioni decimali | da -922.337.203.685.477,5808 a +922.337.203.685.477,5807 |
Date | 8 bytes | Data e ora: il tipo di dati Date è rappresentato internamente da un numero in virgola mobile. La parte intera del numero rappresenta la data e la parte decimale rappresenta l'ora. | dal 1° gennaio 100 al 31 dicembre 9999 |
Object | 4 bytes | Un riferimento a un oggetto | Qualsiasi riferimento ad un oggetto |
String | variabile | Contiene una serie di caratteri. Il tipo String può essere definito per avere una lunghezza fissa o variabile, sebbene sia comunemente definito per avere una lunghezza variabile | Fisso - Fino a 65.500 caratteri Variabile - Fino a circa 2 miliardi di caratteri |
Variant | variabile | Può contenere date, numeri in virgola mobile o stringhe di caratteri e deve pertanto essere utilizzato quando non si è sicuri del tipo di dati che ci si aspetta. | Numero - Come il tipo Double Stringa - Come il tipo String |
Dalla tabella sopra, è chiaro che è possibile risparmiare sulla memoria utilizzando tipi di dati specifici (ad esempio numeri integer anziché long o single o double). Tuttavia, se si prevede di utilizzare tipi di dati ‘più piccoli’, è necessario assicurarsi che il codice non incontrerà valori più grandi di quelli che possono essere gestiti dal tipo di dati scelto.
Dichiarare variabili e costanti
Prima di utilizzare una variabile o una costante, è possibile dichiararla. Questo viene fatto aggiungendo una semplice riga di codice alla tua macro, come segue. Per dichiarare una variabile:
Dim Variable_Name As Data_Type
Si noti che nella riga di codice sopra, Variable_Name deve essere sostituito dal nome effettivo della variabile e Data_Type deve essere sostituito da uno dei tipi di dati sopra elencati. Per esempio:
Dim sVAT_Rate As Single
Dim i As Integer
Le costanti vengono dichiarate in modo simile, tranne per il fatto che ad una costante deve essere sempre assegnato un valore quando viene dichiarata. Esempi di dichiarazione di costanti in VBA sono:
Const iMaxCount = 5000
Const iMaxScore = 100
Excel non ti obbliga a dichiarare le variabili. Per impostazione predefinita, tutte le variabili in Excel avranno il tipo Variant e possono contenere un numero o un testo.
Pertanto, in qualsiasi momento durante il programma, è possibile utilizzare qualsiasi nome di variabile (anche se non è stato dichiarato) e Excel gli assegnerà il tipo Variant. Tuttavia, non è buona prassi di programmazione non dichiarare le variabili per i seguenti motivi:
Memoria e velocità di calcolo: se non si dichiara una variabile con un tipo di dati, per impostazione predefinita avrà il tipo Variant. Ciò occupa più memoria rispetto a molti altri tipi di dati.
Mentre alcuni byte extra per variabile potrebbero non sembrare molta memoria, non è raro che i programmatori abbiano migliaia di variabili nei loro programmi (specialmente quando si inizia a usare le matrici). Pertanto, la memoria aggiuntiva utilizzata per memorizzare le Variant anziché numeri integer o single, può aumentare in modo significativo.
I tipi di dati Variant richiedono inoltre più tempo per l’elaborazione rispetto ad altri tipi di dati, quindi se si dispone di migliaia di Variant non necessari, questo può rallentare i calcoli.
Prevenire errori di digitazione: se dichiari sempre le tue variabili, puoi usare l’opzione Option Explicit di VBA (vedi sotto) per forzarti a dichiarare le variabili.
Questo ti impedirà di introdurre bug nel tuo codice digitando accidentalmente un nome di variabile in modo errato. Ad esempio, potresti utilizzare una variabile denominata ‘sVAT_Rate’ e, quando assegni un valore a questa variabile, potresti accidentalmente digitare ‘VATRate = 0,22’. Da questo punto in poi, ti aspetti che la tua variabile ‘sVAT_Rate’ abbia il valore 0,22, ma ovviamente non lo avrà. Tuttavia, se avessi utilizzato l’opzione Option Explicit per forzarti a dichiarare tutte le variabili prima di usarle, il compilatore VBA avrebbe evidenziato questo errore, poiché la variabile ‘VATRate’ non era stata dichiarata.
Evidenziazione di valori imprevisti nei dati: se si dichiara che una variabile ha un tipo di dati specifico e si tenta di assegnargli un tipo di dati errato, ciò genererà un errore nel programma che, se non gestito nel codice, può causare un crash nel programma.
Sebbene questo possa inizialmente sembrare un buon motivo per non dichiarare le variabili, in realtà è utile sapere al più presto se la variabile riceve un tipo di dati imprevisto. Altrimenti, se il programma continua a funzionare, potresti finire con risultati errati o imprevisti in un secondo momento, quando è probabile che sia molto più difficile rilevare le cause degli errori.
Inoltre, è possibile che la macro si completi con risultati errati e potresti non notare affatto l’errore – e continuare a lavorare con dati errati!
È quindi preferibile rilevare il tipo di dati imprevisto in una fase iniziale e aggiungere codice per gestirlo in modo appropriato.
Per i motivi sopra elencati, si consiglia di dichiarare sempre tutte le variabili durante la programmazione in VBA e utilizzare l’opzione Option Explicit (vedi di seguito) per assicurarti che tutte le variabili nel codice vengano dichiarate.
Option Explicit
L’opzione ‘Option Explicit’ ti costringe a dichiarare tutte le variabili che usi nel tuo codice VBA, evidenziando eventuali variabili non dichiarate come errori durante la compilazione (prima dell’esecuzione del codice). Per usare questa opzione, digita semplicemente la riga
Option Explicit
nella parte superiore del tuo codice VBA.
Se vuoi includere sempre Option Explicit nella parte superiore di ogni nuovo modulo VBA che apri, questo può essere fatto automaticamente tramite l’opzione ‘Dichiarazione di variabili obbligatoria‘ dell’editor VBA.
Per attivare questo:
- Nell’editor di Visual Basic, seleziona Strumenti > Opzioni…;
- Assicurati che la scheda Editor sia selezionata;
- Seleziona la casella accanto all’opzione Dichiarazione di variabili obbligatoria e fai clic su OK.
Una volta selezionata l’opzione “Dichiarazione di variabili obbligatoria”, Option Esplicit verrà automaticamente inserito nella parte superiore di tutti i nuovi moduli nell’editor VBA.
Ambito di variabili e costanti
Ogni volta che dichiari una variabile o una costante, questa ha solo un ambito limitato (ovvero una parte limitata del programma in cui esiste la variabile). Questo dipende dalla posizione della tua dichiarazione.
Ad esempio, immagina di utilizzare la variabile ‘sVAT_Rate’ all’interno della funzione ‘Total_Cost’. La tabella seguente illustra l’ambito di ‘sVAT_Rate’ quando viene dichiarato in 2 posti diversi all’interno del modulo:
Option Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double . . . End Function ___________________________ Se si dichiara 'sVAT_Rate', nella parte superiore del modulo, l'ambito di questa variabile è l'intero modulo (vale a dire 'sVAT_Rate' verrà riconosciuto in tutte le procedure all'interno del modulo). Pertanto, se si assegna un valore a 'sVAT_Rate' nella funzione Total_Cost e si passa a un'altra funzione nel modulo corrente, verrà ricordato il valore assegnato a 'sVAT_Rate'. Tuttavia, se si passa a una funzione che risiede in un modulo diverso e si tenta di utilizzare la variabile 'sVAT_Rate', la variabile non verrà riconosciuta. |
Option Explicit Function Total_Cost() As Double Dim sVAT_Rate As Single . . . End Function ___________________________ Se si dichiara 'sVAT_Rate', all'inizio della funzione Total_Cost, l'ambito di questa variabile sarà l'intera funzione, (ovvero 'sVAT_Rate' verrà riconosciuta in tutta la funzione Total_Cost, ma non al di fuori di questa funzione). Pertanto, se si tenta di utilizzare 'sVAT_Rate' in qualsiasi altra procedura, il compilatore VBA genererà un errore, poiché la variabile non è stata dichiarata al di fuori della funzione Total_Cost (e Option Explicit è in uso). |
Nell’esempio sopra, la variabile a livello di modulo è stata dichiarata usando la parola chiave ‘Dim‘. Tuttavia, è possibile che si desideri dichiarare variabili che possono essere condivise con altri moduli. Questo può essere specificato usando la parola chiave Public nella dichiarazione, invece di Dim.
Si noti che, per una variabile a livello di modulo, la parola chiave ‘Dim’ potrebbe anche essere sostituita con la parola chiave Private per indicare che l’ambito della variabile è limitato al modulo corrente.
Anche le costanti possono utilizzare le parole chiave ‘Public‘ e ‘Private‘, ma in questo caso queste vengono utilizzate in aggiunta alla parola chiave ‘Const‘ (non al posto di).
Gli esempi seguenti mostrano le parole chiave ‘Public‘ e ‘Private‘ applicate a variabili e costanti:
Option Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ______________________________ Questo esempio mostra la parola chiave 'Public' utilizzata per dichiarare la variabile 'sVAT_Rate' e la costante 'iMax_Count'. L'ambito di queste due dichiarazioni è l'intero progetto. Pertanto 'sVAT_Rate' e 'iMax_Count' sono accessibili da qualsiasi procedura in qualsiasi modulo del progetto. |
Option Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ______________________________ Questo esempio mostra la parola chiave 'Private' utilizzata per dichiarare la variabile 'sVAT_Rate' e la costante 'iMax_Count'. L'ambito di queste due dichiarazioni è il modulo corrente. Pertanto 'sVAT_Rate' e 'iMax_Count' sono accessibili da qualsiasi procedura nel modulo corrente, ma non sono accessibili dalle procedure che risiedono in moduli diversi. |