【问题标题】:Automatically run VBA macro without a message box在没有消息框的情况下自动运行 VBA 宏
【发布时间】:2020-10-30 10:43:03
【问题描述】:

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

由于某种原因,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

【问题讨论】:

  • 在调用initupdateIndex 之前不调用msgBoxTimer 会发生什么?
  • 看起来 initupdateIndex 也在 Excel 完全打开之前运行。一旦子程序完成,开始屏幕就会消失。所以我想我现在的问题是如何让宏等到 Excel 完全打开,同时在宏启动之前完全加载文件? (由于我现在需要的 msgbox 已过时,我将删除)我尝试了 Application.Wait Now + waitTime 但这仍然会暂停 Excel 起始屏幕窗口上的宏。

标签: excel vba msgbox


【解决方案1】:

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

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

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

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

MsgBox "Measurement will begin shortly"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多