5

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

我努力了

Application.DisplayAlerts = False

但这不会抑制消息框。

有没有办法做到这一点?

谢谢

4

1 回答 1

2

一种方法是稍微修改原始 sub 的代码。您将需要获得必要的权限...

  • 通过在末尾添加一个额外的可选参数来修改原始 sub 的标题,将默认值设置为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通过作为额外参数输入来修改调用原始 sub 的行。这将导致OriginalSubName您的参数集, False。这样,默认情况下您不会抑制对话框,但是当您在子中使用它时会这样做。

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

  • 可选部分:这可以防止其他现有的 sub 在调用修改后的 sub 时崩溃
  • Variant 类型部分:可选参数始终是 Variant 类型。这也是为什么您需要使用If showMessages = True Then而不仅仅是If showMessages Then.
于 2013-04-17T07:59:56.450 回答