Lavorare con le Variabili

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


Sub SommaNumeri()
Dim Risultato As Integer
Numero1 = 5
Numero2 = 6
R1 = 1
C1 = 1
Risultato = Numero1 + Numero2
Cells(R1, C1) = Risultato
End Sub

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 SommaNumeri()
Dim Risultato As Integer
Dim Numero3 As Integer
Numero1 = 6
Numero2 = 3
Numero3 = 2
Risultato = Numero1 + Numero2 + Numero3
MsgBox Numero1 & " + " & Numero2 & " + " & Numero3 & " = " & Risultato
Call Somma2
MsgBox Numero1 & " + " & Numero2 & " + " & Numero3 & " = " & Risultato
End Sub


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.