【问题标题】:Msgbox not closing when WSH.Popup waits for certain time当 WSH.Popup 等待一定时间时,Msgbox 未关闭
【发布时间】:2019-05-31 19:02:52
【问题描述】:

我有一个 Excel 文件,它可以使用 Windows 调度程序自动打开。我还有一个Auto_Open 子可以立即运行宏。为了避免每次打开它都开始运行而没有机会修改它,我设置了一个msgbox,让我选择宏是否运行。但是,我希望 Excel 在 10 秒后自动选择“是”,但我无法得到它。这是我的代码:

我尝试过不使用变量直接放置秒数,我也尝试过单独使用Case -1,但没有任何效果。

Sub Auto_Open()

Set WSH = CreateObject("WScript.Shell")
'cTime = 10 
BtnCode = WSH.Popup("¿Desea generar la consulta de vacaciones?", cTime, "Consulta", vbYesNo)

Select Case BtnCode
    Case vbYes
    Call consulta

    Case vbNo

    Case 1, -1
    Call consulta

    End Select

End Sub

【问题讨论】:

  • 你可以使用这样的东西。 Application.Wait Now + #0:00:01# or (for Excel 2010 and later): Application.Wait Now + #12:00:01 AM#
  • 但是我怎么做呢,在弹出窗口显示之后,它停止等待答案并开始等待这条指令?因为它就像在我选择某些东西之前停止,这就是我使用 WSH.Popup 的原因,因为它可以选择设置在它继续之前要等待多少秒。
  • 我认为以下答案更符合您的需求。你是对的,弹出窗口将停止执行 vba,直到按下按钮。

标签: excel vba wsh


【解决方案1】:

结合使用用户表单和模块来运行它可能更容易。 UserForm 需要用Msgbox 替换你正在做的任何事情。您需要的代码如下所示:

用户表单代码

Private Sub CommandButton2_Click()

'Run code for yes

'then
Unload Me

End Sub

Private Sub CommandButton1_Click()
'run code for "no".

'then
Unload Me

End Sub


Private Sub UserForm_Activate()

Application.OnTime Now + TimeValue("00:00:10"), "KeepItGoing"

End Sub

然后你可以让它与外部模块交互:

Sub launchSOMETHING()
'Run this first

UserForm1.Show

End Sub


Sub KeepItGoing()

If UserForm1.Visible = True Then
    MsgBox "BOOOOMO"
    Unload UserForm1


End If


End Sub

You can see an example in this file here.

更新:似乎所有宏都会在Msgbox 打开时暂停。在下面的两个过程中,您会注意到第二个过程要等到盒子关闭后才会触发,即使它应该在 5 秒内运行。

Sub TestWhatMsgBoxDoes()

Application.OnTime Now + TimeValue("00:00:5"), "someOtherMacro"
MsgBox "Everything is on hold?"



End Sub


Sub someOtherMacro()
Application.StatusBar = "The Second Macro has run at" & Now()


End Sub

【讨论】:

  • 谢谢,我真的很想知道为什么 Case -1 不起作用,因为这就是 WSH.Popup 应该如何工作的。如果没有选择,我会选择用户表单。
  • 你好 PGCodeRider。感谢您花时间回答这个问题。我在这个问题上取得了进展,我仍在寻找答案。首先,它不是一个 MSGBOX 命令,它是一个 Windows Script (Popup),它有 nSecondsToWait 作为参数。因此,有可能使用它。我发现如果我在工作簿打开时运行宏,它可以完美地工作,但是当Auto_Open 宏运行时它不会工作。所以剩下的唯一一件事就是知道为什么会发生这种情况。
【解决方案2】:

我认为与“Call Consulta”程序有关,请尝试使用 megbox 进行测试。

【讨论】:

  • 您好,感谢您的回复。它也不起作用。它发送带有 vbyes 和 vbno 的 msgbox,但 case -1 在 10 秒后没有执行任何操作。
【解决方案3】:

好的,所以经过大量研究后,我设法做了我想做的事,没有很多问题。 首先,我创建了一个包含以下内容的脚本(.vbs 文件):

Dim objExcel
Dim objWB

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWB = objExcel.Workbooks.Open("R:path\file.xlsm")
objExcel.Run "MyMacroName"
objWB.Save
objWB.Close False
objExcel.Quit

现在每次我运行脚本时,宏都会自动运行。我还设置了一个 Windows 调度程序事件,以便它可以通过脚本自行运行。这样,我就不需要Popup来询问我是否要运行某些东西,并且脚本只会在Event被设置的条件触发时运行。

另一方面,Excel文件本身在打开工作簿时不会自动运行,因此任何用户都可以毫无问题地对其进行修改。

感谢帮助我度过难关的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2014-12-29
    • 2012-01-10
    相关资源
    最近更新 更多