我正在构建的xlam Excel插件正在与外部源代码的电子表格进行交互。麻烦的是,工作簿更改事件中的工作表具有抛出MsgBox弹出窗口的代码,在等待用户输入时弄乱自动化。弹出窗口不是直接调用的 - Workbook Change事件正在调用名为“ShowPopup”的自定义Sub。然后在“ShowPopup”里面我们有MsgBox调用。
我的想法是,如果我可以覆盖ShowPopup子,我可以阻止它创建MsgBox。有可能吗?
对潜在解决方案的限制:
我设法解决了我的问题,虽然不是我原先计划的方式。最后它涉及覆盖MsgBox函数。
以下是步骤。
Global macroRunning As Boolean
macroRunning = True
和循环之后相反。MsgBoxHack
并将此代码放入:
Public Function MsgBox( _
Prompt, _
Optional Buttons As VbMsgBoxStyle = vbOKOnly, _
Optional Title, _
Optional HelpFile, _
Optional Context _
) _
As VbMsgBoxResult
If IsMissing(Title) Then
Title = "Overriden MsgBox"
End If
If macroRunning = False Then
MsgBox = VBA.Interaction.MsgBox(Prompt, Buttons, Title, HelpFile, Context)
End If
End Function
就是这样,当您的全局变量macroRunning
设置为True
时,您将看不到任何MsgBoxes缺点 - 当在Excel中启用插件时,此覆盖的MsgBox函数将在您处理的所有工作簿上运行。