Utilizzo di variabili nelle subroutine di Excel in Visual Basic Applications Edition

Traduzione articoli Traduzione articoli
Identificativo articolo: 843144 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

INTRODUZIONE

In questo articolo viene descritto come utilizzare le variabili nelle subroutine di Microsoft Excel in Microsoft Visual Basic Applications Edition.

Informazioni

Variabili in una subroutine

Una potente funzionalità dei linguaggio di programmazione è la capacità di archiviare elementi in una variabile in modo che il contenuto della variabile possa essere utilizzato o modificato successivamente nella routine. In questo documento viene trattato il seguente utilizzo delle variabili in Visual Basic:
  • Modalità di dichiarazione delle variabili
  • Routine e progetti in grado di utilizzare la variabile
  • Durata di una variabile

Dichiarare una variabile in una macro

Il modo più semplice per dichiarare una variabile in una macro è utilizzare l'istruzione Dim. Nella riga seguente vengono dichiarate due variabili, x e y, come intere:
 Dim x As Integer, y As Integer
Con x e y specificati come interi, si indica a Visual Basic di mettere da parte memoria sufficiente per una variabile intera (2 byte ciascuna per x e y) e che le informazioni archiviati per x o y sino un numero intero compreso tra -32768 e 32767.

Nota Se si dichiarano più variabili utilizzando una sola istruzione Dim, è necessario specificare il tipo di dati per ciascuna variabile.

Se non si specifica il tipo di dati per ciascuna variabile, come nel seguente codice di Visual Basic, viene impostata come variabile di tipo Integer solo la variabile y. La variabile x sarà un tipo variant.
Dim x, y As Integer
Per ulteriori informazioni, vedere la sezione "Tipo di dati Variant".

Per effettuare un test delle variabili, attenersi alla procedura seguente:
  1. Salvare e chiudere eventuali cartelle di lavoro aperte, quindi aprire una nuova cartella di lavoro.
  2. Avviare Visual Basic Editor premendo ALT+F11.
  3. Scegliere Modulo dal menu Inserisci.
  4. Digitare il seguente codice:
     Sub Variable_Test()
    Dim x As Integer, y As Integer
    x = 10
    y = 100
    MsgBox "il valore di x è"  &x & _
    Chr (13) & "è il valore di y"  &y
    End Sub 
  5. Eseguire la macro Variable_Test. Verrà visualizzato un messaggio analogo al seguente:
    the value of x is 10 (il valore di x è 10)
    the value of y is 100 (il valore di y è 100)
  6. Scegliere OK.
  7. Nella macro Variable_Test modificare la riga seguente:
    x = 10
    

    to:
    x = "error"
    
  8. Eseguire la macro Variable_Test.
Verrà visualizzato un errore di runtime poiché "error" non è un valore di tipo Integer e si sta tentando di assegnare tale valore di stringa alla variabile x di tipo Integer.

Riepilogo dei tipi di dati

Nella tabella seguente sono elencati i tipi di dati variabili comuni:

Riduci questa tabellaEspandi questa tabella
Tipo di datiDimensione di archiviazioneIntervallo consentito
Boolean 2 byte True o False
Integer 2 byte da -32.768 a 32.767
Long 4 byte da -2.147.483.648 a 2.147.483.647
Double 8 byte da -1,79769313486232E308 a -4,94065645841247E-324 per i valori negativi; da 4,94065645841247E-324 a 1,79769313486232E308 per i valori positivi
Valuta 8 byte da -922.337.203.685.477,5808 a 922.337.203.685.477,5807
Data 8 byte dal 1° gennaio 100 al 31 dicembre 9999
Stringa 10 byte + la lunghezza della stringa

Tipo di dati Variant

Se non si specifica un tipo di dati quando si dichiara una variabile o non si dichiara affatto una variabile, Visual Basic specifica automaticamente il tipo di dati Variant per questa variabile Di seguito vengono riportati i vanataggi delle variabili dichiarate con questo tipo di dati:
  • Le variabili possono contenere valori di tipo stringa, data, ora, booleani o numerici.
  • Le variabili possono convertire automaticamente i valori che contengono.
Lo svantaggio è che le variabili di tipo Variant richiedono almeno 16 byte di memoria, che possono essere molti in routine di grandi dimensioni o in moduli complessi.

Per visualizzarne il funzionamento nella macro Variable_Test, attenersi alla procedura seguente:
  1. Modificare il codice della macro Variable_Test nel modo seguente:
     Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "il valore di x è " & x & _
    Chr (13) & "il valore di y è"  &y
    End Sub
    
  2. Eseguire la macro Variable_Test.
Non verrà visualizzato alcun errore perché è possibile assegnare qualsiasi valore alle variabili di tipo Variant x e y.

Nota È anche possibile omettere la riga seguente; la macro continuerà a funzionare in quanto le variabili x e y vengono trattate come tipi di dati Variant:
Dim x, y

Ambito della variabile

Quando si dichiara una variabile, può essere o non essere visualizzata da altre macro dello stesso modulo o di altri moduli o in altri progetti. A questa disponibilità di una variabile nei moduli si fa riferimento con il termine ambito. I tre tipi di ambito sono il livello di routine, il livello di modulo privato e il livello di modulo pubblico. L'ambito dipende da come e dove si dichiarano le variabili.

Ambito a livello di routine

Una variabile con un ambito a livello di routine non viene visualizzata al di fuori della routine in cui è dichiarata. Se si imposta il valore di una variabile il cui ambito è il livello di routine, il contenuto di tale variabile non viene visto dalle altre macro.

Per verificare se una variabile il cui ambito è il livello di routine non viene vista al di fuori della routine in cui è dichiarata, attenersi alla procedura seguente:
  1. Inserire un nuovo modulo nel progetto.
  2. Digitare entrambe le macro seguenti in questo modulo:
    Sub Macro1()
    Dim I As Integer
    x = 10
    MsgBox "x, as seen by Macro1 is " & x
    'the next line runs Macro2
    Macro2
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Run Macro1.

    Verrà visualizzato un messaggio analogo al seguente:
    x, as seen by Macro1 is 10 (x, così come vista da Macro1, è 10)
  4. Scegliere OK.

    Verrà visualizzato un messaggio analogo al seguente:
    x, as seen by Macro2 is (x, così come vista da Macro2, è)
  5. Scegliere OK.
Macro2 non visualizza un valore per la variabile x perché quest'ultima si trova nell'ambito di Macro1.

Ambito a livello di modulo privato e pubblico

È possibile definire variabili nella sezione delle dichiarazioni di un modulo (all'inizio di un modulo, sopra tutte le subroutine) e impostare l'ambito della variabile utilizzando l'istruzione Public, l'istruzione Dim o l'istruzione Private. Se si colloca l'istruzione Public prima della variabile, quest'ultima diventa disponibile per tutte le macro in tutti i moduli del progetto. Se prima della variabile viene collocata l'istruzione Dim o Private, tale variabile è disponibile solo per le macro del modulo in cui viene dichiarata.

Per vedere la differenza tra l'istruzione Public e l'istruzione Dim, attenersi alla procedura seguente:
  1. Salvare e chiudere eventuali cartelle di lavoro aperte, quindi aprire una nuova cartella di lavoro.
  2. Avviare Visual Basic Editor.
  3. Inserire un modulo nel progetto.
  4. Digitare nel modulo il codice riportato di seguito:
    Public x As Integer
    Sub Macro_1a()
    x = 10
    MsgBox x
    Macro_1b
    End Sub
    Sub Macro_1b()
    x = x * 2
    MsgBox x
    Macro2
    End Sub
    
  5. Inserire un altro modulo nel progetto.
  6. Digitare nel modulo il codice riportato di seguito:
    Sub Macro2()
    x = x * 3
    MsgBox x
    End Sub
    
  7. Eseguire la macro Macro_1a del primo modulo.

    Con la variabile x dichiarata come "Public x As Integer", tutte e tre le macro del progetto hanno accesso al valore di x. Nella prima finestra di messaggio viene visualizzato il valore 10, mentre nella seconda viene visualizzato il valore 20, in quanto x viene moltiplicato per 2 in Macro_1b. Nella terza finestra di messaggio viene visualizzato il valore 60, poiché il valore di x è stato modificato in 20 in Macro_1b e quindi moltiplicato per 3 in Macro2.
  8. Modificare la riga della dichiarazione del primo modulo da:
    Public x As Integer

    to:
    Dim x As Integer
  9. Eseguire la macro Macro_1a.

    Con la variabile x dichiarata come "Dim x As Integer", solo le macro del primo modulo hanno accesso al valore di x. Pertanto nella prima finestra di messaggio viene visualizzato il valore 10, nella seconda il valore 20 (perché x viene moltiplicato per 2 in Macro_1b) e nella terza il valore 0 (perché Macro2 non vede il valore di x e quindi Macro 2 utilizza il valore non inizializzato zero).
  10. Modificare la riga della dichiarazione del primo modulo da:
    Dim x As Integer

    to:
    Private x As Integer
  11. Eseguire la macro Macro_1a.
Utilizzando l'ambito dell'istruzione Private vengono visualizzate le stesse finestre di messaggio di quando si è utilizzata l'istruzione Dim. La variabile x ha il medesimo ambito, che è privato per il modulo in cui è dichiarata.

Nota Se si desidera che l'ambito della variabile sia limitato al modulo in cui è dichiarata, utilizzare l'istruzione Private anziché l'istruzione Dim. Entrambe consentono di conseguire lo stesso effetto, ma l'ambito è più chiaro quando si legge il codice qualora si utilizza l'istruzione Private.

Durata di una variabile

Il tempo per cui una variabile conserva il suo valore è detto durata. Il valore di una variabile può cambiare nel corso della durata ma la variabile conserva comunque un valore. Inoltre, quando una variabile perde l'ambito, non ha più un valore.

Inizializzare il valore di una variabile

Quando si esegue una macro, tutte le variabili vengono inizializzate con tale valore. Una variabile numerica viene inizializzata su zero, una stringa a lunghezza variabile viene inizializzata su una stringa di lunghezza zero (""), mentre una stringa a lunghezza fissa viene riempita con il codice ASCII 0. Le variabili di tipo Variant vengono inizializzate su Empty. Una variabile Empty è rappresentata da uno zero in un contesto numerico e da una stringa a lunghezza zero ("") in un contesto di stringa.

Variabili a livello di routine

In presenza di una variabile dichiarata in una macro utilizzando l'istruzione Dim, la variabile conserva il suo valore finché la macro è in esecuzione. Se tale macro chiama altre macro, il valore della variabile viene conservato (sebbene non disponibile per le altre macro) finché tutte queste altre macro sono in esecuzione.

Per visualizzare il funzionamento delle variabili a livello di routine, attenersi alla procedura seguente:
  1. Inserire un nuovo modulo nel progetto.
  2. Digitare entrambe le macro seguenti in questo modulo:
    Sub Macro1()
    'set x as a procedure level variable
    Dim x As Integer
       MsgBox "the initialized value of x is " & x
    x = 10
    MsgBox "x is " & x
    'the next line runs Macro2
    Macro2
    MsgBox "x is still " & x
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Eseguire Macro1.

    Verrà visualizzato un messaggio analogo al seguente:
    il valore inizializzato di x è 0
  4. Scegliere OK.

    Verrà visualizzato un messaggio analogo al seguente:
    x is 10 (x è 10)
  5. Scegliere OK.

    Verrà visualizzato un messaggio analogo al seguente:
    x, as seen by Macro2 is (x, così come vista da Macro2, è)
  6. Scegliere OK.

    Macro2 non visualizza un valore per la variabile x perché quest'ultima si trova nell'ambito di Macro1. Verrà visualizzato un messaggio analogo al seguente:
    x is still 10 (x è ancora 10)
  7. Scegliere OK.
  8. Eseguire Macro1.
Verranno visualizzati gli stessi messaggi descritti nei passaggi da 3 a 6 perché, non appena nel passaggio 6 è terminata l'esecuzione di Macro1, il valore della variabile x è andato perso. Pertanto, quando si esegue nuovamente Macro1 nel passaggio 7, il primo messaggio segnala che il valore di x è zero (il valore inizializzato).

Parola chiave static

Se una variabile a livello di routine viene dichiarata utilizzando la parola chiave Static, la variabile conserva il suo valore finché il progetto viene reimpostato. Se pertanto si dispone di una variabile statica, alla successiva chiamata della routine verrà inizializzata sull'ultimo valore.

Per visualizzare il funzionamento della parola chiave Static, attenersi alla seguente procedura:
  1. Modificare il codice di Macro1 in:
    Sub Macro1()
    'set x as a procedure level variable
    Static x As Integer
       MsgBox "the initialized value of x is " & x
    x = x + 10
    MsgBox "x is " & x
    End Sub
    
  2. Eseguire Macro1.

    Verrà visualizzato un messaggio analogo al seguente:
    the initialized value of x is 0 (il valore inizializzato di x è 0)
  3. Scegliere OK.

    Verrà visualizzato un messaggio analogo al seguente:
    x è 10
  4. Scegliere OK.
  5. Eseguire Macro1.

    Verrà visualizzato un messaggio analogo al seguente:
    il valore inizializzato di x è 10
  6. Scegliere OK.

    Verrà visualizzato un messaggio analogo al seguente:
    x is 20 (x è 20)
  7. Scegliere OK.
I valori visualizzati nei messaggi sono diversi la seconda volta perché la variabile x è dichiarata come variabile statica e conserva il proprio valore dopo la prima esecuzione di Macro1.

Nota Se si dispone di una variabile a livello di modulo, la durata è la stessa di una variabile statica a livello di routine.

Per verificare la durata di una variabile a livello di modulo, attenersi alla procedura seguente:
  1. Modificare nel modo seguente il codice del modulo contenente Macro1:
    Dim x As Integer  'create a module-level variable
    Sub Macro2()
       MsgBox "the initialized value of x is " & x
    x = x + 10
    MsgBox "x is " & x
    End Sub
    
  2. Eseguire Macro1.

    Verrà visualizzato un messaggio analogo al seguente:
    il valore inizializzato di x è 0
  3. Scegliere OK.

    Verrà visualizzato un messaggio analogo al seguente:
    x è 10
  4. Scegliere OK.
  5. Eseguire Macro1.

    Verrà visualizzato un messaggio analogo al seguente:
    il valore inizializzato di x è 10
  6. Scegliere OK.

    Verrà visualizzato un messaggio analogo al seguente:
    x is 20 (x è 20)
  7. Scegliere OK.
I valori visualizzati nei messaggi sono diversi la seconda volta perché la variabile x è dichiarata come variabile statica e conserva il proprio valore dopo la prima esecuzione di Macro1.

Reimpostare un progetto per reimpostare le variabili

Se si desidera reimpostare il valore di una variabile static o per una variabile a livello di modulo, fare clic sul pulsante Reimposta nella barra degli strumenti Standard oppure fare clic su Reimposta nel menu Esegui.

Effettuando questa operazione per il progetto Macro1 e poi eseguendo nuovamente Macro1, il valore della variabile x viene reinizializzata su zero e si riceve il primo messaggio:
the initialized value of x is 0 (il valore inizializzato di x è 0)
Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
843145 Descrizione delle matrici nelle subroutine di Visual Basic, Applications Edition
Torna all'inizio
Nota: questo è un articolo a "PUBBLICAZIONE RAPIDA", creato direttamente all'interno dell'organizzazione di supporto Microsoft. Le informazioni contenute nel presente documento vengono fornite "così come sono" in risposta alle problematiche riscontrate. A causa della rapidità con cui vengono resi disponibili, i materiali possono contenere errori di battitura e sono soggetti a modifica senza preavviso, in qualsiasi momento. Per altre considerazioni, vedere le Condizioni per l'utilizzo.

Proprietà

Identificativo articolo: 843144 - Ultima modifica: mercoledì 8 gennaio 2014 - Revisione: 1.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Chiavi: 
kbvba kbprogramming kbinfo KB843144
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com