数据输入后的VBA保存延迟

时间:2018-12-12 05:41:02

标签: excel vba save data-entry

VBA新手在这里。我正在寻找一种方法,允许我的excel文件在输入数据1分钟后自动保存。

例如:

User Inputs Data --> Timer Starts (1min)

5秒过去。

User inputs Data --> Timer Restarts (1min)

1分钟过去。

Excel文件保存-直到用户再次开始输入数据

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

一种可能性是利用Workbook.SheetChange事件和Application.OnTime。您还需要一个Public变量,在下面的示例中为ScheduledTime

每次更改(非图表)工作表(例如通过数据输入):

  1. 任何先前安排的保存(只要它仍处于一分钟的窗口内)都将被取消。
  2. 新的保存时间计划为一分钟。

类似以下内容:

ThisWorkbook代码模块中:

Option Explicit

Public ScheduledTime

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
 ByVal Target As Range)

    On Error Resume Next
    Application.OnTime EarliestTime:=ScheduledTime, Procedure:="SaveTheFile", Schedule:=False
    On Error GoTo 0

    ScheduledTime = Now + TimeValue("00:01:00")
    Application.OnTime EarliestTime:=ScheduledTime, Procedure:="SaveTheFile"
End Sub

在常规代码模块中:

Public Sub SaveTheFile()
    ThisWorkbook.Save
End Sub

如果您想将其限制在特定工作表上,也可以使用Worksheet Change事件。

答案 1 :(得分:0)

我对BigBen有类似的看法。

ThisWorkbook模块中:

Option Explicit

Public SnapShot As String

Private Sub Workbook_Open()
    StartTimer
End Sub

Sub StartTimer()
    If SnapShot = vbNullString Then SnapShot = Now
    If DateDiff("s", SnapShot, VBA.CStr(Now)) >= 10 Then ThisWorkbook.Save
    RestartTimer
End Sub

Sub RestartTimer()
    Application.OnTime Now + TimeValue("00:00:10"), "ThisWorkbook.StartTimer"
End Sub

然后在您要监视的工作表中:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    ThisWorkbook.SnapShot = Now
End Sub