Необходимо сбросить таймер автосохранения при сохранении документа вручную - PullRequest
1 голос
/ 16 января 2020

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

If ThisWorkbook.Name = "mydoc.xlsm" Then
    Application.OnTime Now + TimeValue("00:30:00"), "Save_Workbook"
End If

Я попробовал оператор if:

If ActiveWorkbook.Saved = False Then
    Application.OnTime Now + TimeValue("00:01:00"), "ShowMsg"
End If

Чтобы увидеть, сохранит ли я документ, остановлю ли ShowMsg. Но даже после сохранения документа ShowMsg отключается на отметке 1 минуты. Это не меняет таймер.

Редактировать: Решение Я использовал

Я смог выполнить sh, что я хотел, используя следующие методы.

В Рабочей книге

Я использовал функцию Workbook_BeforeSave (), чтобы остановить таймер после сохранения.

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, _
    Cancel As Boolean)

    Call StopTimer

End Sub

Это вызывает модуль StopTimer (). Это определено на уровне модуля.

Option Explicit
Public RunWhen
Public cRunWhat

Public Sub StartTimer()
    RunWhen = Now + TimeValue("00:01:00")
    cRunWhat = "Save"
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
End Sub
Public Sub StopTimer()
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
    StartTimer
End Sub

Теперь у меня была другая функция в книге, называемая StartTimer, а Save () была просто c функцией сохранения книги.

Основная проблема, с которой я столкнулся, была решена мной в другом посте. Ссылка здесь

Я буду копировать это решение в этот пост.

1 Ответ

2 голосов
/ 16 января 2020

Вы можете использовать событие BeforeSave.

https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.beforesave

Что-то вроде:

В ThisWorkbook:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ 
        Cancel as Boolean) 
Call Timer
End Sub

В модуле:

Sub Timer()
Application.OnTime Now + TimeValue("00:00:03"), "Hello"
End Sub
Sub Hello()
MsgBox "Hello"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...