VBA 数据输入后保存延迟
VBA Saving delay after data entry
VBA 这里是新手。我正在寻找一种方法,让我的 excel 文件在数据输入后延迟 1 分钟后自动保存。
例如:
User Inputs Data --> Timer Starts (1min)
5 秒过去了。
User inputs Data --> Timer Restarts (1min)
1 分钟过去了。
Excel 文件保存 - 直到用户再次开始输入数据
有什么想法吗?
一种可能性是利用 Workbook.SheetChange event and Application.OnTime
。您还需要一个 Public
变量,在下面的示例中为 ScheduledTime
。
每次(非图表)sheet发生变化(例如通过数据输入):
- 任何先前安排的保存,只要它仍在一分钟内 window,都会被取消。
- 新的存档计划在一分钟后。
所以像下面这样:
在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
如果您想将此限制为特定的 sheet,您也可以使用 Worksheet Change 事件。
我对此的看法与 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
VBA 这里是新手。我正在寻找一种方法,让我的 excel 文件在数据输入后延迟 1 分钟后自动保存。
例如:
User Inputs Data --> Timer Starts (1min)
5 秒过去了。
User inputs Data --> Timer Restarts (1min)
1 分钟过去了。
Excel 文件保存 - 直到用户再次开始输入数据
有什么想法吗?
一种可能性是利用 Workbook.SheetChange event and Application.OnTime
。您还需要一个 Public
变量,在下面的示例中为 ScheduledTime
。
每次(非图表)sheet发生变化(例如通过数据输入):
- 任何先前安排的保存,只要它仍在一分钟内 window,都会被取消。
- 新的存档计划在一分钟后。
所以像下面这样:
在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
如果您想将此限制为特定的 sheet,您也可以使用 Worksheet Change 事件。
我对此的看法与 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