【发布时间】:2017-01-09 08:30:59
【问题描述】:
我遇到了多个用户需要访问一个工作簿的情况(由于所有问题,希望避免使用“共享工作簿”选项)。我已确定可能的解决方案是让工作簿在 15 分钟不活动后自动关闭。
我还希望在 15 分钟后弹出一条消息,提醒用户除非他们单击“确定”按钮,否则工作簿将关闭。如果他们单击按钮,我希望计数器重新开始,理想情况下,如果他们不单击任何内容,工作簿将在再过 1 分钟后自动关闭。
我在网上找到了一些我用过的代码。工作簿在指定时间后成功关闭,但我不知道如何弹出消息框。非常感谢任何帮助,谢谢!
我使用的代码如下:
在模块 1 中:
Dim DownTime As Date
Sub SetTimer()
DownTime = Now + TimeValue("0:15:00")
Application.OnTime EarliestTime:=DownTime, _
Procedure = "ShutDown", Schedule:=True
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=DownTime, _
Procedure:="ShutDown", Schedule:=False
End Sub
Sub ShutDown()
Application.DisplayAlerts = False
With ThisWorkbook
.Saved = True
.Close
End With
End Sub
在 ThisWorkbook 中:
Private Sub Workbook_Open()
Call SetTimer
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopTimer
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Call StopTimer
Call SetTimer
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
Call StopTimer
Call SetTimer
End Sub
【问题讨论】:
-
MsgBox("超时?")?那不行吗?
-
再想一想,如果工作簿处于非活动状态,显示消息框将无济于事,因为它需要用户输入,而用户可能已经离开。 :-)
-
@dgorti 然后可以按预期关闭工作簿。
-
不要从“关闭”子程序中关闭工作簿,而是为此目的编写另一个子程序。在这个 sub 中添加一个 ontimer 事件(持续 1 分钟)并调用新的 sub 以真正关闭。您可以根据需要显示来自“关闭”子的消息。注意:不要使用“msgbox”来显示您的消息,因为它会抛出一个需要交互的对话框。而是创建一个简单的消息显示表单,可以在 1 分钟后卸载。完成工作后,我可以给你一个样品
标签: vba excel auto-close