Accedi per seguire   
Seguaci 0
Alexsandra

Vba : Variabili E Operatori Matematici

1 messaggio in questa discussione

Variabili e operatori matematici

In questa lezione spiegheremo i tipi di dati che il VBA può manipolare ed elaborare, ma prima di addentrarci in questo argomento è bene capire come VBA memorizza tipi diversi di informazioni, e in che modo riesce a distinguerli tra loro, abbiamo visto nella prima lezione un elenco dei vari tipi di dati, li riportiamo sommariamente per facilitare la spiegazione dell'enunciato che seguirà, i dati possono essere di tipo:Booleano, Byte, Date, String, Integer, Single, Long, Double, Currency, Variant. Questi dati vengono memorizzati da VBA per poterli utilizzare, ma come, utilizzandoli sotto forma di variabile. Vediamo ora cos'è una variabile, come si crea e come si usa

Variabili

Possiamo dire che VBA memorizza i vari tipi di dati in un'area di memoria del computer usata per contenere ogni tipo di dati, 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 VBA è 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

Vediamo ora come si crea 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. Se la variabile alex esiste già VBA memorizza il nuovo valore nella locazione di memoria a cui fa riferimento la variabile alex

Questa è 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. 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.

Per dichiarare esplicitamente una variabile si usa la parola chiave Dim in questo modo

Dim nome_variabile che nel nostro esempio diventa Dim alex

A questo punto abbiamo chiarito alcuni aspetti delle variabili, abbiamo visto che dichiarandole 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.

Abbiamo anche detto che 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

Cosa abbiamo fatto, semplicemente abbiamo creato una variabile di nome alex e abbiamo dichiarato che è di tipo numerico, è inoltre possibile dichiarare più variabili usando queste sintassi

Dim Alex As Integer, Dim Andrea As String, Dim Mattia As Date, Dim Ale As Double, Dim Vik as Long, oppure in un unico blocco

Dim Alex As Integer

Dim Andrea As String

Dim Mattia As Date

Dim Ale As Double

Dim Vik As Long

Vediamo un esempio

Sub variabile()
Dim alex As String
alex = "Ciao a tutti"
MsgBox alex
End Sub

E otteniamo un messaggio del genere

%25233old_01.png Fig. 1

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

Sub variabile()
Dim alex As String
alex = "Ciao a tutti"
stampa_box
End Sub

Sub stampa_box()
MsgBox alex
End Sub

E otteniamo un messaggio del genere

%25233old_02.png Fig. 2

Non ci viene rimandato un errore, in quanto usiamo il comando del box, 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 con questo codice.

Option Explicit
Dim alex As String
Sub variabile_2()
alex = "Ciao a tutti"
mostra_box
mostra_box1
End Sub

Private Sub mostra_box()
MsgBox alex
MsgBox "questa è la sub mostra_box"
End Sub

Sub mostra_box1()
MsgBox alex
MsgBox "questa è la sub mostra_box1"
End Sub

Se associamo questa macro ad un pulsante verrà eseguita e mostrato il contenuto della variabile, possiamo però raffinare il codice con un comando che poco sotto spiegheremo e modifichiamo il listato così

Option Explicit
Dim alex As String
Sub variabile_2()
alex = "Ciao a tutti"
mostra_box
mostra_box1
End Sub

Private Sub mostra_box()
MsgBox alex & " " & "questa è la sub mostra_box"
End Sub

Sub mostra_box1()
MsgBox alex & " " & "questa è la sub mostra_box1"
End Sub 

E otteniamo i due box in questo modo

%25233old_03.png Fig. 3 %25233old_04.png Fig. 4

Avrete notato che nella routine principale sono stati inseriti i nomi delle altre due routine cioè mostra_box e mostra_box1, in questa forma la macro riconosce che quella è una chiamata ad un'altra macro e la esegue, inoltre noterete anche una differenza nelle due routine che utilizzano la funzione MsgBox, infatti la prima è preceduta dalla funzione Private, che viene usata quando vogliamo utilizzare una routine di quel modulo e solo di quello, al tempo stesso questa ruotine non ci compare nella finestra di assegnazione delle macro. E' molto utile 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. Il listato nella finestra del codice appare così

%25233old_05.png Fig. 5

Penso che ora sia chiaro come vanno dichiarate le variabili, e come usarle, questa parte sarà risultata un po' noiosa ma è necessario che sia chiara ed esauriente in quanto è una funzione che verrà utilizzata molto spesso nella stesura di qualsiasi programma. Facciamo ora una piccola parentesi con un'altra istruzione, molto semplice ma estremamente utile: gli Operatori. Quando si scrive del codice di programmazione in VBA è possibile eseguire delle operazioni sulle variabili usando degli operatori, vediamo di che tipo sono e come vanno usati

Operatori matematici

Somma (+)

Prodotto (*)

Sottrazione (-)

Divisione (/)

Operatori su stringhe

Concatenazione &

Operatori Logici

And, Or, NOT

Attenzione che gli operatori sono stati racchiusi tra parentesi al solo scopo di evidenziarli, ma vanno usati senza parentesi. Scriviamo questo codice in un modulo VBA

Sub Prova()
a = "Auguro a tutti"
b = "gli utenti del Pianeta"
c = "Buon Natale e Felice Anno Nuovo" >
MsgBox a & b & c
End Sub

%25233old_06.png Fig. 6

Otteniamo quanto vedete nella figura, ma se osservate attentamente noterete che ci sono delle frasi attaccate (tuttigli e PianetaBuon), modifichiamo allora il nostro codice in questo modo

Sub Prova1()
a = "Auguro a tutti"
b = "gli utenti del Pianeta"
c = "Buon Natale e Felice Anno Nuovo"MsgBox a & " " & b & " " &  c
End Sub

Con questo ulteriore concatenamento abbiamo inserito uno spazio vuoto tra una frase e l'altra, infatti la sintassi " " sta ad indicare uno spazio vuoto e di conseguenza la nostra scritta ci appare così

%25233old_07.png Fig. 7

Con questi operatori possiamo anche fare operazioni matematiche usando le variabili, se prendiamo questo codice, ricordando che le variabili Alex, Ale e Vik sono state dichiarate come Integer nella barra delle dichiarazioni quindi condivisibili in tutto il modulo

Sub somma()
Dim operator As Integer
alex = 10
Vik = 20
Ale = 30
operator = Ale - Vik + alex
MsgBox "Il risultato della tua operazione è" & " " & operator
End Sub

Questo codice equivale a: Prendi il valore della variabile Ale, sottrai il valore della variabile Vik e somma il valore della variabile Alex eseguendo questa macro ci verrà riportato questo avviso

%25233old_08.png Fig. 8

Il listato nella finestra del codice è il seguente

%25233old_09.png Fig. 9

Finora abbiamo sempre utilizzato il Box di messaggio con la funzione MsgBox nei nostri esempi, ma vediamo un po' in dettaglio come possiamo personalizzarlo usando le stesse macro ma cambiando la sintassi da usare per il box, ecco qualche codice

Sub prova_box1()
MsgBox "Buon Natale a tutti", vbExclamation
End Sub

%25233old_10.png Fig. 10

Sub prova_box2()
Dim auguri As String
auguri = MsgBox("Buon Natale a tutti", vbInformation + vbYesNo)
End Sub

%25233old_11.png Fig. 11

Sub prova_box3()
mt = mt & "Buon Natale a tutti gli utenti" & Chr(13)
mt = mt & "del Pianeta da tutto lo staff" & Chr(13)
mt = mt & "Schiaccia un pulsante" & Chr(13)
rs = MsgBox(prompt:=mt, Title:="Natale sul Pianeta con VBA", Buttons:=vbYesNo + vbQuestion)
End Sub

%25233old_12.png Fig. 12

Sub prova_box4()
MsgBox "Buona Pasqua a tutti", vbCritical + vbOKOnly, "Natale sul Pianeta con VBA "
End Sub

%25233old_13.png Fig. 13

come potete vedere nel primo box ci viene rimandato un avviso di attenzione e nel quarto un avviso di errore, con un pulsante solo di convalida, serve prevalentemente quando dobbiamo gestire degli errori, cioè quando nel nostro codice inseriamo un listato in cui si debbano eseguire delle operazioni in base a certe condizioni, usando i codici sopra esposti possiamo stabilire a priori che se le condizioni sono state soddisfatte verrà eseguita l'operazione richiesta nel codice, in caso contrario possiamo usare la sintassi descritta per avvisare che la condizione da verificare non è andata a buon fine e al tempo stesso abbiamo fermato l'esecuzione del codice e spostato il controllo della routine per evitare la generazione di un errore.

Nel secondo box invece possiamo operare delle scelte, l'avviso che compare ci riporta la caratteristica I a fumetto informativa che ci chiede conferma della scelta che stiamo per fare, la possiamo interpretare ed usare in questo modo "Sei sicuro di quello che hai scelto? vuoi procedere?" possiamo abbinare ai due pulsanti due diverse azioni, premendo sul tasto Si concediamo di eseguire l'operazione richiesta, mentre se premiamo sul pulsante No otterremo l'effetto descritto poco sopra per i box uno e quattro.

Il terzo box è uguale al secondo con la sola differenza che abbiamo personalizzato la barra del titolo, e abbiamo usato un'altra istruzione Chr(13) che rimanda a capo, corrisponde al codice Return Carriage, possiamo così creare box personalizzati cambiando il titolo da usare in più parti del programma.

Modificato da Alexsandra

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Accedi per seguire   
Seguaci 0