如何防止在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
,并将它们放在适当命名的标准模块中(即避免Helper
和Manager
模块,他们不可避免地成为一个不适合任何地方的垃圾袋,并变得一团糟)。
然后把这个放在最上面:
Option Explicit Option Private Module
该选项( Private Module
)可以防止所有公开/暴露的成员被选为macros和UDF。 Option Explicit
应该只是在那里。
另一种方法是在类模块中实现逻辑; 如果没有该类的实例(即对象),则不能访问类模块的成员,因此不会作为macros/ UDF公开。