VBA Сохранение задержки после ввода данных - PullRequest
0 голосов
/ 12 декабря 2018

VBA новичок здесь.Я ищу способ, с помощью которого мой файл Excel будет автоматически сохраняться через 1 минуту после ввода данных.

Например:

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

5проходит секунд.

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

1 мин проходит.

Файл Excel сохраняется - до тех пор, пока пользователь не начнет вводить данные снова

Есть мысли?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

У меня есть аналогичный подход к 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
0 голосов
/ 12 декабря 2018

Одной из возможностей является использование события 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 , если вы хотите ограничить это для определенного листа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...