从VBA中的另一个子例程中抑制MsgBox

时间:2012-11-29 22:04:14

标签: vba msgbox

我有一个VBA子程序,可以调用其他人编写的子程序。偶尔,另一个子打开带有OK按钮的MsgBox。另一个子程序需要很长时间才能运行,我称之为数百次,所以我希望能够在一夜之间运行它。不幸的是,我无法找到一种方法来自动点击MsgBox上的OK。

我试过了

Application.DisplayAlerts = False

但这不会禁止消息框。

有没有办法做到这一点?

由于

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是稍微修改原始子的代码。你需要拥有必要的权限......

  • 通过在结尾处引入额外的optinal参数来修改原始子的标头,将默认值设置为True。这会产生类似Sub OriginalSubName(原始参数集, Optional ShowMessages = True)
  • 的内容
  • 在调用msgbox的位置,以这种方式修改代码:

    If showMessages = True Then 'The = True part is important here - see below.
    showMessages is a Variant type
        'The original statement that calls the msgBox
    End If
    
  • 保留原始子代码的其余部分

  • 通过将False作为额外参数投入,修改调用原始子的行。这会导致OriginalSubName您的参数集, False。这样,默认情况下不会禁止显示对话框,但是在子文档中使用它时会执行此操作。

不知道为什么我使用可选的Variant类型参数?

  • 可选部分:这可以防止其他现有潜艇在调用修改后的潜艇
  • 时崩溃
  • Variant类型部分:可选参数始终为Variant类型。这也是您需要使用If showMessages = True Then而不仅仅是If showMessages Then
  • 的原因