从另一个工作簿调用专用macros/ UDF(加载项)

这是我以前的问题的后续问题: 如何防止在Excel中编写公式时自定义VBA函数的build议?

为了使我的macros和UDF成为私有的,我已经实现了在给出的答案中提出的build议,使得它们可以在同一工作簿中的其他模块中被调用,但是在编写公式时阻止它们被build议。

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

在这里输入图像描述

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

通过实现我的第一个问题的解决scheme,使这些function是私人的,这些function可以在同一个工作簿中访问,但其他工作簿无法访问。

有谁知道一个解决scheme来实现这一目标?

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

使macros和UDF在标准的代码模块中公开。

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

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

 foo = Utilities.DoSomething(42) 

这是因为PredeclaredId产生了一个全局范围的类,它是以类的名字命名的:现在你可以使用这个类,就好像它是一个标准模块(或者VB.NET中的一个Shared类),它的成员不会以macros或UDF的forms提供。