首页 > 解决方案 > 允许在一个打开的工作簿中使用 UDF,但使其在另一个工作簿中不可见/不可用/不可访问

问题描述

我在一个工作簿 ( ) 中有两个相当简单的 UDF Book 1,我也向函数向导注册了它们。一切都可以无缝运行。但是,当我打开两个不同的工作簿时,Book 1Book 2可以使用来自Book 1.Book 2Book 2没有以与 相同的方式在功能向导下注册它们Book 1,但功能仍然完全正常。

这是每个工作簿当前显示方式的图片:

书 1                     书 2 两个工作簿功能向导

如果没有创建加载项,有没有办法对此进行编码,以便中的 UDF 仅在 Book 1 可见 Book 1,尽管可能打开任何其他工作簿?

编辑:
所以加载项甚至可能是不可能的。但是,是否有另一种方法来解决这个问题,以便唯一可以使用这些功能的工作簿是Book 1


注意:Option Private Module不起作用,因为它会在两本书中对用户隐藏这些功能,但它确实Book 2无法使用该功能。我的最终目标是让它Book 1Book 2.

标签: vbaexcelexcel-2010user-defined-functions

解决方案


我不确定您是否可以做到这一点,以便该功能在不同的工作簿中根本不会出现。它们都在同一之下Application,因此它们是相关的。

您可以使用Application.Caller将包含触发 UDF 的 Range 对象:

 If Application.Caller.Parent.Parent.Name <> "Book1.xlsm" Then Exit Function

并且基本上什么都不返回,导致函数毫无价值,如果你把这个放在你的代码中(作为函数的第一行),它将使用非常有限的资源。


推荐阅读