Quel che si dirà in questa pagina sicuramente non sarà esaustivo, ma servirà solo per chiarirci le idee. Infatti su questi concetti si ritornerà, direttamente o indirettamente, negli argomenti che seguiranno.
Per iniziare i nostri lavori apriamo Excel e rechiamoci in ambiente VBA (vedi l'immagine)
Per iniziare a muovere i nostri primi inseriamo un nuovo Modulo standard come è illustrato in questa immagine
Se la procedura che stiamo scrivendo è abbastanza breve e semplice non dovremmo preoccuparci della gestione delle variabili e possiamo accontentarci di come il VBA riesce a gestire le variabili che, anche senza essere state dichiarate, usiamo. Se una variabile non è stata dichiarata diversamente sarà senz'altro di tipo Variant. Ma se il codice comincia ad essere complesso è buona norma dichiarare le variabili sempre attraverso un enunciato Dim tanto per non trovarci con una marea infinita di variabili.
Infatti, avere le idee chiare anche sull'uso delle variabili ci farà risparmiare energie e risorse richieste dal nostro applicativo.
Dichiarazione delle Variabili
La sintassi più comune per dichiarare le varibili è: Dim NomeVariabile [as tipo]
I possibili tipi che possiamo assegnare alle nostre variabili li possiamo vedere nell'elenco che appare appena scriviamo:
dim NomeVariabile as
e possiamo andare più velocemente al tipo che ci interessa se cominciamo a scrivere (es. st per il tipo stringa):
dim NomeVariabile as st
Avendo così il suggerimento a portata di mano lo possiamo selezionare facilmente con un doppio clic del mouse su di esso o selezionarlo coi tasti di direzione (su e giu) e premere poi il tasto Tab ottenendo la dichiarazione completa:
Dim NomeVariabile As String
Tuttavia, nella maggior parte dei nostri lavori, non avremo bisogno e difficilmente faremo uso di tutti quei tipi. Quelli di cui faremo maggior uso saranno quelli descritti nella seguente tabella qui sotto.
Se non dichiariamo alcun tipo la variabile sarà comunque di tipo Variant.
In questa tabella sono indicati i seguenti paramentri:
Il seguente elengo è tratto dalla guida in linea del VBA per Excel. In ricerca in linea scegliere "Ricerca libera" e digitare "riepilogo dei tipi di dati" per avere l'elenco completo dei Tipi di dati.
| Tipo di dati | Dimensione | Intervallo memorizzazione |
|---|---|---|
| Byte | 1 byte | Da 0 a 255 |
| Boolean | 2 byte | True o False |
| Integer | 2 byte | Da -32.768 a 32.767 |
| Long (intero lungo) | 4 byte | Da -2.147.483.648 a 2.147.483.647 |
| Single (virgola mobile semplice) | 4 byte | Da -3.402823E38 a -1.401298E45 per la precisione dei valori negativi e da 1.401298E45 a 3.402823E38 per la precisione dei numeri positivi |
| Double (virgola mobile a doppia precisione) | 8 byte | -4.94065645841247E-324 per i valori negativi e 4.94065645841247E-324 per i valori positivi |
| Currency | 8 byte | Da -922.337.203.685.477,5808 a 922.337.203.685.477,5808 |
| Date | 8 byte | Dal 1 Gennaio 100 al 31 Dicembre 9999 (ottimisti!) |
| Object | 4 byte | Qualsiasi riferimento a oggetto |
| String (lunghezza variabile) | 10 byte + lunghezza stringa | Da 0 a, circa, 2 miliardi |
| String (lunghezza fissa) | Lunghezza stringa | Da 1 a circa 65.400 |
| Variant | 22 byte + lunghezza stringa | Da 0 a circa 2 miliardi |
Una nota è obbligatoria per i tipi di dati Object e Variant
Importante:
Alle variabili non dichiarate o dichiarate senza un tipo di dati specifico viene assegnato il tipo di dati Variant o Object.
Anche il tipo dato Object è, in un certo senso, un tipo di variabile Variant per i tipi Object che comprendono vari tipi di oggetti: Range, Fogli, Controls, ecc.. Questo semplifica e velocizza la scrittura di programmi, ma ne può rendere più lenta l'esecuzione.
La esatta specifica dei tipi di dati per le variabili di tipo Object presenta vari vantaggi:
L'IntelliSense offre un insieme di funzionalità in grado di rendere facilmente accessibili i riferimenti al linguaggio. Durante la creazione di codice è possibile, rimanendo nel contesto, reperire le informazioni necessarie, inserire gli elementi del linguaggio direttamente nel codice e demandando a IntelliSense il completamento della digitazione.
In IntelliSense sono disponibili le seguenti funzionalità:
Elenca membri
Informazioni parametri
Visibilità delle variabili
Le dichiarazioni delle variabili possono essere collocate nella sezione generale del codice oppure all’interno delle procedure.
A seconda della collocazione della dichiarazione di una variabile, varia il raggio della sua validità: la visibilità di una variabile definisce la sua disponibilità all'interno del progetto. Puoi dichiarare variabili e costanti a tre livelli:
Vediamo un esempio:
'Le seguenti variabili sono visibili in tutto il progetto
Public Numero1 As Integer
Public Numero2 As Integer
' La seguente variabile è visibile a livello di modulo>
Private R1 As Integer
Private C1 As Integer
' La seguente variabile è visibile
' solo all'interno della routine
In questo frammento di codice vediamo:
Che significa tutto questo?
Se pensiamo che le variabili Numero1 e Numero2 debbano essere usate in altri moduli, come un modulo di uno dei fogli o un modulo di una userform, le dichiariamo nelle primissime righe di un modulo standard e quando serviranno conserveranno lo stesso valore a meno che non cambiamo ulteriormente i valori in esse contenuti.
Stesso discorso vale per le variabili R1 e C1 con la sola differenza che i loro valori saranno conservati solo in tutte le routines residenti nel medesimo modulo. Se si esce dal modulo per andare in uno degli altri moduli ed in questi vengono usate le stesse variabili (R1 e C1) in questi moduli saranno come nuove, quindi occorrerà valorizzarle per usarle. Ritornando a lavorare nel modulo di origine di queste variabili, queste riassumeranno il valore iniziale.
Proviamo un piccolo test lavorando in due moduli diversi:
Nel Modulo1 scriviamo due piccole routines, mentre nel Modulo2 ne scriviamo una terza
In tutte le routines usiamo queste 4 variabili
La variabile Numero1 la dichiariamo con Public nella primissima zona del Modulo1
La variabile Numero2 la dichiariamo con Private o con Dim nella stessa zona
Le variabili Numero3 e Risultato le dichiariamo all'interno delle routines
Nel modlo1 scriviamo queste semplici routines:
'La seguente variabile è visibile in tutto il progetto
Public Numero1 As Integer
' La seguente variabile è visibile a livello di modulo - questo modulo
Dim Numero2 As Integer
Sub Somma2()
Dim Risultato As Integer
Dim Numero3 As Integer
MsgBox Numero1 & " + " & Numero2 & " + " & Numero3 & " = " & Risultato
Numero3 = 4
Risultato = Numero1 + Numero2 + Numero3
MsgBox Numero1 & " + " & Numero2 & " + " & Numero3 & " = " & Risultato
Call Somma3
MsgBox Numero1 & " + " & Numero2 & " + " & Numero3 & " = " & Risultato
End Sub
Nel Modulo2 scriviamo questa:
Sub Somma3()
Dim Numero2 As Integer
Dim Numero3 As Integer
Dim Risultato As Integer
MsgBox Numero1 & " + " & Numero2 & " + " & Numero3 & " = " & Risultato
Numero2 = 10
Numero3 = 5
Risultato = Numero1 + Numero2 + Numero3
MsgBox Numero1 & " + " & Numero2 & " + " & Numero3 & " = " & Risultato
End Sub
Non mi dilungo nel mostrarvi gli effetti che abbiamo nelle MsgBox. Se avete tempo e voglia lo potrete sperimentare voi stessi con un semplice copia ed incolla seguendo magari il Debug passo - passo tramite il tasto F8.
Continuando con le prossime pagine impareremo a conoscere meglio l'utilizzo delle variabili.