Discussione: Corso VBA
Visualizza messaggio singolo
Vecchio 13-02-2012, 16.17.10   #4
Alexsandra
Senior Member
WT Expert
 
L'avatar di Alexsandra
 
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.208
Alexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raro
Le Variabili: Nozioni di base



In programmazione, una variabile è un valore che viene affidato al computer per memorizzarlo temporaneamente nella sua memoria mentre il programma è in esecuzione. Si deve tener presente che la memoria del computer è suddivisa in piccole aree di stoccaggio utilizzate per contenere i valori delle applicazioni e quando si utilizza un valore nel codice, il computer lo memorizza in una di queste aree per poi rilasciarlo quando viene richiamato.

Immaginiamo che una variabile sia come una casella in cui si può inserire un dato di qualsiasi tipo e salvarlo per impiegarlo successivamente. Il nome della variabile è l'etichetta che identifica la casella e il contenuto della casella è il valore della variabile, la particolarità di una variabile è di poter cambiare il suo valore durante l'esecuzione della macro, mentre il nome rimane inalterato. Possiamo quindi sintetizzare che una variabile è il nome assegnato ad una specifica locazione di memoria del computer, e possiamo usare il nome della variabile per riferirci a qualsiasi dato contenuto in quella determinata locazione di memoria.

Il nome di una variabile deve essere scelto seguendo poche regole
  • Deve cominciare con una lettera dell'alfabeto
  • Dopo la prima lettera può contenere qualsiasi combinazione di numeri, lettere
  • Il nome di una variabile non può contenere spazi, punti o caratteri speciali quali =, +, -, / e simili.
  • Il nome della variabile non deve corrispondere a parole chiave di VBA
  • Il nome di una variabile deve essere unico, cioè non può essere duplicato all'interno di un modulo

Per creare una variabile, è abbastanza semplice, da quanto abbiamo esposto finora basta solo dargli un nome ed assegnarli un valore, vediamone un esempio.

alex = 10

Questo enunciato memorizza il valore 10 nella locazione di memoria denominata alex, se si tratta del primo enunciato VBA crea la variabile, riserva una locazione di memoria per contenere il dato della variabile e poi memorizza il valore 10 in questa nuova locazione di memoria specificato dal nome della variabile. Molto semplicemente basti ricordare che tutto ciò che si mette sul lato destro di un segno di uguale è quello che si sta tentando di memorizzare e tutto quello che si ha a sinistra del segno di uguale è il luogo in cui si sta cercando di conservarlo.
Se la variabile alex esiste già VBA memorizza il nuovo valore nella locazione di memoria a cui fa riferimento la variabile alex, in pratica sovrascrive il valore

Questa procedura è definita una "dichiarazione implicita", oppure "dichiarazione al volo", risulta molto comoda ma può presentare degli inconvenienti, infatti usando il metodo implicito la variabile creata da VBA è di tipo Variant (tutti i tipi di dati), inoltre se in seguito digitiamo il nome sbagliato (es. Alex), a seconda del punto in cui il nome sbagliato compare nel codice il VBA può generare un errore di runtime, oppure possiamo anche usare la sintassi corretta, ma così andremmo a distruggere il valore memorizzato precedentemente.

Allora come possiamo ovviare a questi inconvenienti? Dichiarando le variabili.

Dichiarazione di una variabile
Durante la scrittura del codice, è possibile utilizzare qualsiasi variabile semplicemente specificandone il nome, ed è possibile utilizzare qualsiasi nome per una variabile, ma per eliminare la possibilità di fare confusione, si deve innanzitutto far sapere al VBA che si prevede di utilizzare una variabile, al fine di prenotare l'area di stoccaggio. La dichiarazione delle variabili è definita “Dichiarazione esplicita" e presenta i seguenti vantaggi
  • Rende più veloce l'esecuzione del codice
  • Aiuta ad evitare errori di digitazione
  • Il codice risulta più facile da leggere
  • Normalizza l'uso delle maiuscole nel nome delle variabili, per esempio se dichiariamo la variabile come Alex e in seguito digitiamo alex VBA trasforma automaticamente alex in Alex.

La dichiarazione di una variabile comunica semplicemente al VBA il nome della stessa ma è comunque possibile utilizzare un mix di variabili dichiarate e non dichiarate. Se si dichiara una variabile e poi si inizia ad utilizzare un'altra variabile con un nome simile, per Visual Basic si stanno utilizzando due variabili e questo può creare confusione. La soluzione a questo problema è di dire a Visual Basic che una variabile non può essere utilizzata se non è stata dichiarata e per ottenere questo, basta inserire la parola chiave Option Explicit all'inizio del listato. Questa operazione può anche essere fatta automaticamente per ogni file controllando che sia inserita la spunta alla voce Richiedi dichiarazione di variabili nella finestra di dialogo Opzioni dell’editor di VB

Per dichiarare esplicitamente una variabile si usa la parola chiave Dim seguita da un nome. Ecco un esempio:

Dim nome_variabile che nel nostro esempio diventa Dim alex

E’ indubbio che dichiarando le variabili ne ricaviamo notevoli benefici, ma l'errore umano nella digitazione del codice è sempre in agguato, per tutelarsi ulteriormente possiamo inserire un'altra parola chiave Option Explicit, se aggiungiamo questa parola chiave nell'area delle dichiarazioni di un modulo, cioè all'inizio del modulo prima di qualsiasi altra dichiarazione o listato, il VBA ci richiede di dichiarare tutte le variabili tramite l'enunciato Dim prima di usarle, in pratica l'enunciato Option Explicit proibisce di dichiarare implicitamente variabili in ogni punto del modulo, possiamo dire che con l'istruzione Option Explicit abbiamo aggiunto un altro pezzettino al nostro listato per garantirne una perfetta esecuzione.

Una dichiarazione implicita contiene dati di tipo Variant, però il nostro obbiettivo è quello di abbinare le potenzialità di VBA per utilizzare o manipolare vari tipi di dati presenti nel nostro foglio di Excel, se per esempio volessimo eseguire una somma tra i dati contenuti in due variabili avremmo sicuramente una incompatibilità nei dati e quasi certamente ci verrà rimandato un errore. Per ovviare a questo ultimo inconveniente usiamo un'altra parola chiave nella dichiarazione della variabile e aggiungiamo anche il tipo di dati che andrà a contenere. La parola chiave è As e l'enunciato si presenta in questo modo:

Dim nome_variabile As tipo che nel nostro esempio diventa così Dim alex As Integer

Così facendo abbiamo creato una variabile di nome alex e abbiamo dichiarato che è di tipo numerico.
In una normale applicazione, non è raro dover utilizzare molte variabili e si dovrebbe prendere l'abitudine di dichiarare sempre una variabile prima di utilizzarla. Per dichiarare una nuova variabile dopo averne dichiarato una prima, si può semplicemente andare alla riga successiva e utilizzare la parola chiave Dim per dichiarare quella nuova. Ecco un esempio:

Dim pippo
Dim pluto

Allo stesso modo, è possibile dichiarare quante variabili vogliamo, inoltre è possibile dichiarare più variabili sulla stessa riga e per effettuare questa operazione, si utilizza sempre la parola chiave Dim separando i nomi delle variabili con una virgola. Ecco un esempio

Dim pippo, pluto, minni, alex

Vediamo un esempio di codice sul loro utilizzo

Codice:
Sub var1()
Dim alex As String
alex = "Ciao a tutti"
MsgBox alex
End Sub
e otteniamo un messaggio del genere

Fig. 1

In questo modo abbiamo dichiarato la variabile all'interno della routine o sub var1 e può essere usata solo in quella routine, infatti se usiamo questo codice

Codice:
Sub var1()
Dim alex As String
alex = "Ciao a tutti"
stampa_box
End Sub

Private Sub stampa_box()
MsgBox alex
End Sub
otteniamo un messaggio del genere

Fig. 2

Non ci viene rimandato un errore, in quanto il comando MsgBox viene eseguito, ma non vediamo nessuna scritta, cioè la variabile alex non viene riconosciuta e non appare nel nostro box. Abbiamo parlato poco sopra di dichiarazione delle variabili nell'area di dichiarazione del modulo, assieme alla parola chiave Option Explicit, abbiamo anche già visto i benefici di questa particolare procedura, ma se in quell'area aggiungessimo anche la dichiarazione della variabile cosa succederebbe? Semplicemente che la variabile sarebbe condivisa e utilizzabile da tutte le routine di quel modulo. Vediamo un esempio modificando il codice del listato sopra esposto

Codice:
Option Explicit
Dim alex As String
Sub var1()
alex = "Ciao a tutti"
stampa_box
End Sub

Private Sub stampa_box()
MsgBox alex
End Sub
Il listato va inserito nell’editor all’inizio del modulo come mostrato in figura 3

Fig. 3

Se eseguiamo questa macro verrà mostrato il contenuto della variabile in una finestra

Fig. 4

Avrete notato che nella routine principale è stato inserito il nome di un’altra routine cioè stampa_box, in questa forma la macro riconosce che quella è una chiamata ad un'altra macro e la esegue, inoltre la routine stampa_box è preceduta dalla funzione Private, che viene usata quando vogliamo utilizzare una routine di quel modulo e solo in quello, al tempo stesso questa ruotine non ci compare nella finestra di assegnazione delle macro.

Abbiamo visto l’utilità nell’inserire la parola chiave Option Explicit nel listato, è possibile evitare di inserire in ogni modulo tale riga di codice agendo nelle opzioni dell’editor per garantire che Option Explicit sia sempre inserito nella parte superiore del modulo operando in questo modo: dal menu Strumenti - Opzioni e nella finestra che ci viene mostrata mettere il flag alla voce Dichiarazione di variabili obbligatoria. Come mostrato in figura 5

Fig. 5

Messa la spunta cliccare sul tasto Ok per confermare. È ora necessario utilizzare sempre la parola chiave Dim per dichiarare una variabile, in caso contrario verrà rimandato un errore di “Variabile non definita”. Abbiamo anche visto l'uso della funzione Private, quando facciamo programmi con listati lunghi e usiamo diversi moduli, ne facilita l'interpretazione del codice e il debug in caso di errore.

Abbiamo visto che tutte le variabili dichiarate all’interno di una procedura sono disponibili solo all’interno della procedura in cui le dichiarate, mentre quelle che dichiarate a livello di modulo (come in Fig. 3) sono disponibili a tutte le procedure all’interno del modulo in cui sono state dichiarate, ma non sono disponibili a procedure in un modulo diverso. In VBA gli elementi che sono disponibili a tutti i moduli vengono definiti a validità pubblica e sono chiamati variabili globali, perché sono disponibili globalmente cioè in tutto il vostro programma tramite la parole chiave Public usando la seguente sintassi

Public NomeVariabile [As NomeTipo]

Dove NomeVariabile rappresenta un nome valido qualsiasi per identificare la variabile e NomeTipo un qualsiasi nome di tipo di dato valido per fare un esempio vediamo il listato di prima modificandone la dicitura con la parola chiave Public come mostrato in figura 6

Fig. 6

Utilizzare Public per dichiarare una variabile a livello globale può essere utile quando si ramifica il programma in diversi moduli ma è da usare con molta attenzione specialmente nell’assegnazione del nome alla variabile per evitare di creare confusione se esistono due variabili con lo stesso nome in moduli diversi, pertanto cercate di essere espliciti nell’uso della variabile nella forma Public

Tuttavia, si deve tener presente che ci troviamo in ambiente Excel, un foglio di calcolo, con celle che contengono valori, per cui dobbiamo chiederci anche cosa si vuole fare di questa variabile e del valore in esso contenuto. Dopo tutto, che senso avrebbe memorizzare un valore, se non lo si vuole usare? Quello che possiamo fare è di trasferire il nostro valore memorizzato nella variabile in una cella del foglio di calcolo.
Precedentemente abbiamo visto la proprietà di Range che tramite la proprietà Value può ottenere o impostare il valore di una cella, o un gruppo di cellule.
Per impostare un valore, la proprietà Range va messa prima di un segno di uguale, in questo modo:

Sheets(“Foglio1”) .Range ( "A1"). Value =

In questo modo vogliamo puntare al Range A1 del foglio con nome “Foglio1” e dopo il punto, dobbiamo quindi inserire il valore da assegnare alla cella A1 tramite la proprietà Value e dopo il segno di uguale, è possibile digitarne il valore in questo modo:

Sheets(“Foglio1”) .Range ( "A1"). Value = 10

Ora, il valore per la cella A1 sul foglio di lavoro “Foglio1” è impostato su 10
Per assegnare un valore è possibile digitare il nome di una variabile invece di digitare un numero. Se nel listato del codice abbiamo precedentemente assegnato il valore 10 alla variabile “var1” possiamo esprimere il listato in questo modo:

Sheets(“Foglio1”) .Range ( "A1"). Value = var1

VBA vede la variabile denominata var1 quindi recupera qualsiasi valore memorizzato all'interno di esso e tale valore viene quindi memorizzato all'interno di ciò che è a sinistra del segno uguale.
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato