版本
Excel 2016桌面版
背景
一个VBA项目(“客户端” .xlsb文件)引用了另一个工作簿(工具菜单 > 引用)。所引用的工作簿不是插件,而是一个普通的 .xlsb 文件。
这导致如果客户端文档仍然打开,则无法关闭被引用的文档:
"This workbook is currently referenced by another workbook and cannot be closed."
我希望实现的行为是当使用VBA通过ThisWorkbook.Close
关闭客户端工作簿时,被引用的工作簿保留在内存中而不自动关闭。如何在使用VBA关闭客户端工作簿时使被引用的工作簿自动关闭呢?理想情况下,解决方案应该可以关闭被引用的工作簿,即使打开了其他工作簿。不能使用需要编程从客户端中删除引用的解决方案,因为无法保证用户是否拥有VBA的受信任访问权限和宏安全性。
假设有多个打开的文档可能引用了被引用的文档,因此必须在最后一个客户端关闭之前才能关闭引用。已尝试的解决方案包括:1.使用AfterClose
事件来让被引用的文档在没有其他打开的客户端时关闭自身,但挑战在于需要等到所有客户端关闭后才能关闭被引用的文档,并且没有适合的Workbook_AfterClose
事件; 2.使用OnTime
事件在最后一个客户端关闭5秒后模拟AfterClose事件,但如果在由VBA启动的ClientWorkbook.Close
中注册了OnTime事件,则似乎不会触发; 3.模拟关闭按钮点击,但操作鼠标似乎是个坏主意,而且如果有其他无关的工作簿打开,此方法无法关闭被引用的文档; 4.在关闭客户端之前以编程方式删除引用,但这需要VBA的受信任访问权限。
.IsAddin
的信息。它与问题无关。 - johny why