如何防止在Excel中编写公式时自定义VBA函数的build议?

我正在编写一系列可以在许多项目中重用的VBA函数/子程序。 我遇到的问题是,在使用图纸时,这些function列在build议的公式函数中。

在这里输入图像描述

将函数设置为private将防止这种情况发生,但是,如果函数的存储位置以外的模块调用函数,还会除去显示函数参数的方便提示。

在这里输入图像描述

有谁知道一种方法来防止自定义函数的build议,而不使他们私人?

标准模块的无参数Public成员是以下两件事之一:

  • Sub ,他们暴露为macros
  • Function过程和他们暴露为UDF的。

请注意,如果未指定访问修饰符,则成员隐式为Public

具有参数的Sub不能作为macros执行,所以它不会显示为可用的macros。

具有副作用的 Function (例如,改变某个模块/全局状态,或者更改其他单元格的值)是错误的代码,并且UDF无法改变另一个单元格的值。


将函数设置为private将防止这种情况发生,但是,如果函数的存储位置以外的模块调用函数,还会除去显示函数参数的方便提示。

使它Private不仅“删除便利的提示”,它使该function无法访问其他模块,您的代码将不会编译。

如果你的代码有UDF,把它们全部放在同一个标​​准模块,例如UserFunctions ,为了可读性明确地将它们设置为Public

如果你的代码有macros,把它们全部放在同一个标​​准模块中,例如Macros ,并为了可读性明确地将它们Public

如果你的代码有需要被Public函数和过程(例如,它们是从UDF和/或macros访问的),为了可读性明确地将它们设置为Public ,并将它们放在适当命名的标准模块中(即避免HelperManager模块,他们不可避免地成为一个不适合任何地方的垃圾袋,并变得一团糟)。

然后把这个放在最上面:

 Option Explicit Option Private Module 

该选项( Private Module )可以防止所有公开/暴露的成员被选为macros和UDF。 Option Explicit应该只是在那里。


另一种方法是在类模块中实现逻辑; 如果没有该类的实例(即对象),则不能访问类模块的成员,因此不会作为macros/ UDF公开。