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

在Excel中编写公式时,如何防止建议使用自定义VBA函数?,vba,excel,excel-formula,excel-2010,Vba,Excel,Excel Formula,Excel 2010,我正在编写一系列VBA函数/子函数,这些函数/子函数可以在许多项目中重用。我遇到的问题是,在使用图纸时,这些函数列在建议的公式函数中 将函数设置为私有将防止这种情况,但它也将删除从存储函数的模块以外的模块调用时显示函数参数的方便提示 有没有人知道一种方法可以防止在不将自定义函数私有化的情况下建议使用自定义函数?无参数公共标准模块的成员是两件事之一: Sub过程,它们作为宏公开 函数过程,它们作为UDF公开 请注意,如果未指定访问修饰符,则成员是隐式的Public 具有参数的Sub不能作为

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

将函数设置为私有将防止这种情况,但它也将删除从存储函数的模块以外的模块调用时显示函数参数的方便提示


有没有人知道一种方法可以防止在不将自定义函数私有化的情况下建议使用自定义函数?

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

  • Sub
    过程,它们作为宏公开
  • 函数
    过程,它们作为UDF公开
请注意,如果未指定访问修饰符,则成员是隐式的
Public

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

具有副作用的
函数
(例如,改变某些模块/全局状态,或更改其他单元格的值)是错误的代码,UDF无论如何也不能更改其他单元格的值


将函数设置为私有将防止这种情况,但它也将删除从存储函数的模块以外的模块调用时显示函数参数的方便提示

将其设置为私有不仅“删除了方便的提示”,还会使其他模块无法访问该函数,并且您的代码将无法编译

如果您的代码有自定义项,请将它们全部放在同一个标准模块中,例如
UserFunctions
,并为了可读性,将它们显式地设置为
Public

如果您的代码中有宏,请将它们全部放在同一个标准模块中,例如
,为了可读性,请将它们显式地设置为
公共

如果您的代码中有需要公开的函数和过程(例如,它们是从UDF和/或宏访问的),为了可读性,请将它们显式公开,并将它们放在适当命名的标准模块中(也就是说,避免使用
Helper
Manager
模块,它们不可避免地会变成一个垃圾袋,里面装满了任何地方都放不下的东西,并变得一团糟)

然后把这个放在最上面:

Option Explicit
Option Private Module
该选项(
Private Module
)阻止所有公共/公开成员作为宏和UDF拾取。
option Explicit
无论如何都应该存在



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

这非常有效,我希望您能够就一个新问题提供进一步的建议。我正在尝试将可重用函数放入外接程序中,并将此外接程序作为参考(工具>参考)在其他将使用这些功能的外接程序中。这里的问题是,通过实施您的建议,新外接程序将无法访问私有模块。您是否可以添加任何进一步的内容来改进此功能?我是否应该创建一个新问题?我将在评论中回答,但它不适合-是的,作为一个单独的外接程序可能会更好问题。