首页 > 解决方案 > 在没有消息框的情况下自动运行 VBA 宏

问题描述

我有一个 Excel 宏,我想在打开文件时自动运行它。我让它工作的唯一方法是msgbox在调用我的子例程之前添加一个。但是,这需要我单击“确定”或关闭宏以运行该框。我尝试过使用定时msgbox潜艇,但这也不起作用。

由于某种原因,msgbox在 Excel 完全打开之前弹出,此时宏卡在这里(代码如下)。从这里开始,我尝试等待文件本身被打开,直到它处于写入模式(Workbook.ReadOnly = false)。这也没有奏效。

Public Sub msgBoxTimer()
    Const timeout = 2
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Popup "Measurement will begin shortly", timeout
End Sub
Private Sub Workbook_Open()
    Call msgBoxTimer
    Call init           ' initiate device
    Call updateIndex    ' collect & record measurements
End Sub

标签: excelvbamsgbox

解决方案


我从您的评论中得知您可能正在运行其他 shell 命令initupdateIndex.

需要明确的是,当你通过 VBA 中的 Shell 对象执行 Shell 命令时,默认行为是不等待 shell 命令完成后再运行下一行代码。

如果您希望 Excel 在继续之前等待 Shell 命令完成,您可以查看此问题的答案。

也就是说,如果您希望 Excel 在运行任何 shell 命令之前完全打开,您可以使用您最初想要的 MsgBox,但它必须是 VBA 的 MsgBox,您只需像这样调用它:

MsgBox "Measurement will begin shortly"

VBA 线程将等待“确定”按钮被按下,然后再继续执行。


推荐阅读