Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

Introduzione

Questo articolo descrive come usare le variabili nelle Microsoft Excel in Microsoft Visual Basic, Applications Edition.

Altre informazioni

Variabili in una routine secondaria

Una funzionalità potente dei linguaggi di programmazione è la possibilità di archiviare qualcosa in una variabile in modo che il contenuto della variabile possa essere usato o modificato in un secondo momento nella procedura. Questo documento illustra l'uso delle variabili in Visual Basic:

  • Modalità di dichiarazione delle variabili.

  • Le procedure e i progetti che possono usare la variabile.

  • Durata di una variabile.

Dichiarare una variabile in una macro

Il modo più semplice per dichiarare una variabile in una macro è usare l'istruzione Dim. La riga seguente dichiara due variabili, come numeri interi:

    Dim x As Integer, y As Integer

Con x e y specificati come numeri interi, si indica a Visual Basic di riservare memoria sufficiente per una variabile integer (2 byte ciascuno per x e y) e che le informazioni archiviate in x o y sono un numero intero compreso tra -32768 e 32767.

NOTA: Se si dichiarano più variabili usando una singola istruzione Dim, è necessario specificare il tipo di dati per ogni variabile.

Se non si specifica il tipo di dati per ogni variabile, come nel codice Visual Basic seguente, solo la variabile y viene impostata come variabile integer. La variabile x sarà di tipo variant:

    Dim x, y As Integer

Per altre informazioni, vedere Tipo di dati Variant più avanti.
 

Per eseguire un test variabile, seguire questa procedura:

  1. Salvare e chiudere le cartelle di lavoro aperte e quindi aprire una nuova cartella di lavoro.

  2. Avviare l Visual Basic Editor (premere ALT+F11).

  3. Scegliere Modulo dal menu Inserisci.

  4. Digitare il codice seguente:

    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 macro. Viene visualizzato il messaggio seguente:

    the value of x is 10
    the value of y is 100

  6. Fare clic su OK.

  7. Nella macro Variable_Test modificare la riga seguente:

    x = 10

  8. a:

    x = "error"

  9. Eseguire la macro Variable_Test macro.

Si riceverà un errore di run-time perché "errore" non è un numero intero e si sta tentando di assegnare questo valore stringa alla variabile integer x.
 

Riepilogo del tipo di dati

Questi sono i tipi di dati variabili comuni:

tipi di dati variabili comuni

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 sono riportati i vantaggi delle variabili dichiarate come questo tipo di dati:

  • Le variabili possono contenere valori stringa, data, ora, booleani o numerici.

  • Le variabili possono convertire automaticamente i valori che contengono.

Lo svantaggio è che le variabili variant richiedono almeno 16 byte di memoria. 16 byte di memoria possono essere significativi nelle procedure di grandi dimensioni o nei moduli complessi.

Per vedere come funziona nella macro Variable_Test macro, seguire questa procedura:

Modificare il codice nella macro Variable_Test macro in:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Eseguire la macro Variable_Test macro.

Non si riceverà un errore perché è possibile assegnare qualsiasi elemento alle variabili variant x e y.

NOTA: È anche possibile osare la riga seguente e la macro continuerà a funzionare in quanto le variabili x e y vengono considerate come tipi di dati Variant:

    Dim x, y

Ambito di una variabile

Quando si dichiara una variabile, può essere visibile o meno da altre macro nello stesso modulo, in altri moduli o in altri progetti. Questa disponibilità di una variabile nei moduli è detta ambito. I tre tipi di ambito sono a livello di procedura, a livello di modulo privato e a livello di modulo pubblico. L'ambito dipende da come e dove si dichiara la variabile o le variabili.

Ambito a livello di procedura

Una variabile con ambito a livello di routine non viene vista all'esterno della routine in cui è dichiarata. Se si imposta il valore di una variabile con ambito a livello di routine, il relativo contenuto non verrà visualizzato da altre macro.

Per verificare che una variabile con ambito a livello di routine non sia visibile all'esterno della routine in cui viene dichiarata, seguire questa procedura:

  1. Inserire un nuovo modulo nel progetto.

  2. Digitare entrambe le macro seguenti in questo modulo:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, come si vede da Macro1 è " & x ' la riga successiva esegue Macro2 Macro2 Macro2 End Sub Macro2() MsgBox "x, come si vede da Macro2 è " & x End Sub

  3. Esegui Macro1 e viene visualizzato il messaggio seguente:

    x, as seen by Macro1 is 10

  4. Fare clic su OKe verrà visualizzato il messaggio seguente:

    x, as seen by Macro2 is

  5. Fare clic su OK.

Macro2 non visualizza un valore per la variabile x perché la variabile x è locale a Macro1.

Ambito privato e pubblico a livello di modulo

È possibile definire variabili nella sezione dichiarazioni di un modulo (nella parte superiore di un modulo, sopra tutte le sotto procedure) e impostare l'ambito della variabile usando l'istruzione Public, l'istruzione Dim o l'istruzione Private. Se si mette l'istruzione Public davanti alla variabile, la variabile sarà disponibile per tutte le macro in tutti i moduli del progetto. Se si mette l'istruzione Dim o l'istruzione Private davanti alla variabile, la variabile è disponibile solo per le macro del modulo in cui viene dichiarata.

Per vedere la differenza tra l'istruzione Public e l'istruzione Dim, seguire questa procedura:

  1. Salvare e chiudere le cartelle di lavoro aperte e quindi aprire una nuova cartella di lavoro.

  2. Avviare l Visual Basic Editor.

  3. Inserire un modulo nel progetto.

  4. Type the following code into this module:
    
    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 il codice seguente in questo modulo:


    Sub Macro2()     x = x * 3
        MsgBox x
    End Sub

  7. Eseguire Macro_1a macro nel primo modulo.

  8. 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. Nella seconda finestra di messaggio viene visualizzato il valore 20, perché x viene moltiplicato per 2 in Macro_1b. Nella terza finestra di messaggio viene visualizzato il valore 60 perché il valore di x è stato modificato in 20 in Macro_1b e quindi è stato moltiplicato per 3 in Macro2.

  9. Modificare la riga della dichiarazione nel primo modulo da:

       Public x As Integer

    a:

       Dim x As Integer

  10. Eseguire la macro Macro_1a macro.

  11. Con la variabile x dichiarata come "Dim x As Integer", solo le macro del primo modulo hanno accesso al valore di x. Quindi, la prima finestra di messaggio visualizza il valore 10, la seconda visualizza il valore 20 (perché x viene moltiplicato per 2 in Macro_1b) e la terza finestra di messaggio visualizza il valore 0 , perché Macro2 non visualizza il valore di x e il valore non inizializzato di zero viene usato dalla Macro 2.

  12. Modificare la riga della dichiarazione nel primo modulo da:

      Dim x As Integer

    A:

        Private x As Integer

  13. Eseguire la macro Macro_1a macro.

  14. Le stesse finestre di messaggio vengono visualizzate usando l'ambito dell'istruzione Private mentre usavano l'istruzione Dim. La variabile x ha lo stesso ambito, privata del modulo in cui è dichiarata.


NOTA: Se si vuole che l'ambito della variabile sia limitato al modulo in cui è dichiarata, usare privatestatement invece dell'istruzione Dim. Entrambi hanno lo stesso effetto, ma l'ambito è più chiaro quando si legge il codice se si usa l'istruzione Private.
 

Durata di una variabile

Il tempo durante il quale una variabile mantiene il valore è noto come durata. Il valore di una variabile può cambiare nel corso della sua durata, ma manterrà 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 su un valore. Una variabile numerica viene inizializzata su zero, una stringa di lunghezza variabile viene inizializzata su una stringa di lunghezza zero ("") e una stringa a lunghezza fissa viene riempita con il codice ASCII 0. Le variabili Variant vengono inizializzate su Empty. Una variabile Empty è rappresentata da uno zero in un contesto numerico e da una stringa di lunghezza zero ("") in un contesto stringa.

Variabili a livello di routine

Se si ha una variabile dichiarata in una macro usando l'istruzione Dim, la variabile mantiene il relativo valore finché la macro è in esecuzione. Se questa macro chiama altre macro, il valore della variabile viene mantenuto ,non disponibile per le altre macro, purché anche queste altre macro siano in esecuzione.

Per illustrare il funzionamento delle variabili a livello di routine, seguire questa procedura:

  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 "il valore inizializzato di x è " & x
       x = 10
        MsgBox "x è " & x
        'La riga successiva esegue Macro2
        Macro2
        MsgBox "x è ancora " & x
    End Sub
    Sub Macro2()
        MsgBox "x, come visto da Macro2 è " & x
    End Sub

  3. Eseguire Macro1.

  4. Viene visualizzato il messaggio seguente:

        the initialized value of x is 0

  5. Fare clic su OKe verrà visualizzato il messaggio:

     x is 10

  6. Fare clic su OKe verrà visualizzato il messaggio seguente:

    x, as seen by Macro2 is

  7. Fare clic su OK.

  8. Macro2 non visualizza un valore per la variabile x perché la variabile x è locale a Macro1. Viene visualizzato il messaggio seguente:

    x is still 10

  9. Fare clic su OK.

  10. Eseguire Macro1.

Si ricevono gli stessi messaggi descritti nei passaggi da 3 a 6 perché non appena Macro1 ha smesso di essere eseguita nel passaggio 6, il valore della variabile x è stato perso. Pertanto, quando si esegue di nuovo Macro1 nel passaggio 7, il primo messaggio mostra il valore di x come zero (il valore inizializzato).

Static (parola chiave)

Se una variabile a livello di routine viene dichiarata usando la parola chiave Static, la variabile mantiene il relativo valore finché il progetto non viene reimpostato. Di conseguenza, se si ha una variabile statica, la volta successiva che si chiama la routine, la variabile statica viene inizializzata sul suo ultimo valore.

Per vedere come funziona la parola chiave Static, seguire questa procedura:

  1. Change the code in Macro1 to:
    
    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.

  3. Verrà visualizzato il messaggio:

    the initialized value of x is 0

  4. Fare clic su OKe verrà visualizzato il messaggio:

    x is 10

  5. Fare clic su OK.

  6. Eseguire Macro1 e viene visualizzato il messaggio seguente:

    the initialized value of x is 10

  7. Fare clic su OKe verrà visualizzato il messaggio seguente:

    x is 20

  8. Fare clic su OK.

I valori visualizzati nei messaggi sono diversi la seconda volta perché la variabile x viene dichiarata come variabile statica e la variabile mantiene il valore dopo la prima esecuzione di Macro1.

NOTA:  Se si ha una variabile a livello di modulo, la durata è uguale a una variabile statica a livello di routine.

Per verificare la durata di una variabile a livello di modulo, seguire questa procedura:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. Esegui Macro1 e viene visualizzato il messaggio seguente:

    the initialized value of x is 0

  3. Fare clic su OK e verrà visualizzato il messaggio seguente:

    x is 10

  4. Fare clic su OK,

  5. Esegui Macro1 e viene visualizzato il messaggio seguente:

    the initialized value of x is 10

  6. Fare clic su OK.

  7. Viene visualizzato il messaggio seguente:

    x is 20

  8. Fare clic su OK.

I valori visualizzati nei messaggi sono diversi la seconda volta perché la variabile x viene dichiarata come variabile statica e mantiene il valore dopo la prima esecuzione di Macro1.
 

Reimpostare un progetto per reimpostare le variabili

Se si vuole reimpostare il valore di una variabile statica o di una variabile a livello di modulo, fare clic sul pulsante Reimposta nella scheda
Barra degli strumenti Standard oppure fare clic su Reimposta nel menu Esegui.

Se si esegue questa operazione per il progetto Macro1 e quindi si esegue di nuovo Macro1, il valore della variabile x viene inizializzato di nuovo su zero e viene visualizzato il primo messaggio:

    the initialized value of x is 0

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×