Excel VBA - Application.OnTime 不工作并且 WScript.Shell.PopUp 计时器不工作
Excel VBA - Application.OnTime not working and WScript.Shell.PopUp timer not working
我有一个自动任务会在每天早上的特定时间打开 Excel 和 运行 一些 VBA 代码。如果用户打开了 excel 文件,我想警告他们该文件将在片刻后通过弹出消息自动关闭,然后不久之后让 Excel 自动保存并退出。如果用户离开他们的计算机,我希望弹出消息在 5 秒后自动关闭,这样它就不会冻结我的 SaveExit
子例程。
弹出消息正在出现,但不会自动关闭。
只有在单击 "OK" 时才会关闭。这会阻止 SaveExit
例程 运行ning。
在 This Workbook
中的 Microsoft Excel Objects
下:
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Pull Data").Activate
Application.OnTime TimeValue("1:00:00 AM"), "CloseWarn", TimeValue("1:02:00 AM")
Application.OnTime TimeValue("1:03:00 AM"), "SaveExit", TimeValue("1:04:00 AM")
End Sub
在 module
中调用 autoclose
:
Sub SaveExit()
Application.DisplayAlerts = False
With ThisWorkbook
.Save
Application.Quit
End With
End Sub
Sub CloseWarn()
Select Case CreateObject("WScript.Shell").PopUp("closing soon", 5, "Warning")
Case 1, -1
End Select
End Sub
如何让弹出警告消息在特定时间显示,然后在没有用户输入时关闭??
想通了!感谢@Evan 为我指明了正确的方向。我不明白为什么,但是当在 Workbook_Open
下使用 Application.OnTime
命令时,如果我识别例程所在的模块,事情会更好。在我弄清楚这一点后,我将我的潜艇移动到 ThisWorkbook
以简化我的代码。我创建了一个名为 CloseAlert
的 userform
,通知用户 Excel 即将自动关闭。用户窗体在 5 秒后或在用户单击 "OK".
后关闭
在 ThisWorkbook
中的 Microsoft Excel Objects
下:
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Pull Data").Activate
Application.OnTime TimeValue("16:08:00"), "ThisWorkbook.ShowCloseAlert"
Application.OnTime TimeValue("16:09:00"), "ThisWorkbook.SaveExit"
End Sub
Private Sub ShowCloseAlert()
CloseAlert.Show vbModeless
Application.OnTime Now + TimeValue("00:00:05"), "Unloadit"
End Sub
Sub SaveExit()
Application.DisplayAlerts = False
With ThisWorkbook
.Save
Application.Quit
End With
End Sub
在一个名为 unload_CloseAlert
的单独 module
中:
Public Sub Unloadit()
unload CloseAlert
End Sub
我有一个自动任务会在每天早上的特定时间打开 Excel 和 运行 一些 VBA 代码。如果用户打开了 excel 文件,我想警告他们该文件将在片刻后通过弹出消息自动关闭,然后不久之后让 Excel 自动保存并退出。如果用户离开他们的计算机,我希望弹出消息在 5 秒后自动关闭,这样它就不会冻结我的 SaveExit
子例程。
弹出消息正在出现,但不会自动关闭。
只有在单击 "OK" 时才会关闭。这会阻止 SaveExit
例程 运行ning。
在 This Workbook
中的 Microsoft Excel Objects
下:
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Pull Data").Activate
Application.OnTime TimeValue("1:00:00 AM"), "CloseWarn", TimeValue("1:02:00 AM")
Application.OnTime TimeValue("1:03:00 AM"), "SaveExit", TimeValue("1:04:00 AM")
End Sub
在 module
中调用 autoclose
:
Sub SaveExit()
Application.DisplayAlerts = False
With ThisWorkbook
.Save
Application.Quit
End With
End Sub
Sub CloseWarn()
Select Case CreateObject("WScript.Shell").PopUp("closing soon", 5, "Warning")
Case 1, -1
End Select
End Sub
如何让弹出警告消息在特定时间显示,然后在没有用户输入时关闭??
想通了!感谢@Evan 为我指明了正确的方向。我不明白为什么,但是当在 Workbook_Open
下使用 Application.OnTime
命令时,如果我识别例程所在的模块,事情会更好。在我弄清楚这一点后,我将我的潜艇移动到 ThisWorkbook
以简化我的代码。我创建了一个名为 CloseAlert
的 userform
,通知用户 Excel 即将自动关闭。用户窗体在 5 秒后或在用户单击 "OK".
在 ThisWorkbook
中的 Microsoft Excel Objects
下:
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Pull Data").Activate
Application.OnTime TimeValue("16:08:00"), "ThisWorkbook.ShowCloseAlert"
Application.OnTime TimeValue("16:09:00"), "ThisWorkbook.SaveExit"
End Sub
Private Sub ShowCloseAlert()
CloseAlert.Show vbModeless
Application.OnTime Now + TimeValue("00:00:05"), "Unloadit"
End Sub
Sub SaveExit()
Application.DisplayAlerts = False
With ThisWorkbook
.Save
Application.Quit
End With
End Sub
在一个名为 unload_CloseAlert
的单独 module
中:
Public Sub Unloadit()
unload CloseAlert
End Sub