【发布时间】:2019-03-29 03:25:27
【问题描述】:
我正在构建的 xlam Excel 插件正在与外部来源的电子表格进行交互。问题在于,工作簿更改事件中的工作表以及其他内容中的代码会引发 MsgBox 弹出窗口,在等待用户输入时会干扰自动化。不直接调用弹出窗口 - Workbook Change 事件正在调用名为“ShowPopup”的自定义 Sub。然后在“ShowPopup”里面我们有 MsgBox 调用。
我的想法是,如果我可以覆盖 ShowPopup 子,我可以阻止它创建 MsgBox。有可能吗?
对潜在解决方案的限制:
- 完全覆盖 Workbook Change 事件是行不通的,那里确实需要一些东西。
- 我无法对 xlam Excel 插件与之交互的外部来源工作表的代码进行任何修改
- Application.DisplayAlerts = False 不适用于显式调用的 MsgBox'es
【问题讨论】:
-
可能您可以(在运行时)从其他工作簿中删除 Msgbox 调用(通过 VBA 扩展库),但这可能很难管理。缺少这些(或用于监视和关闭消息框的 Windows API 调用)我不确定您能做多少。
-
@TimWilliams 你能指出我如何使用 VBA 扩展库删除“ShowPopup”子的正确方向吗?
-
cpearson.com/excel/vbe.aspx 是一个很好的参考
-
如果这不是一个插件并且可以从 IDE 调用,Rubberduck 的单元测试
FakesAPI 可能会被滥用...但是在常规 VBA 中调用 Rubberduck 测试方法代码不会连接假货 - 测试引擎会。我们使用EasyHook 挂钩到VBA 库和-是的,覆盖MsgBox调用。所以......这在技术上是可能的,是的。 -
@MathieuGuindon 我不想覆盖 MsgBox,我想覆盖一个名为“ShowPopup”的自定义子,它里面有一个对 MsgBox 的调用。我无法编辑文件本身的 VBA,但我有用于协助与该文件交互的 .xlam 插件。理想情况下,我想将文件中的“ShowPopup”子替换为 .xlam 插件中的子。