variable - lista de objetos vba excel
¿Cómo me aseguro de que los métodos públicos de VBA no aparezcan en la lista de macros de Excel? (4)
En Excel VBA (2003), he notado que cualquier método Public o Friend Sub en un módulo o ThisWorkbook que no tenga ningún argumento se mostrará como una macro que puede ejecutar 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 motivos de cordura (organización, mantenimiento, etc.), necesito separar el código en módulos. Espero encontrar una forma no hacky de ocultar algunos métodos del usuario, pero aún así permitir que sean visibles para otros módulos de código. Tenga en cuenta que todo el código está dentro de la misma aplicación , por lo que no se llama ningún código externo.
Mi solución actual es usar Function s que devuelven un valor booleano en lugar de Sub s, y simplemente ignoran 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 estos se siente bien, por lo que cualquier consejo sobre cómo estructurar una aplicación Excel VBA no trivial sería muy apreciado.
Solo una pequeña adición a la respuesta de Jason Z: los métodos ocultos por Option Private Module
aún son visibles si usa Application.Run()
para invocar el método.
Agregue lo siguiente a la parte superior de su módulo:
Option Private Module
Desde MSDN :
Cuando un módulo contiene Opción Módulo privado, las partes públicas, por ejemplo, variables, objetos y tipos definidos por el usuario declarados a nivel de módulo, todavía están disponibles dentro del proyecto que contiene el módulo, pero no están disponibles para otras aplicaciones o proyectos.
Una solución es dar al método un argumento Optional
.
Public Sub myPublicSub(Optional dummy_var As Integer)
...
End Sub
También vale la pena señalar que un efecto secundario de Option Option Module y la adición de parámetros opcionales es que el Sub ya no funcionará como un objetivo de un atajo de teclado.
Reformó: si tiene una combinación de teclas para establecer un atajo de teclado para iniciar una macro. Esa Macro no se puede ocultar. De lo contrario, la vinculación no funcionará.