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

Car*_*ive 3 excel vba excel-vba excel-formula excel-2010

我正在编写一系列VBA函数/ subs,可以在许多项目中重用.我遇到的问题是,在使用工作表时,这些功能列在建议的公式函数中.

在此输入图像描述

将函数设置为私有将阻止这一点,但它还将做的是删除显示函数参数的方便提示,这些函数是从存储函数的模块以外的模块调用的.

在此输入图像描述

有没有人知道一种方法来阻止自定义函数的建议而不将它们设为私有?

Mat*_*don 5

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

  • Sub程序,它们作为公开.
  • Function 程序,它们作为UDF公开.

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

Sub具有参数的A 不能作为执行,因此它不会显示为可用的宏.

Function具有副作用(例如变异一些模块/全局状态,或改变其他细胞的值)是坏的代码,和UDF不能无论如何改变另一单元格的值.


将函数设置为私有将阻止这一点,但它还将做的是删除显示函数参数的方便提示,这些函数是从存储函数的模块以外的模块调用的.

使它Private不仅"删除方便的提示",它使其他模块无法访问该功能,并且您的代码将无法编译.

如果您的代码具有UDF,请将它们全部放在相同的标准模块中,例如UserFunctions,Public为了便于阅读,明确地将它们制作出来.

如果您的代码有宏,请将它们全部放在同一个标​​准模块中,例如Macros,Public为了便于阅读,请明确说明它们.

如果您的代码具有需要的函数和过程Public(例如,它们是从UDF和/或宏访问的),Public为了可读性而明确地将它们放在一起,并将它们放入适当命名的标准模块中(即避免HelperManager模块,它们不可避免地成为一个倾销任何不适合任何地方的东西,并变得一团糟).

然后把它放在顶部:

Option Explicit
Option Private Module
Run Code Online (Sandbox Code Playgroud)

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


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