工作表上的私人function是可用的

我发现私人function仍然可以从工作表中。 它们是隐藏的,但如果用户键入他们的名字,他们将被调用。 为什么? 它应该这样工作吗? 有没有办法完全阻止用户定义的函数在VBA项目之外使用? 我试过用Private关键字来声明函数,或者在我的模块的顶部放置Option Private Module 。 提前致谢。

选项专用模块,只是从function向导隐藏的UDF。 这个选项可以让你隐藏外部用户的模块,并且更容易看到你公开的函数调用。 如果知道函数的名字,您仍然可以在工作表中使用它们。 这是如何工作的。

但是,如果您尝试从其他任何地方使用该专用function,例如Worksheet_Change事件,您将无法执行此操作。 如果他们被宣布为“公共”与“选项私人模块”,那么他们可以访问。

来自MSDN :

当模块包含选项专用模块时,在模块级别声明的公共部分(例如variables,对象和用户定义types)在包含该模块的项目中仍然可用,但其他应用程序或项目不可用。

关于你的问题

有没有办法完全阻止用户定义的function在VBA项目之外使用?

有两种方法我可以想到

1)保护你的VBA项目,使用户不知道函数的名称。

2)创build一个加载项