当 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 文件本身在打开工作簿时没有自动运行,因此任何用户都可以毫无问题地修改它。
感谢帮助我度过难关的人们。
我有一个 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 文件本身在打开工作簿时没有自动运行,因此任何用户都可以毫无问题地修改它。
感谢帮助我度过难关的人们。