vba - 允许在一个打开的工作簿中使用 UDF,但使其在另一个工作簿中不可见/不可用/不可访问
问题描述
我在一个工作簿 ( ) 中有两个相当简单的 UDF Book 1
,我也向函数向导注册了它们。一切都可以无缝运行。但是,当我打开两个不同的工作簿时,Book 1
我Book 2
可以使用来自Book 1
.Book 2
Book 2
没有以与 相同的方式在功能向导下注册它们Book 1
,但功能仍然完全正常。
这是每个工作簿当前显示方式的图片:
如果没有创建加载项,有没有办法对此进行编码,以便中的 UDF 仅在 Book 1
中可见 Book 1
,尽管可能打开任何其他工作簿?
编辑:
所以加载项甚至可能是不可能的。但是,是否有另一种方法来解决这个问题,以便唯一可以使用这些功能的工作簿是Book 1
?
注意:Option Private Module
不起作用,因为它会在两本书中对用户隐藏这些功能,但它确实Book 2
无法使用该功能。我的最终目标是让它Book 1
在Book 2
.
解决方案
我不确定您是否可以做到这一点,以便该功能在不同的工作簿中根本不会出现。它们都在同一之下Application
,因此它们是相关的。
您可以使用Application.Caller
将包含触发 UDF 的 Range 对象:
If Application.Caller.Parent.Parent.Name <> "Book1.xlsm" Then Exit Function
并且基本上什么都不返回,导致函数毫无价值,如果你把这个放在你的代码中(作为函数的第一行),它将使用非常有限的资源。
推荐阅读
- windows - 如何在 Windows 启动时运行 git bash 脚本
- cypress - 通过嵌套的 ng-reflect-model 值获取元素
- java - Jackson 将 POJO 序列化为 JS 对象
- java - Java7 WeakHashMap isEmpty() 似乎是错误的
- c++ - 如何在 C++ 中创建定时器 无法计算出 CALLBACK 的定时器 ID 值
- c# - 如何更改组合框项目文本翻译?
- javascript - 福米克 | 如何使用多个验证模式并为表单呈现拆分视图
- sql - 从多个日期范围中提取每周的天数
- python - 从 Colaboratory 删除文件而不移动到废纸篓
- laravel - Vue 和 Laravel:从 Vue 组件调用 PHP?