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

标签 vba excel excel-2010

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

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

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

enter image description here

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

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

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

最佳答案

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

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

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

找到 VB_PredeclaredId 属性并将其切换为 True,保存并重新导入 - 给定类 Utilities,这是一个 VBA 项目,引用了插件可以在不创建类实例的情况下调用代码(它不能 New 无论如何),但是你可以像访问 默认实例 任何 UserForm 类,通过使用类名限定方法:

foo = Utilities.DoSomething(42)

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

关于vba - 从另一个工作簿(加载项)调用私有(private)宏/UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38370113/

相关文章:

mysql - 检查 MySQL 表中的外部列表是否有重复项?

excel - 获取运行时错误 '13' : Type mismatch when I run following macro

vba - 无法使用excel vba在foreach循环中获取单元格值

excel - 忽略 Excel 命名区域中的空白单元格

excel - 根据两个输入值在表中查找值

Excel函数在字符串中搜索多个关键字

sql - access sql 查询中的 YES/NO 字段类型是什么?

arrays - 当字符小于 255 时 VBA FormulaArray 范围类错误

sql-server - SQL - 确定列中最常出现的单词

VBA尝试将range.offset与命名变量中保存的单元格地址一起使用