【问题标题】:Calling Private Macros / UDFs From Another Workbook (Add-In)从另一个工作簿(加载项)调用私有宏/UDF
【发布时间】:2016-07-14 09:11:59
【问题描述】:

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

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

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

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

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

有谁知道实现这一目标的解决方案吗?

【问题讨论】:

    标签: vba excel excel-2010


    【解决方案1】:

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

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

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

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

    foo = Utilities.DoSomething(42)
    

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

    【讨论】:

    • 太棒了 - 再次感谢!
    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多