从另一个工作簿调用私有宏/ UDF(加载项)

时间:2016-07-14 09:12:00

标签: excel vba excel-vba excel-2010

这是我之前提问的后续问题:How Can I Prevent The Suggestion of Custom VBA Functions When Writing Formulas in Excel?

我已经实现了在the answer given中提出的建议,以便使我的宏和UDF成为私有,以允许在同一工作簿中的其他模块中调用它们,但在编写公式时阻止它们被建议。

我正在尝试生成包含可重用宏和UDF的加载项,而在其他VBA项目中,我将此加载项作为参考(工具>引用)添加,以便我可以直接调用函数而不是使用Application.Run()

enter image description here

通过这样做,使用这些可重用函数的项目将更容易编写,因为在写入行时可以看到必需/可选参数,并且通常会使代码看起来更整洁。

通过实现我的第一个问题的解决方案以使这些函数成为私有,可以从同一工作簿中访问这些函数,但其​​他工作簿无法访问这些函数。

有没有人知道实现这个目标的解决方案?

1 个答案:

答案 0 :(得分:1)

如果需要在其定义的项目之外可以访问,那么它必须是Public

在标准代码模块中公开宏和UDF。

在类模块中实现“实用程序”代码,并创建这些类PublicNotCreatable。现在导出这些类并在记事本中打开.cls文件。

找到VB_PredeclaredId属性并将其切换为True,保存并重新导入 - 给定类Utilities,引用该插件的VBA项目可以调用代码而无需创建该类的实例(它无论如何都不能New),但您可以像访问任何UserForm类的默认实例一样访问其公共成员类名为

的方法
foo = Utilities.DoSomething(42)

这是因为PredeclaredId创建了一个以类本身命名的类的全局范围实例:现在您可以使用该类,就像它是标准模块(或Shared类一样VB.NET),其成员将不能用作宏或UDF。