如何在设定的时间后自动保存并退出工作表? (Excel VBA)

时间:2012-06-08 13:00:02

标签: excel-vba vba excel

如果超过5分钟没有活动,是否有办法让开放式工作表自行关闭?

例如:我在工作表上工作了一段时间,然后在打开表单的情况下离开20分钟。网络上的某个人需要访问该表,但不能因为我在其上。

我想要它,以便在我离开办公桌超过5分钟后,纸张将自行保存并关闭所述纸张。

这可能吗?如果是这样的话?我可以找到脚本来展示如何保存和关闭工作表,但我还没有找到一个使用计时器的脚本......

2 个答案:

答案 0 :(得分:3)

这是链接中的信息,因此可以将此问题用作参考:

将此代码插入模块:

' DateTime  : 09/05/2007 08:43
' Author    : Roy Cox (royUK)
' Website   :  Clck here for more examples and Excel Consulting
' Purpose   : Place in a standard module
' Disclaimer; This code is offered as is with no guarantees. You may use it in your
'             projects but please leave this header intact.

'---------------------------------------------------------------------------------------
Option Explicit
Public EndTime
Sub RunTime()
    Application.OnTime _
            EarliestTime:=EndTime, _
            Procedure:="CloseWB", _
            Schedule:=True
End Sub
Sub CloseWB()
    Application.DisplayAlerts = False
    With ThisWorkbook
        .Save
        .Saved = True
        .Close
    End With
End Sub

将此插入“ThisWorkbook”

Private Sub Workbook_Open()
    '--> Set Time Below
    EndTime = Now + TimeValue("00:00:00")
    RunTime
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If EndTime Then
        Application.OnTime _
        EarliestTime:=EndTime, _
        Procedure:="CloseWB", _
        Schedule:=False
        EndTime = Empty
    End If
    '--> Set Time Below
    EndTime = Now + TimeValue("00:00:00")
    RunTime
End Sub

答案 1 :(得分:2)

好的,在下面的原始答案中,经过一番研究后,我想出了自己的答案。

打开开发人员部分后,您将找到工作表,将此代码放在ThisWorkbook中。这将允许您的代码在整个工作表中工作。我现在设置了10:00分钟的初始计时器和05:00分钟的计时器,如果事后有活动的话。您可以将其更改为您想要的任何内容。

Option Explicit
Private Sub Workbook_Open()
    EndTime = Now + TimeValue("00:10:00")
    RunTime
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If EndTime Then
        Application.OnTime _
                EarliestTime:=EndTime, _
                Procedure:="CloseWB", _
                Schedule:=False
        EndTime = Empty
    End If
    EndTime = Now + TimeValue("00:05:00")
    RunTime
End Sub

下面的部分需要进入一个新创建的模块,按名称命名,我的名字叫做SaveWB

Option Explicit

Public EndTime
Sub RunTime()
    Application.OnTime _
            EarliestTime:=EndTime, _
            Procedure:="CloseWB", _
            Schedule:=True
End Sub

Sub CloseWB()
    Application.DisplayAlerts = False
    With ThisWorkbook
        ThisWorkbook.Close savechanges:=True
    End With
End Sub

我改变了代码:

With ThisWorkbook
    .Save
    .Saved = True
    .Close
End With

上面的内容。

    With ThisWorkbook
        ThisWorkbook.Close savechanges:=True
    End With

我创建的部分有效,最初发布的部分在关闭时起作用但不保存。做你想做的事情,按你认为合适的方式改变它,但我很高兴能让它发挥作用。