WSH.Popup等待特定时间时,Msgbox无法关闭

时间:2019-05-31 19:02:52

标签: excel vba excel-vba wsh

我有一个随Windows Scheduler自动打开的Excel文件。另外,我还有一个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

3 个答案:

答案 0 :(得分:1)

结合使用用户表单和模块来运行它可能会更容易。 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

答案 1 :(得分:0)

我认为与“呼叫咨询”过程有关,请尝试使用megbox对其进行测试。

答案 2 :(得分:0)

好的,所以经过大量研究,我设法做到了自己想要的而没有很多问题。 首先,我创建了一个包含以下内容的脚本(.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 Scheduler Event,以便它将与脚本一起单独运行。这样,我不需要弹出窗口问我是否要运行某些东西,并且只有在事件由设置的条件触发时,脚本才会运行。

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

感谢帮助过我的人们。