在Excel VBA(2003)中,我注意到模块或ThisWorkbook中没有任何参数的任何Public或Friend Sub方法都将显示为可由用户运行的宏.即,当用户转到工具 - >宏 - >宏...(或Alt + F8)时,该方法将显示在可以运行的列表中.
为了理智(组织,维护等),我需要将代码分成模块.我希望找到一种非hacky方法来隐藏用户的某些方法,但仍允许其他代码模块可见.请注意,所有代码都包含在同一个应用程序中,因此不会调用任何外部代码.
我当前的解决方法是使用返回布尔值而不是Sub s的Function,并忽略返回值.eJames建议在Sub中使用可选参数,也可以从宏列表中隐藏该方法.
然而,这些都不是正确的,所以任何关于如何构建一个非平凡的Excel VBA应用程序的建议将非常感激.
请考虑以下代码:
Public Sub VBACompilerIsMad()
Dim Ap As Application
Dim Wb As Workbook
Dim Ws As Worksheet
Debug.Print Ap.XXX ' No compile error
Debug.Print Wb.XXX ' No compile error
Debug.Print Ws.XXX ' Compile error
End Sub
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我得到一个编译器错误,用于引用一个不存在的成员Worksheet.但是,如果我注释掉最后一行,则没有编译器错误,即使它们既Application没有Workbook方法或属性也没有XXX.这是因为如果我声明Ap,并Wb作为Object变量.
为什么编译器处理Application/ Workbook不同Worksheet?
有没有像这样的其他类,编译器似乎对待它们好像Object?