Discussione: Corso VBA
Visualizza messaggio singolo
Vecchio 10-11-2014, 02.34.00   #68
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
Variabili e tipi di dati



Prima di addentrarci nell'argomento della lezione faremo una panoramica su come vengono memorizzati vari tipi di informazioni come numeri, date e testi, in modo che possano essere distinti tra di loro e come possano essere manipolati ed elaborati. Per chiarire meglio l’argomento e cercare di capire di cosa stiamo parlando è opportuno occuparsi ora delle diverse tipologie di dati che può trattare VBA e anche dello spazio che questi dati occupano in memoria. Faremo ora alcune considerazioni sulla distinzione dei tipi di dato (tipo di un dato è il termine che fa riferimento alla particolare natura dei dati che il VBA può memorizzare e manipolare quali testo e numeri) e cercheremo di vedere come può un programma lavorare con dati di tipo diverso come stringhe (la stringa è una sequenza di caratteri di testo) e numeri.

Possiamo comprendere meglio quanto esposto e la sua importanza con un esempio. Prendiamo una sequenza di caratteri "17081974" a prima vista sembra trattarsi di un numero, ma potrebbe anche rappresentare una data, il 17 Agosto del 1974 oppure potrebbe essere un numero di telefono (170 81 974). Come facciamo allora a determinare che cosa rappresenta quella stringa?
Possiamo determinare cosa rappresenta la stringa in base all'uso che ne dobbiamo fare del dato. Se si tratta di un importo sicuramente usato per eseguire dei calcoli, di conseguenza si tratta di un numero, se invece rappresenta una data verrà utilizzata in modo particolare, si può sommare ma va trattata in modo diverso oppure se è un numero di telefono sappiamo che non può essere trattato per il calcolo anche se è costituito da una sequenza numerica

Da queste considerazioni nasce l’esigenza o la necessità di dover sapere sempre la natura e lo scopo di un dato all'interno di un programma. I vari tipi di dati possono essere di tipo: Booleano, Byte, Date, String, Integer, Single, Long, Double, Currency, Variant, I più utilizzati sono:
  • Byte : E’ di tipo numerico intero senza segno compreso nell’intervallo da 0 a 255
  • Integer : E’usato per rappresentare numeri interi (con segno) compresi fra -32768 a 32767
  • String : Può contenere delle sequenze di caratteri (stringhe) a lunghezza variabile oppure a lunghezza fissa
  • Long : Rappresenta numeri interi compresi fra -2,147,483,648 e 2,147,483,647,
  • Single e Double : Utilizzato per memorizzare numeri reali a singola o a doppia precisione
  • Boolean : E’ di tipo logico che può assumere il valore TRUE o FALSE (vero o falso)
  • Date : E’ utilizzato per memorizzare data e ora
  • Variant : E’ un tipo universale che può contenere dei dati di qualsiasi formato
Questi vari tipi di dati vengono memorizzati da VBA per poterli utilizzare come sotto forma di variabile che consentono di memorizzare temporaneamente dei valori durante l'esecuzione di un'applicazione. Alle variabili deve essere associato un nome, utilizzato per fare riferimento al valore della variabile, e un tipo di dati che determina la modalità di memorizzazione dei bit che rappresentano i valori nella memoria del computer.


Tipi di dati
Un tipo di dati indica al computer che tipo di variabile si intende utilizzare perché prima di utilizzare una variabile, si dovrebbe sapere quanto spazio occuperà in memoria. Diverse variabili utilizzano diverse quantità di spazio in memoria e le informazioni che specificano la quantità di spazio di cui ha bisogno la variabile è chiamato tipo di dati e viene misurato in byte. Per specificare il tipo di dati che verrà utilizzato per una variabile, dopo aver digitato la parola chiave Dim seguito dal nome della variabile si deve digitare la parola chiave As seguita da uno dei tipi di dati che esamineremo successivamente. La formula utilizzata è: Dim nome_variabile As tipo_dati

Abbiamo detto in precedenza che è possibile utilizzare diverse variabili se sono necessarie e quando si dichiara tali variabili, si possono dichiarare su righe separate e per specificare il tipo di dati si utilizza la stessa formula di cui sopra. Abbiamo anche visto che si possono dichiarare varie variabili sulla stessa riga a patto che siano separate con una virgola, ora se si specifica il tipo di dati di ogni variabile si usa la stessa regola, si digita la virgola dopo ogni variabile in questo modo: Dim Nome As tipo_dati, Cognome As tipo_dati

Il codice sopra esposto appare come se vi fosse un solo tipo di dati, di seguito passeremo in rassegna i vari tipi di valori che sono disponibili, e per dichiarare le variabili di tipi di dati diversi, si dichiara ognuna su una riga come abbiamo visto in precedenza. È inoltre possibile dichiarare variabili di tipi di dati diversi sulla stessa linea e per fare questo, si utilizza sempre la parola chiave Dim separando le dichiarazioni con le virgole.

Tipo di Caratteri
Per rendere la dichiarazione della variabile più veloce e anche conveniente, è possibile sostituire l’espressione As tipo_dati con un carattere speciale che rappresenta il tipo di dati previsto. Questo carattere si chiama Tipo di carattere e dipende dal tipo di dati che si intende applicare a una variabile e se viene utilizzato, il tipo di carattere deve essere l'ultimo carattere del nome della variabile. Vedremo quali caratteri sono disponibili e quando possono essere applicati

Valore di conversione
Ogni volta che l'utente inserisce un valore in un'applicazione, tale valore viene considerato in primo luogo come testo, ciò significa che, se si desidera utilizzare tale valore in un'espressione o un calcolo che prevede un valore specifico diverso dal testo, è necessario convertire quel testo. Fortunatamente, Microsoft Visual Basic fornisce un meccanismo efficace per convertire un valore di testo di uno degli altri valori che vedremo dopo. Per convertire il testo ad un altro valore, vi è una parola chiave adatta allo scopo e che dipende dal tipo di valore in cui si desidera convertirlo.

Variabili numeriche - Integer
Se vogliamo utilizzare un numero nel programma, Visual Basic è in grado di riconoscere un numero naturale qualsiasi che non include una parte frazionaria e il numero è costituito da una combinazione di 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9, nessun altro carattere è consentito.

Byte
Per dichiarare una variabile che conterrebbe numeri naturali che vanno da 0 a 255, si utilizza come tipo di dati Byte. In questo modo:Dim AnniServizio As Byte
Non esiste un tipo di carattere per il tipo di dati Byte e dopo aver dichiarato la variabile, è possibile assegnare un piccolo numero positivo.

Codice:
Dim Valore As Byte
Valore = 246
È inoltre possibile utilizzare il numero in formato esadecimale fino a quando il numero è inferiore a 255 e se si dà un valore negativo o un valore superiore a 255, quando si tenta di accedervi, si riceverà un errore. Per convertire un testo in un numero piccolo, è possibile utilizzare la funzione CByte () utilizzando la seguente formula: Numero = CByte (Valore da convertire a Byte) si ricorda che quando si utilizza CByte (), si deve immettere il valore da convertire tra parentesi.

Integer
Per dichiarare una variabile che potrebbe contenere un numero che varia -32.768 a 32.767, si utilizza come tipo di dati Integer con questa sintassi: Dim conta As Integer
Invece di utilizzare l’espressione As Integer, è possibile utilizzare il carattere % come tipo di dati, pertanto, la dichiarazione di cui sopra può essere fatta come segue: Dim conta %

Dopo aver dichiarato la variabile, è possibile assegnarle il valore desiderato, se si assegna un valore inferiore a -32768 o superiore a 32767, quando si decide di usarla, si riceverà un errore. Se si vuole convertire un testo in un numero, si può usare la funzione CInt () utilizzando la seguente formula: Numero = CInt (Valore da convertire) dove tra le parentesi di CInt () si deve inserire il testo, o l'espressione che deve essere convertita.

Long
Un intero Long è un numero che può essere utilizzato per una variabile che coinvolge un numero maggiore di Integer, pertanto per dichiarare una variabile che potrebbe contenere un numero così elevato, si utilizza il tipo di dati Long in questo modo: Dim Popolazione As Long
Il tipo di carattere per il tipo di dati Long è @, pertanto la variabile di cui sopra può essere dichiarata come segue: Dim Popolazione @

Una variabile Long può memorizzare un valore compreso tra -2,147,483,648 e 2,147,483,647 (le virgole sono usate per facilitare la lettura, non devono essere utilizzati nel codice), pertanto, dopo aver dichiarato una variabile Long, è possibile assegnare un numero in tale intervallo. Per convertire un valore testo in un intero Long, si usa l’espressione CLng () utilizzando la seguente formula: Numero = CLng (Valore da convertire), ricordando di inserire nelle parentesi di CLng () il testo da convertire

Single
Nella programmazione, un numero decimale è quello che rappresenta una frazione, esempi sono 1.85 e 426,88. Se si prevede di utilizzare una variabile che sarebbe di quel tipo di numero, ma la precisione non è la vostra preoccupazione principale, si dichiara come tipo di dati Single così: Dim Distanza As Single
Il tipo di carattere per il tipo di dati Single è ! pertanto la dichiarazione di cui sopra potrebbe essere scritta in questo modo: Dim Distanza !

Se si dispone di un valore testo che deve essere convertito, si utilizza la funzione CSng () con la seguente formula: Numero = CSng (Valore da convertire), nelle parentesi di CSng () immettere il valore da convertire.

Double
Se si desidera utilizzare un numero decimale che richiede una buona dose di precisione, si dichiara una variabile con tipo di dati Double con questa sintassi: Dim Distanza As Double . Invece di As Double, è possibile utilizzare il tipo di carattere # in questo modo: Dim Distanza #

Per convertire un valore testo in Double si utilizza la funzione CDbl () con la seguente formula: Numero = CDbl (Valore da convertire) inserendo nelle parentesi di CDbl () , il valore che deve essere convertito.

String
Una stringa è un carattere o una combinazione di caratteri che costituiscono il testo di qualsiasi tipo e quasi qualsiasi lunghezza. Per dichiarare una variabile di tipo stringa, si utilizza come tipo di dati String in questo modo: Dim Paese As String. Il tipo di carattere per i dati String è $, pertanto, la dichiarazione di cui sopra può essere scritta come: Dim Paese $

Come già detto, dopo aver dichiarato una variabile, è possibile assegnarle un valore, nel caso di una variabile stringa il valore deve essere incluso all'interno di doppi apici in questo modo:

Codice:
Dim Paese As String
Paese = "Italia"
Se si dispone di un valore che non è in formato testo e si desidera convertirlo in una stringa, si deve utilizzare la funzione CStr () con la seguente formula: CStr (valore da convertire in stringa), inserendo nelle parentesi di CStr (), il valore che si desidera convertire in stringa.

Currency - Valuta
Il tipo di dati valuta viene utilizzato per trattare valori monetari. Ecco un esempio di dichiarazione: Dim Salario As Currency . Invece di utilizzare la valuta come espressione, è possibile utilizzare il carattere @ come tipo di dati per dichiarare una variabile di valuta così: Dim Salario @
Quando si assegna un valore a una variabile Currency non si deve utilizzare il simbolo di valuta. Ecco un esempio di assegnazione di un numero di valuta per una variabile:

Codice:
Dim Salario As Currency    
    Salario = 66500
Se si desidera convertire un valore in Currency, si deve utilizzare la funzione CCur () con la seguente formula: Number = CCur (Valore da convertire), inserendo il valore da convertire tra le parentesi di CCur () .

Date - Data
Una data come tipo di dati può essere utilizzata per memorizzare un valore data, pertanto, per dichiarare una variabile data si utilizza come tipo di dati Date in questo modo: Dim Data_nascita As Date. Dopo aver dichiarato la variabile, è possibile assegnare un valore, che deve essere compreso tra due simboli # (cancelletto). Ecco un esempio:

Codice:
 Dim Data_nascita As Date  
Data_nascita = # 10/8/1988 #
Se si dispone di una stringa o un'espressione che si desidera convertire in un valore data, si deve utilizzare la funzione CDate () in base alla seguente formula: Risultato = CDate (Valore da convertire), inserendo nelle parentesi di CDate (), il valore che deve essere convertito.

Time
In Visual Basic, il tipo di dati Date può essere utilizzato anche per memorizzare un valore di tempo, ecco un esempio di dichiarazione di una variabile che può contenere un valore di tempo: Dim tempo As Date
Per assegnare un valore alla variabile si segue la sintassi della funzione Date

Variant
Fino ad ora, abbiamo dichiarato variabili conoscendone il tipo di valore che dovevano contenere, VBA offre un tipo di dati universale che è possibile utilizzare per qualsiasi tipo di valore, il tipo di dati Variant. Questo tipo di dati viene utilizzato per dichiarare una variabile il cui contenuto non è esplicitamente specificato, ciò significa che un tipo di dati Variant può contenere qualsiasi tipo di valore che si desidera. Ecco alcuni esempi di variabili di tipo Variant, che contengono diversi tipi di valori:

Codice:
Sub Test ()
    Dim Nome, Paese, Salario, DataN As Variant
    Nome = "Eva Kant"
    Paese = 2
    Salario = 35.65
    DataN = # 24/02/2004#
End Sub
Durata di una variabile
Fino ad ora, abbiamo dichiarato le variabili tra le linee di codice Sub e End Sub, questo tipo di variabile è definita come variabile locale. Una variabile locale è limitata alla zona in cui è dichiarata, in pratica non è possibile utilizzare tali variabili al di fuori della Sub in cui è stata dichiarata. Ecco un esempio:

Codice:
Option Explicit
Sub Test ()
    Dim Nome As String
    Nome = "Eva"
End Sub
Variabili globali
Una variabile globale è una variabile dichiarata al di fuori della Sub e questo tipo di variabile è normalmente dichiarata nella sezione superiore del file. Ecco un esempio:

Codice:
Option Explicit
Dim Cognome As String

Sub Test ()
   ..... 
End Sub
Dopo aver dichiarato una variabile globale, è possibile accedervi dalle altre aree del file. Ecco un esempio:

In Modulo1

Codice:
Option Explicit
Dim Cognome As String

In Modulo2

Sub Test ()
    Dim Nome As String
    Nome = "Eva"
    Cognome = "Kant" 
End Sub
Anche se abbiamo dichiarato la nostra variabile globale all'interno del file in cui è stato utilizzato, è anche possibile dichiarare una variabile globale in un modulo separato per essere in grado di utilizzarlo in un altro modulo.

Variabili private
Una variabile è indicata come Private se può accedere solo al codice all'interno dello stesso modulo, dove viene utilizzato. Per dichiarare una tale variabile, invece della parola chiave Dim, si utilizza la parola chiave Private. Ecco un esempio:

Codice:
Option Explicit
Private Cognome As String

Sub Test ()
    Dim Nome As String
    Nome = "Eva"
    Cognome = "Kant"
End Sub
Ricordate che una variabile privata è accessibile da qualsiasi codice nello stesso modulo

Variabili pubbliche
Una variabile è denominata Public se si può accedere al codice sia all'interno dello stesso modulo in cui è dichiarata o dal codice esterno relativo modulo. Per dichiarare una variabile pubblica, invece della parola chiave Dim, si utilizza la parola chiave Public. Ecco un esempio:

Codice:
Option Explicit
Private Cognome As String
Public Nome_esteso As String

Sub Test ()
    Dim Nome As String
    Nome = "Eva"
    Cognome = "Kant"
    Nome_esteso = Nome & "" & Cognome
End Sub
Come promemoria possiamo affermare che una variabile pubblica è disponibile per codificare dentro e fuori dal suo modulo, ciò significa che è possibile creare un modulo, dichiarare una variabile pubblica, e accedere a quella variabile da un altro modulo, mentre una variabile privata è disponibile all'interno del suo modulo, ma non al di fuori dello stesso. Se si dichiara una variabile privata in un modulo e si prova ad accedervi da un altro modulo, si riceverà un errore:

Codice:
Modulo 1 :

Option Explicit
Private Cognome As String

Modulo 2 :

Option Explicit
Private Cognome As String
Private Nome As String

Sub Test ()
    Nome = "Eva"
    Cognome = "Kant"
    Nome_esteso = Nome & "" & Cognome
    ActiveCell.FormulaR1C1 = Nome_esteso
End Sub
___________________________________

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