【问题标题】:Background code to see how long the spreadsheet has been open后台代码查看电子表格已打开多长时间
【发布时间】:2020-07-22 14:42:44
【问题描述】:

我想评估电子表格打开了多长时间,一旦达到特定时间(比如一个小时),就警告用户它将在 15 分钟内自动关闭。

我有一个名为 Reference 的选项卡,我可以在其中放置自动打开代码以在他们打开它时进行记录,但我希望电子表格在特定时间间隔内自动检查工作表已打开多长时间。

我想强制关闭用户不小心打开电子表格的情况,因此重要的是不要根据用户输入对其进行评估。
注意 - 我不在乎他们是否失去工作,我只想关闭电子表格。

【问题讨论】:

  • 看看Application.OnTime:docs.microsoft.com/en-us/office/vba/api/… 放入Workbook.Open-Trigger
  • 非常感谢!我不知道这是一件事。听起来肯定会奏效。
  • FunThomas,如果您将此作为答案发布,我可以接受。目前我所能做的就是为你投票。

标签: excel vba


【解决方案1】:

要安排例程的调用,请使用Application.OnTime。为确保例程安排在“打开后一小时”,请创建一个 Workbook-Open 子(在 ThisWorkbook-Module 中)并将类似以下内容放入其中:

Private Sub Workbook_Open()
    Application.OnTime DateAdd("h", 1, Now), "InformUser"
End Sub

这将在工作簿打开一小时后调用 Sub InformUser。在此例程中,您可以向OnTime 添加另一个调用。但是,您需要注意如何通知用户。如果您简单地使用MsgBox,但用户没有对此做出反应,则 MsgBox-Window 保持活动状态并且因为它是一个模式窗口,代码将不会继续运行并且OnTime-procedure 将永远不会被触发。创建一个带有 TimeOut 的 MsgBox 并不容易(参见Display a message box with a timeout value),所以可以创建一个简单的表单并将其显示为 Non-Modal。

Sub InformUser()
    InfoForm.Show modal:=False
    Application.OnTime DateAdd("n", 15, Now), "ShutDown"   ' "n": Minutes ("m" stands for months)
End Sub

Sub ShutDown
    ThisWorkbook.Close SaveChanges:=True   ' Or "False" if you don't want to save - use on your own risk...
End Sub

【讨论】:

  • Afaik OnTime 的过程参数应该是一个字符串,例如Application.OnTime DateAdd("n", 15, Now), "InformUser"
  • @T.M.很好,已更正代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多