La maggior parte dei lettori sa già che è possibile creare funzioni e subroutine utilizzando VBA. Questo non è diverso da come è sotto l’omonimo di VBA, Visual Basic. Normalmente, una macro viene visualizzata nell’elenco delle macro quando si visualizza la finestra di dialogo Macro (premere Alt + F8), a meno che non sia soddisfatta una delle tre condizioni:

  • La macro è una funzione. Le funzioni in genere restituiscono informazioni e richiedono il passaggio di informazioni. Poiché l’esecuzione di una macro dall’elenco delle macro non consente che accada nessuna di queste cose, Excel calcola che non è necessario elencarla. Le funzioni definite dall’utente, che sono piuttosto utili in Excel, non vengono visualizzate nella finestra di dialogo Macro perché sono, dopotutto, funzioni.

  • La macro è una subroutine con parametri. Excel presume che poiché i parametri sono necessari e non è possibile fornire parametri scegliendo la subroutine dall’elenco delle macro, non è necessario elencarla.

  • La subroutine è stata dichiarata privata. Ciò significa che la subroutine è utile solo per il codice all’interno del modulo in cui è dichiarata.

L’unico tipo di macro elencato nella finestra di dialogo Macro è una subroutine non privata senza parametri. In alcune situazioni, tuttavia, potresti non volere nemmeno quelli elencati. Ad esempio, potresti aver creato alcune subroutine universali che non fanno nulla di utile se chiamate da sole; sono progettati per essere chiamati da altro codice. Ad esempio, considera la seguente macro:

Sub MySub()

MsgBox "We are running the macro"

End Sub

Questa macro verrà visualizzata nella finestra di dialogo Macro. Se non vuoi che appaia, ci sono diverse soluzioni che puoi perseguire, che diventano tutte ovvie esaminando i tre modi in cui le macro sono escluse dall’elenco delle macro. La prima possibile soluzione è esaminare il codice e scoprire se è veramente “universale”. Hai bisogno del codice da più di un singolo modulo? In caso contrario, dichiarare la subroutine Private; non apparirà nella finestra di dialogo Macro. Pertanto, la precedente macro del problema diventa la seguente:

Private Sub MySub()

MsgBox "We are running the macro"

End Sub

Il secondo modo per nascondere la macro è semplicemente convertirla in una funzione.

Questo può sembrare strano, soprattutto se non vuoi restituire alcun valore, ma è perfettamente ammissibile. In VBA una funzione non deve restituire un valore. In assenza di una dichiarazione esplicita di un valore di ritorno, la funzione restituirà un risultato predefinito (ad esempio, Boolean restituisce False, String restituisce “”, ecc.) Pertanto, la procedura del problema potrebbe essere modificata in una funzione e dichiarata come mostrato qui:

Function MySub() As Boolean     MsgBox "We are running the macro"

End Function

Questa procedura non viene visualizzata nella finestra di dialogo Macro e non richiede argomenti. Restituisce False per impostazione predefinita, ma questo risultato può essere ignorato. A seconda della natura della subroutine che si sta modificando, potrebbe essere vantaggioso consentire alla funzione convertita di restituire True o False a seconda del successo di ciò che viene eseguito nel codice. In questo caso, la funzione convertita è una funzione reale e non realmente una subroutine fittizia, poiché restituisce qualcosa di valore.

La terza possibile soluzione consiste nell’utilizzare alcuni parametri fittizi con la subroutine. Non è necessario fare nulla con loro all’interno della subroutine stessa, ma includendoli la procedura non è elencata nell’elenco delle macro. In questo scenario, la subroutine del problema viene modificata in qualcosa di simile al seguente:

Sub MySub(Void As Integer)

MsgBox "We are running the macro"

End Sub

Ora la procedura non è elencata nell’elenco delle macro, ma è necessario modificare il modo in cui viene chiamata la subroutine. È necessario modificare ogni istanza in modo che venga passato un parametro, anche se non viene mai utilizzato.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (9904) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: