这是我之前提问的后续问题:How Can I Prevent The Suggestion of Custom VBA Functions When Writing Formulas in Excel?
我已经实现了在the answer given中提出的建议,以便使我的宏和UDF成为私有,以允许在同一工作簿中的其他模块中调用它们,但在编写公式时阻止它们被建议。
我正在尝试生成包含可重用宏和UDF的加载项,而在其他VBA项目中,我将此加载项作为参考(工具>引用)添加,以便我可以直接调用函数而不是使用Application.Run()
通过这样做,使用这些可重用函数的项目将更容易编写,因为在写入行时可以看到必需/可选参数,并且通常会使代码看起来更整洁。
通过实现我的第一个问题的解决方案以使这些函数成为私有,可以从同一工作簿中访问这些函数,但其他工作簿无法访问这些函数。
有没有人知道实现这个目标的解决方案?
答案 0 :(得分:1)
如果需要在其定义的项目之外可以访问,那么它必须是Public
。
在标准代码模块中公开宏和UDF。
在类模块中实现“实用程序”代码,并创建这些类PublicNotCreatable
。现在导出这些类并在记事本中打开.cls文件。
找到VB_PredeclaredId
属性并将其切换为True
,保存并重新导入 - 给定类Utilities
,引用该插件的VBA项目可以调用代码而无需创建该类的实例(它无论如何都不能New
),但您可以像访问任何UserForm
类的默认实例一样访问其公共成员类名为
foo = Utilities.DoSomething(42)
这是因为PredeclaredId
创建了一个以类本身命名的类的全局范围实例:现在您可以使用该类,就像它是标准模块(或Shared
类一样VB.NET),其成员将不能用作宏或UDF。