Comprensione dei tipi di dati VBA di Excel (variabili e costanti)

In Excel VBA, ti verrebbe spesso richiesto di utilizzare variabili e costanti.

Quando si lavora con VBA, una variabile è una posizione nella memoria del computer in cui è possibile memorizzare i dati. Il tipo di dati che è possibile memorizzare in una variabile dipende dal tipo di dati della variabile.

Ad esempio, se si desidera memorizzare numeri interi in una variabile, il tipo di dati sarà "Intero" e se si desidera memorizzare il testo, il tipo di dati sarà "Stringa".

Ulteriori informazioni sui tipi di dati più avanti in questo tutorial.

Mentre il valore di una variabile cambia quando il codice è in corso, una costante contiene un valore che non cambia mai. Come buona pratica di codifica, dovresti definire il tipo di dati di entrambi: variabile e costante.

Perché utilizzare le variabili in VBA?

Quando si codifica in VBA, sono necessarie variabili che è possibile utilizzare per contenere un valore.

Il vantaggio dell'utilizzo di una variabile è che è possibile modificare il valore della variabile all'interno del codice e continuare a utilizzarlo nel codice.

Ad esempio, di seguito è riportato un codice che aggiunge i primi 10 numeri positivi e quindi visualizza il risultato in una finestra di messaggio:

Sub AddFirstTenNumbers() Dim Var As Integer Dim i As Integer Dim k as Integer For i = 1 To 10 k = k + i Next i MsgBox k End Sub

Ci sono tre variabili nel codice sopra - Var, io, e K.

Il codice precedente utilizza un ciclo For Next in cui tutte e tre queste variabili vengono modificate man mano che i cicli vengono completati.

L'utilità di una variabile sta nel fatto che può essere modificata mentre il codice è in corso.

Di seguito sono riportate alcune regole da tenere a mente quando si nominano le variabili in VBA:

  1. Puoi usare alfabeti, numeri e segni di punteggiatura, ma il primo numero deve essere un alfabeto.
  2. Non è possibile utilizzare lo spazio o il punto nel nome della variabile. Tuttavia, puoi utilizzare un carattere di sottolineatura per rendere più leggibili i nomi delle variabili (come Interest_Rate)
  3. Non è possibile utilizzare caratteri speciali (#, $, %, & o !) nei nomi delle variabili
  4. VBA non distingue tra il caso nel nome della variabile. Quindi "InterestRate" e "interestrate" sono gli stessi per VBA. È possibile utilizzare caratteri misti per rendere più leggibili le variabili.
  5. VBA ha alcuni nomi riservati che puoi usare per un nome di variabile. Ad esempio, non è possibile utilizzare la parola "Avanti" come nome di variabile, poiché è un nome riservato per il ciclo For Next.
  6. Il nome della variabile può essere lungo fino a 254 caratteri.

Tipo di dati delle variabili

Per utilizzare al meglio le variabili, è buona norma specificare il tipo di dati della variabile.

Il tipo di dati che assegni a una variabile dipenderà dal tipo di dati che desideri che la variabile contenga.

Di seguito è riportata una tabella che mostra tutti i tipi di dati disponibili che è possibile utilizzare in Excel VBA:

Tipo di dati Byte utilizzati Gamma di valori
Byte 1 byte da 0 a 255
booleano 2 byte Vero o falso
Numero intero 2 byte da -32.768 a 32.767
Lungo (intero lungo) 4 byte da -2.147.483.648 a 2.147.483.647
Separare 4 byte da -3.402823E38 a -1.401298E-45 per valori negativi; Da 1.401298E-45 a 3.402823E38 per valori positivi
Doppio 8 byte da -1.79769313486231E308 a-4.94065645841247E-324 per valori negativi; 4.94065645841247E-324 a 1.79769313486232E308 per valori positivi
Moneta 8 byte -922.337.203.685.477,5808 a 922.337.203.685.477,5807
Decimale 14 byte +/-79.228.162.514.264.337.593.543.950.335 senza punto decimale; +/-7.9228162514264337593543950335 con 28 cifre a destra della virgola
Data 8 byte 1 gennaio 100 al 31 dicembre 9999
Oggetto 4 byte Qualsiasi riferimento all'oggetto
Stringa (lunghezza variabile) 10 byte + lunghezza della stringa Da 0 a circa 2 miliardi
Stringa (lunghezza fissa) Lunghezza della corda da 1 a circa 65.400
Variante (con numeri) 16 byte Qualsiasi valore numerico fino all'intervallo di un Double
Variante (con caratteri) 22 byte + lunghezza della stringa Stesso intervallo della stringa a lunghezza variabile
Definito dall'utente Varia L'intervallo di ciascun elemento è uguale all'intervallo del relativo tipo di dati.

Quando specifichi un tipo di dati per una variabile nel tuo codice, indica a VBA come memorizzare questa variabile e quanto spazio allocare per essa.

Ad esempio, se è necessario utilizzare una variabile destinata a contenere il numero del mese, è possibile utilizzare il tipo di dati BYTE (che può contenere valori da 0 a 255). Poiché il numero del mese non sarà superiore a 12, funzionerà correttamente e riserverà anche meno memoria per questa variabile.

Al contrario, se hai bisogno di una variabile per memorizzare i numeri di riga in Excel, devi utilizzare un tipo di dati che può contenere un numero fino a 1048756. Quindi è meglio usare il tipo di dati Long.

Dichiarazione dei tipi di dati variabili

Come buona pratica di codifica, dovresti dichiarare il tipo di dati delle variabili (o costanti) quando scrivi il codice. In questo modo si assicura che VBA allochi solo la memoria specificata alla variabile e questo può velocizzare l'esecuzione del codice.

Di seguito è riportato un esempio in cui ho dichiarato diversi tipi di dati per variabili diverse:

Sub DeclaringVariables() Dim X As Integer Dim Email As String Dim FirstName As String Dim RowCount As Long Dim TodayDate As Date End Sub

Per dichiarare un tipo di dati variabile, è necessario utilizzare l'istruzione DIM (abbreviazione di Dimension).

Nel 'Dim X come numero intero', ho dichiarato la variabile X come tipo di dati Integer.

Ora, quando lo uso nel mio codice, VBA saprebbe che X può contenere solo tipi di dati interi.

Se provo ad assegnargli un valore che non è un numero intero, otterrò un errore (come mostrato di seguito):

Nota: puoi anche scegliere di non dichiarare il tipo di dati, nel qual caso VBA considera automaticamente la variabile del tipo di dati variant. Un tipo di dati variant può ospitare qualsiasi tipo di dati. Sebbene ciò possa sembrare conveniente, non è una buona pratica utilizzare il tipo di dati variante. Tende a occupare più memoria e può rallentare l'esecuzione del codice VBA.

Rendere obbligatoria la dichiarazione delle variabili (opzione esplicita)

Sebbene tu possa codificare senza mai dichiarare variabili, è una buona pratica farlo.

Oltre a risparmiare memoria e rendere il codice più efficiente, la dichiarazione delle variabili ha un altro grande vantaggio: aiuta a intercettare gli errori causati da nomi di variabili errati.

Per assicurarti di essere obbligato a dichiarare variabili, aggiungi la seguente riga all'inizio del modulo.

Opzione esplicita

Quando aggiungi "Option Explicit", ti verrà richiesto di dichiarare tutte le variabili prima di eseguire il codice. Se è presente una variabile che non è stata dichiarata, VBA mostrerebbe un errore.

C'è un enorme vantaggio nell'usare Option Explicit.

A volte, potresti finire per commettere un errore di battitura e inserire un nome di variabile che non è corretto.

Normalmente, non c'è modo per VBA di sapere se si tratta di un errore o se è intenzionale. Tuttavia, quando si utilizza "Option Explicit", VBA vedrebbe il nome della variabile errata come una nuova variabile che non è stata dichiarata e mostrerà un errore. Questo ti aiuterà a identificare questi nomi di variabili errati, che possono essere piuttosto difficili da individuare in un codice lungo.

Di seguito è riportato un esempio in cui l'utilizzo di "Option Explicit" identifica l'errore (che non avrebbe potuto essere intercettato se non avessi utilizzato "Option Explicit")

Sub CommissionCalc() Dim CommissionRate As Double If Range("A1").Value > 10000 Then CommissionRate = 0.1 Else CommissionRtae = 0.05 End If MsgBox "Total Commission: " & Range("A1").Value * CommissionRate End Sub

Nota che ho sbagliato a scrivere la parola "CommissionRate" una volta in questo codice.

Se non utilizzo Option Explicit, questo codice verrebbe eseguito e mi darebbe il valore della commissione totale errato (nel caso in cui il valore nella cella A1 sia inferiore a 10000).

Ma se uso Option Explicit nella parte superiore del modulo, non mi consentirà di eseguire questo codice prima di correggere la parola errata o di dichiararla come un'altra variabile. Mostrerà un errore come mostrato di seguito:

Sebbene tu possa inserire la riga "Option Explicit" ogni volta che esegui il codice, ecco i passaggi per farlo apparire per impostazione predefinita:

  1. Nella barra degli strumenti di VB Editor, fare clic su Strumenti.
  2. Fare clic su Opzioni.
  3. Nella finestra di dialogo Opzioni, fare clic sulla scheda Editor.
  4. Seleziona l'opzione - "Richiedi dichiarazione variabile".
  5. Fare clic su OK.

Dopo aver abilitato questa opzione, ogni volta che apri un nuovo modulo, VBA aggiungerà automaticamente la riga "Opzione esplicita" ad esso.

Nota: questa opzione avrà effetto solo su qualsiasi modulo che crei dopo che questa opzione è stata abilitata. Tutti i moduli esistenti non sono interessati.

Ambito delle variabili

Finora abbiamo visto come dichiarare una variabile e assegnarle tipi di dati.

In questa sezione tratterò l'ambito delle variabili e come è possibile dichiarare una variabile da utilizzare solo in una subroutine, in un intero modulo o in tutti i moduli.

L'ambito di una variabile determina dove può essere utilizzata la variabile in VBA,

Esistono tre modi per definire l'ambito di una variabile in Excel VBA:

  1. All'interno di una singola subroutine (Variabili locali)
  2. All'interno di un modulo (variabili a livello di modulo)
  3. In tutti i moduli (Variabili pubbliche)

Diamo un'occhiata a ciascuno di questi in dettaglio.

All'interno di una singola subroutine (variabili locali)

Quando dichiari una variabile all'interno di una subroutine/procedura, quella variabile è disponibile solo per quella subroutine.

Non è possibile utilizzarlo in altre subroutine del modulo.

Non appena termina la subroutine, la variabile viene cancellata e la memoria da essa utilizzata viene liberata.

Nell'esempio seguente, le variabili sono dichiarate all'interno della subroutine e verrebbero eliminate al termine di questa subroutine.

All'interno di un modulo (variabili a livello di modulo)

Quando vuoi che una variabile sia disponibile per tutte le procedure in un modulo, devi dichiararla all'inizio del modulo (e non in nessuna subroutine).

Una volta dichiarato nella parte superiore del modulo, è possibile utilizzare quella variabile in tutte le procedure in quel modulo.

Nell'esempio sopra, la variabile 'i' è dichiarata nella parte superiore del modulo ed è disponibile per essere utilizzata da tutti i moduli.

Notare che quando la subroutine termina, le variabili a livello di modulo non vengono cancellate (mantiene il suo valore).

Di seguito è riportato un esempio, in cui ho due codici. Quando eseguo la prima procedura e poi eseguo la seconda, il valore di "i" diventa 30 (poiché porta il valore di 10 dalla prima procedura)

In tutti i moduli (variabili pubbliche)

Se vuoi che una variabile sia disponibile in tutte le procedure della cartella di lavoro, devi dichiararla con la parola chiave Public (anziché DIM).

La riga di codice sottostante nella parte superiore del modulo renderebbe disponibile la variabile "CommissionRate" in tutti i moduli della cartella di lavoro.

 Commissione pubblica Valuta il doppio

Puoi inserire la dichiarazione della variabile (usando la parola chiave Public), in uno qualsiasi dei moduli (in alto prima di qualsiasi procedura).

Variabili statiche (che mantiene il valore)

Quando lavori con variabili locali, non appena la procedura finisce, la variabile perderebbe il suo valore e verrebbe cancellata dalla memoria di VBA.

Nel caso in cui si desideri che la variabile mantenga il valore, è necessario utilizzare il Statico parola chiave.

Lascia che ti mostri prima cosa succede in un caso normale.

Nel codice seguente, quando eseguo la procedura più volte, mostrerà il valore 10 ogni volta.

Sub Procedure1() Dim i As Integer i = i + 10 MsgBox i End Sub

Ora, se utilizzo la parola chiave Static invece di DIM ed eseguo la procedura più volte, continuerà a mostrare i valori con incrementi di 10. Ciò accade poiché la variabile "i" mantiene il suo valore e lo utilizza nel calcolo.

Sub Procedure1() Static i As Integer i = i + 10 MsgBox i End Sub

Dichiarazione di costanti in Excel VBA

Sebbene le variabili possano cambiare durante l'esecuzione del codice, se si desidera avere valori fissi, è possibile utilizzare le costanti.

Una costante consente di assegnare un valore a una stringa denominata che è possibile utilizzare nel codice.

Il vantaggio dell'utilizzo di una costante è che semplifica la scrittura e la comprensione del codice e consente inoltre di controllare tutti i valori fissi da un'unica posizione.

Ad esempio, se stai calcolando le commissioni e il tasso di commissione è del 10%, puoi creare una costante (CommissionRate) e assegnarle il valore 0.1.

In futuro, se il tasso di commissione cambia, devi solo apportare la modifica in un punto invece di modificarla manualmente nel codice ovunque.

Di seguito è riportato un esempio di codice in cui ho assegnato un valore alla costante:

Sub CalculateCommission() Dim CommissionValue As Double Const CommissionRate As Double = 0.1 CommissionValue = Range("A1") * CommissionRate MsgBox CommissionValue End Sub

La riga seguente viene utilizzata per dichiarare la costante:

Const CommissionRate As Double = 0.1

Quando si dichiarano le costanti, è necessario iniziare con la parola chiave "Const', seguito dal nome della costante.

Nota che ho specificato il tipo di dati della costante come Double in questo esempio. Ancora una volta, è una buona pratica specificare il tipo di dati per rendere il tuo codice più veloce ed essere più efficiente.

Se non dichiari il tipo di dati, verrebbe considerato come un tipo di dati variant.

Proprio come le variabili, anche le costanti possono avere un ambito in base a dove e come vengono dichiarate:

  1. All'interno di una singola subroutine (Costanti locali): Questi sono disponibili nella subroutine/procedura in cui sono dichiarati. Al termine della procedura, queste costanti vengono cancellate dalla memoria del sistema.
  2. All'interno di un modulo (costanti a livello di modulo): Questi sono dichiarati nella parte superiore del modulo (prima di qualsiasi procedura). Questi sono disponibili per tutte le procedure nel modulo.
  3. In tutti i moduli (costanti pubbliche): Questi sono dichiarati usando la parola chiave 'Public', nella parte superiore di ogni modulo (prima di ogni procedura). Questi sono disponibili per tutte le procedure in tutti i moduli.

Potrebbero piacerti anche i seguenti tutorial VBA:

  • Come registrare una macro in Excel
  • Lavorare con celle e intervalli in Excel VBA
  • Lavorare con i fogli di lavoro utilizzando Excel VBA
  • Lavorare con le cartelle di lavoro in Excel VBA
  • Eventi VBA
  • Cicli VBA di Excel
  • Come eseguire una macro in Excel
  • Istruzione If Then Else in Excel VBA.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave