如何确保公共VBA方法不显示在Excelmacros列表中?

在Excel VBA(2003)中,我注意到模块或ThisWorkbook中没有任何参数的PublicFriend Sub方法将显示为可以由用户运行的macros。 也就是说,当用户转到工具 – >macros – >macros…(或Alt + F8),该方法将显示在可以运行的列表中。

为了理智(组织,维护等),我确实需要将代码分解成模块。 我希望find一个非hacky的方式来隐藏用户的一些方法,但仍然允许他们对其他代码模块可见。 请注意,所有的代码都包含在同一个应用程序中 ,所以不需要调用外部代码。

我目前的解决方法是使用返回一个布尔值而不是Sub函数 ,并忽略返回值。 eJamesbuild议在Sub中使用一个可选参数的选项,它也会将这个方法从macros列表中隐藏起来。

但是,这些都不是很正确,所以关于如何构build一个不重要的Excel VBA应用程序的任何build议将不胜感激。

将以下内容添加到模块的顶部:

Option Private Module 

来自MSDN :

当模块包含选项专用模块时,在模块级别声明的公共部分(例如variables,对象和用户定义types)在包含该模块的项目中仍然可用,但其他应用程序或项目不可用。

一种解决方法是给该方法一个Optional参数。

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

只是Jason Z的一个小补充答案:如果使用Application.Run()来调用方法,那么由Option Private Module隐藏的方法仍然可见。

另外值得注意的是,两个Option Private Module和添加Optional Params的副作用是Sub不再作为快捷键绑定的目标。

重述:如果您有一个键绑定来设置键盘快捷键来启动macros。 该macros不能被隐藏。 否则,键绑定将无法工作。