In tutti i linguaggi di programmazione, abbiamo specificatori di accesso alle variabili che definiscono da dove è possibile accedere a una variabile definita. Excel VBA non fa eccezione. Anche VBA ha specificatori di ambito. Questi specificatori di ambito possono essere utilizzati per impostare la visibilità / ambito di una variabile in Excel VBA.

In Excel VBA, abbiamo tre tipi di specificatori di ambito:

  1. Livello di procedura. Privato – Livello modulo. Pubblico – Livello progetto === Ambito variabile a livello di procedura VBA Le variabili dichiarate all’interno di una subroutine sono accessibili solo in quella procedura / funzione. Hanno un ambito a livello di procedura. Di solito sono dichiarati con la parola chiave Dim. Se il modulo è un’opzione implicita, la variabile potrebbe non essere stata dichiarata, ma utilizzata direttamente.

Nell’esempio seguente, abbiamo un test dell’ambito della subroutine che ha le variabili x e y. Quando eseguiamo la prima subroutine, funziona perfettamente e stampa la somma di X e Y

Option Explicit

Sub scopeTest()

Dim x, y As Integer ' Procedure level variable in VBA

x = 2

y = 3

Debug.Print x + y

End Sub

Sub sum()

x = 5

y = 7

Debug.Print x + y

End Sub

Ma quando si esegue la subroutine sum, viene generato un errore che indica che la variabile non è dichiarata. Perché? Poiché X e Y sono privati ​​per la procedura scopeTest e la subroutine sum non ha accesso ad essi.

Quindi il sub si imbatte in un errore.

image

Variabile privata VBA – Ambito del livello del modulo Quando si desidera dichiarare una variabile a cui è necessario accedere nell’intero modulo, la si dichiara privata nella parte superiore del modulo, prima di qualsiasi subroutine o funzione.

Le variabili dichiarate prima di ogni subroutine, nel modulo, sono di default Private. Anche se li dichiari con la parola chiave Dim. Ma per essere precisi, è consigliabile utilizzare la parola chiave Private.

Le due procedure seguenti sono nello stesso modulo, modulo 1.

Option Explicit

'Module level variable in VBA. Both variables x and y are private to this module. and

'can be accessed from any sub or function within this module.

Dim x As Integer

Private y As Integer

Sub scopeTest() 'This can be accessed from any module in the project

x = 2

y = 3

Debug.Print x + y

End Sub

Private Sub sum() ' This can't be accessed from other modules

x = 5

y = 7

Debug.Print x + y

End Sub

Le due funzioni precedenti funzioneranno perfettamente in quanto le variabili x e y sono le variabili private di questo modulo.

Importante: gli ultimi valori memorizzati in xey vengono mantenuti fino all’intero modulo. Se eseguiamo prima il sub scopeTest e non inizializziamo i valori di xey in sub sum e lo eseguiamo, il valore iniziale di xey rimarrà invariato .

La subroutine seguente è definita in un modulo separato, modulo 2. Quando provo ad accedere alla variabile da un altro modulo, la procedura (o funzione) VBA si verifica in un errore.

image

Ma se provo a chiamare la somma della subroutine dal modulo 1 nel modulo 2, funziona perfettamente. Per rendere la tua funzione e le tue subroutine private per il modulo, usa la parola chiave Private prima di sub e funzione.

Nota: – Le variabili dichiarate prima di qualsiasi subroutine o funzione, in un modulo, sono private del modulo per impostazione predefinita. Puoi utilizzare la parola chiave privata. Ma le funzioni e le subroutine sono pubbliche per impostazione predefinita e sono accessibili da qualsiasi modulo in un progetto. Per rendere le funzioni e le subroutine private al modulo devi usare la parola chiave Private. === Variabili pubbliche – Ambito a livello di progetto Come abbiamo appreso negli esempi precedenti, la funzione e le subroutine sono di default pubbliche ed è possibile accedervi da qualsiasi modulo ma le variabili non lo sono. Per rendere una variabile accessibile da qualsiasi modulo in Excel VBA, utilizziamo la parola chiave Public. * Per dichiarare una variabile pubblica in un progetto, è stata dichiarata nella parte superiore del modulo, prima di qualsiasi funzione o subroutine con la parola chiave public. Il codice seguente è scritto nel modulo 1.

Option Explicit

'Project level variable in VBA.

Public x As Integer

Public y As Integer

Public Sub scopeTest() 'This can be accessed from any module in the project

x = 2

y = 3



End Sub

Private Sub sum() ' This can't be accessed from other modules

x = 5

y = 7

Debug.Print x + y

End Sub

E questa subroutine è in un altro modulo, il modulo 2.

Option Explicit

Sub mul()

Call scopeTest

'Call sum         ' it won't work as it is private to the module 1

Debug.Print x * y

End Sub

Questa volta funziona perfettamente.

Per prima cosa ho chiamato la subroutine scopeTest. Poiché lo scopeTest è pubblico, viene chiamato. Inizializza i valori di x e y. Successivamente, moltiplichiamo x e y. Poiché la subroutine scopeTest l’ha inizializzata con i valori 2 e 3, il risultato che otteniamo è 6.

Quindi sì ragazzi, è così che puoi utilizzare gli specificatori di ambito variabile in Excel per controllare la visibilità di variabili, funzioni e subroutine nei progetti VBA di Excel.

Ho provato a spiegare gli specificatori di accesso di VBA nel modo più semplice possibile. Spero sia stato esplicativo. Se hai dubbi su questo articolo o su qualsiasi altro dubbio relativo a VBA, chiedimi nella sezione commenti qui sotto. Sarò felice di venire qui da te.

Articoli correlati:

link: / celle-intervalli-righe-e-colonne-in-vba-qual-è-la-differenza-tra-byref-e-byval-argomenti-vba-interview-question [Argomenti ByRef e ByVal] | Quando un argomento viene passato come argomento ByRef a un diverso sub o funzione, viene inviato il riferimento della variabile effettiva. Qualsiasi modifica apportata alla copia della variabile si rifletterà nell’argomento originale.

`link: / files-cartella-di lavoro-e-fogli di lavoro-in-vba-elimina-fogli-senza-richieste-di-conferma-utilizzando-vba-in-microsoft-excel [Elimina fogli senza richieste di conferma usando VBA in Microsoft Excel] stai cancellando fogli usando VBA, sai cosa stai facendo. Vorresti dire a Excel di non mostrare questo avviso ed eliminare il dannato foglio.

Aggiungi e salva una nuova cartella di lavoro usando VBA in Microsoft Excel 2016 | In questo codice abbiamo prima creato un riferimento a un oggetto cartella di lavoro. E poi l’abbiamo inizializzato con un nuovo oggetto cartella di lavoro. Il vantaggio di questo approccio è che puoi eseguire facilmente le operazioni su questa nuova cartella di lavoro. Come salvare, chiudere, eliminare, ecc. Visualizza un messaggio su La barra di stato VBA di Excel La barra di stato in Excel può essere utilizzata come monitor del codice. Quando il tuo codice VBA è lungo e esegui diverse attività utilizzando VBA, spesso disabiliti l’aggiornamento dello schermo in modo da non vedere lo sfarfallio dello schermo Disattiva i messaggi di avviso utilizzando VBA in Microsoft Excel 2016 | Questo codice non solo disabilita gli avvisi VBA, ma aumenta anche l’efficienza temporale del codice. Vediamo come.

Articoli popolari:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-aumentare-la-produttività [50 scorciatoie Excel per aumentare la produttività] | Diventa più veloce nel tuo compito. Queste 50 scorciatoie ti faranno lavorare ancora più velocemente su Excel.

link: / formule-e-funzioni-introduzione-di-vlookup-funzione [La funzione CERCA.VERT in Excel] | Questa è una delle funzioni più utilizzate e popolari di Excel che viene utilizzata per cercare valori da diversi intervalli e fogli. link: / tips-countif-in-microsoft-excel [COUNTIF in Excel 2016] | Contare i valori con le condizioni utilizzando questa straordinaria funzione. Non è necessario filtrare i dati per contare un valore specifico.

La funzione Countif è essenziale per preparare la tua dashboard.

link: / excel-formula-and-function-excel-sumif-function [Come usare la funzione SUMIF in Excel] | Questa è un’altra funzione essenziale della dashboard. Questo ti aiuta a riassumere i valori su condizioni specifiche.