当 WSH.Popup 等待一定时间时 Msgbox 不关闭

Msgbox not closing when WSH.Popup waits for certain time

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

我试过不带变量直接放置秒数,我也试过单独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

我觉得和"Call consulta"程序有关,试试用megbox测试一下。

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

USERFORM 密码

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

好的,经过大量研究后,我成功地完成了我想做的事情,没有遇到很多问题。 首先,我创建了一个包含以下内容的脚本(.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 调度程序事件,因此它会 运行 自己使用脚本。这样一来,我就不需要弹出窗口来询问我是否要 运行 某些东西,并且当事件被设置的条件触发时,脚本只会 运行。

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

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