/ / Asegurarse de que los métodos públicos de VBA no aparezcan en la lista de macros de Excel - excel, vba

Asegurarse de que los métodos públicos de VBA no aparezcan en la lista de macros de Excel - excel, vba

En Excel VBA (2003), he notado que cualquier Público o Amigo Sub método ya sea en un módulo o Este libro de trabajo que no tiene ningún argumento aparecerá comoMacro que puede ser ejecutada por el usuario. Es decir. cuando el usuario vaya a Herramientas -> Macro -> Macros ... (o Alt + F8), el método aparecerá en la lista que se puede ejecutar.

Por el bien de la cordura (organización, mantenimiento,etc) Necesito separar el código en módulos. Espero encontrar una forma no hacky para ocultar algunos métodos al usuario, pero aún así permitir que sean visibles a otros módulos de código. Tenga en cuenta que todo el código está contenido dentro del mismo solicitud, por lo que no se llama ningún código externo.

Mi alternativa actual es usar Funcións que devuelven un booleano en lugar de Subs, y simplemente ignorar el valor de retorno. eJames sugirió la opción de usar un argumento opcional en el Sub, que también ocultará el método de la lista de macros.

Sin embargo, ninguno de los dos se siente del todo bien, por lo que cualquier consejo sobre cómo estructurar una aplicación de Excel VBA no trivial sería muy apreciado.

Respuestas

42 para la respuesta № 1

Agregue lo siguiente a la parte superior de su módulo:

Option Private Module

De MSDN:

Cuando un módulo contiene Opción Privada Módulo, elpartes públicas, por ejemplo, Variables, objetos, y definidos por el usuario. tipos declarados a nivel de módulo, son todavía disponible dentro del proyecto que contiene el módulo, pero son no disponible para otras aplicaciones o proyectos


6 para la respuesta № 2

Una solución es dar al método una Optional argumento.

Public Sub myPublicSub(Optional dummy_var As Integer)
...
End Sub

4 para la respuesta № 3

Solo un pequeño apéndice a la respuesta de Jason Z: métodos ocultos por Option Private Module todavía son visibles si usas Application.Run() Para invocar el método.


3 para la respuesta № 4

También vale la pena señalar un efecto secundario de ambos Opción Módulo Privado y agregar parámetros opcionales es que el Sub ya no funcionará como objetivo de un atajo de teclas de acceso directo.

Repetido: si tiene una combinación de teclas para configurar un método abreviado de teclado para iniciar una macro. Esa macro no se puede ocultar. De lo contrario, la combinación de teclas no funcionará.