VBA privato vs procedure pubbliche (sottotitoli e funzioni)

Questo tutorial spiegherà la differenza tra dichiarazioni pubbliche e private in VBA e come specificare i moduli come privati.

Sottoprocedure pubbliche vs. private

Le procedure (Sub e Function) possono essere dichiarate Private o Public in VBA. Se sono pubblici, significa che sarai in grado di vederli dall'interno della finestra macro di Excel e possono essere chiamati da qualsiasi punto all'interno del tuo progetto VBA. Se sono Privati, non possono essere visualizzati nella Finestra Macro di Excel e sono disponibili solo per essere utilizzati all'interno del Modulo in cui sono dichiarati (utilizzando i metodi normali, vedere la parte inferiore di questo articolo per le modalità di accesso alle procedure private da altri moduli) .

Le funzioni pubbliche possono essere chiamate come funzioni di Excel integrate nel foglio di lavoro di Excel.

Nota: Le variabili e le costanti possono anche essere pubbliche o private.

Finestra macro di Excel

Per impostazione predefinita, le macro di Excel (la maggior parte delle procedure VBA) sono visibili agli utenti della cartella di lavoro nella finestra Macro:

Questi sono considerati Pubblico procedure. È possibile definire esplicitamente le procedure come pubbliche aggiungendo "Public" prima dell'istruzione Sub:

123 Sottotitoli pubblici HelloWorld()MsgBox "Ciao Mondo"Fine sottotitolo

Se non definisci la procedura come Pubblica, verrà considerata Pubblica.

Per dichiarare una procedura come Privata, aggiungi semplicemente "Privato" prima della sottoistruzione della procedura:

123 Sottotitoli privati ​​HelloEveryone()MsgBox "Ciao a tutti"Fine sottotitolo

La seconda procedura non sarebbe visibile nella finestra Macro agli utenti di Excel, ma può comunque essere utilizzata nel codice VBA.

Procedure con argomenti

Le procedure secondarie possono avere argomenti. Gli argomenti sono input per la procedura secondaria:

123 Sub Hello(strName come stringa)MsgBox "Hello" & strNameFine sottotitolo

Se una sottoprocedura ha argomenti, non apparirà mai nella finestra Macro indipendentemente dal fatto che sia dichiarata Public perché non c'è modo di dichiarare gli argomenti.

Le funzioni inoltre non appariranno mai nella finestra Macro, indipendentemente dal fatto che siano dichiarate Public.

Le funzioni pubbliche in Excel possono essere utilizzate direttamente in un foglio di lavoro come "Funzione definita dall'utente" (UDF). Questa è fondamentalmente una formula personalizzata che può essere chiamata direttamente in un foglio di lavoro. Possono essere trovati nella categoria "Definito dall'utente" nella finestra "Inserisci funzione" o possono essere digitati direttamente in una cella.

Programmazione VBA | Il generatore di codice funziona per te!

Utilizzo delle procedure tra i moduli nel progetto VBA

Le procedure pubbliche possono essere chiamate da qualsiasi modulo o modulo all'interno del progetto VBA.

Il tentativo di chiamare una procedura privata da un modulo diverso genererà un errore (Nota: vedere in fondo a questo articolo per una soluzione).

Nota: Le procedure pubbliche e le variabili nei moduli di classe si comportano in modo leggermente diverso e non rientrano nell'ambito di questo articolo.

Moduli diversi possono memorizzare procedure con lo stesso nome, a condizione che siano entrambi privati.

Se due o più procedure hanno lo stesso nome e sono dichiarate pubbliche, otterrai un errore di compilazione "Rilevato nome ambiguo" durante l'esecuzione del codice.

Moduli privati

Per impostazione predefinita, i moduli sono pubblici.

Per rendere privato un modulo, inserisci la seguente parola chiave nella parte superiore del modulo.

1 Opzione Modulo Privato

Se dichiari un modulo come privato, tutte le procedure nel modulo non saranno visibili agli utenti di Excel. Le procedure di funzione non appariranno nella finestra Inserisci funzione ma possono ancora essere utilizzate nel foglio Excel purché l'utente conosca il nome della funzione!

Le sottoprocedure non appariranno nella finestra Macro ma saranno comunque disponibili per essere utilizzate all'interno del progetto VBA.

Accesso a una procedura privata da un modulo diverso

Come accennato in precedenza, le procedure private sono inaccessibili in altri moduli di codice con metodi "normali". Tuttavia, è possibile accedere alle procedure private utilizzando il Esecuzione.applicazione comando disponibile in VBA.

Considera i seguenti 3 moduli.

Il modulo 2 è un Privato Modulo con a Pubblico Sottoprocedura, mentre Module3 è Pubblico modulo con a Privato Sottoprocedura.

In Module1, possiamo chiamare Hello World - il Opzione Modulo Privato in alto non ci impedisce di chiamare la procedura secondaria: tutto ciò che serve a fare è nascondere la procedura secondaria nella finestra della macro.

Inoltre, non abbiamo bisogno dell'istruzione Call: è lì per rendere il codice più facile da leggere.

Il codice potrebbe anche assomigliare a questo di seguito:

1234 Sub CallHelloFromPrivate()'chiama un sub da un modulo privatoCiao mondoFine sottotitolo

Possiamo anche eseguire la procedura HelloWorld Sub usando il VBA Esecuzione.applicazione comando.

Nel Modulo3, invece, la procedura GoodMorningWorld è stata dichiarata Privata. Non è possibile chiamarlo da un altro modulo utilizzando i mezzi "normali", ovvero l'istruzione Call.

Devi usare Comando.Esegui applicazione per eseguire un sub privato da un altro modulo.

1234 Sub CallBuongiorno()'esegui un sub privato da un modulo pubblicoApplicazione.Run ("BuongiornoMondo")Fine sottotitolo

Nota quando usi il Comando.Esegui applicazione comando, devi inserire il nome della procedura secondaria tra virgolette.

Se si tenta di utilizzare l'istruzione Call per eseguire la procedura GoodMorningWorld Sub, si verificherebbe un errore.

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

wave wave wave wave wave