【问题标题】:Excel VBA - Application.OnTime not working and WScript.Shell.PopUp timer not workingExcel VBA - Application.OnTime 不工作和 WScript.Shell.PopUp 计时器不工作
【发布时间】:2015-07-20 17:29:56
【问题描述】:

我有一个自动化任务,它会在每天早上的特定时间打开 Excel 并运行一些 VBA 代码。如果用户打开了 excel 文件,我想警告他们该文件将在片刻后通过弹出消息自动关闭,然后不久之后 Excel 会自动保存并退出。如果用户离开他们的计算机,我希望弹出消息在 5 秒后自动关闭,这样它就不会冻结我的 SaveExit 子程序。

弹出消息正在出现,但不会自动关闭。 只有单击“确定”时才会关闭。这会阻止 SaveExit 例程运行。

Microsoft Excel ObjectsThis Workbook

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

在名为autoclosemodule 中:

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 我也无法使用表单。当我使用Application.OnTimeApplication.Wait 在表单代码中输入unload me 命令时,没有任何反应。当我尝试使用另一个子程序调用表单然后使用Application.OnTime 卸载它时,它可以工作...但是当我尝试从Workbook_Open 例程中的Application.OnTime 命令启动该子程序时,它显示“宏不可用或未启用宏”。
  • 这很有趣....逻辑似乎合理。也许尝试在表单打开而不是 workbook_open 后添加准时事件。所以在CloseWarn() 过程中添加Application.OnTime Now + TimeValue("00:00:15"), "CloseWarningForm"
  • 这将有助于显示您用于显示和关闭自定义表单的代码。

标签: vba excel popup wsh


【解决方案1】:

想通了!感谢@Evan 为我指明了正确的方向。我不明白为什么,但是当在Workbook_Open 下使用Application.OnTime 命令时,如果我识别出例程所在的模块,事情会更好。在我弄清楚这一点后,我将我的潜艇移至ThisWorkbook 以简化我的代码。我创建了一个名为CloseAlertuserform,它通知用户Excel 即将自动关闭。用户窗体在 5 秒后关闭,或在用户单击“确定”时关闭。

Microsoft Excel ObjectsThisWorkbook

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

在一个单独的module 中称​​为unload_CloseAlert

Public Sub Unloadit()
unload CloseAlert
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-04
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多