Страницы: 1
RSS
Отключение таймера Now + TimeValue
 
Добрый день уважаемые знатоки VBA !

Написал макрос, который автоматически по истечении 10 минут с момента открытия книги, сохраняет в файле изменения и закрывает книгу.
Иногда необходимо определенным категориям сотрудников, работать в файле более 10 минут, соответственно нужно как-то остановить запущенный таймер. Для этого написал макрос, который останавливает запущенный таймер, но он выдает ошибку expected variable procedure not module подскажите пожалуйста в чем может заключаться ошибка ?
Код
Private Sub Workbook_Open()
Dim DateTime As Date
    DateTime = Now + TimeValue("00:10:00")
    Application.OnTime DateTime, "TimeOut"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim DateTime As Date
    On Error Resume Next
    Application.OnTime DateTime, "TimeOut", , False
End Sub

Private Sub TimeOut()
   ThisWorkbook.Close True
   ActiveWorkbook.Close True
End Sub

Private Sub TimerSTOP()
Application.OnTime EarliestTime:=DateTime, Procedure:="TimeOut", Schedule:=False
End Sub
 
Код
PUBLIC DateTime As Date ' а не DIM
д.б. объявлена глобально, а не в каждой процедуре своя.

Цитата
Private Sub TimeOut()
  ThisWorkbook.Close True
  ActiveWorkbook.Close True
End Sub
д.б. в самостоятельном модуле.
Изменено: Апострофф - 25.02.2016 11:08:37
 
Не обязательно глобально, можно и в модуле книги:
Код
Dim DateTime As Date

Private Sub Workbook_Open()
'Dim DateTime As Date
    DateTime = Now + TimeValue("00:10:00")
    Application.OnTime DateTime, "TimeOut"
End Sub
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Dim DateTime As Date
    On Error Resume Next
    Application.OnTime DateTime, "TimeOut", , False
End Sub
 
Private Sub TimeOut()
   ThisWorkbook.Close True
   ActiveWorkbook.Close True
End Sub
 
Private Sub TimerSTOP()
Application.OnTime EarliestTime:=DateTime, Procedure:="TimeOut", Schedule:=False
End Sub
 
Апострофф,спасибо большое, разобрался.

Вот код который получился у меня в итоге:

В модуль ЭтаКнига
Код
Dim DateTime As Date
Private Sub Workbook_Open()

    DateTime = Now + TimeValue("00:01:00")
    Application.OnTime DateTime, "TimeOut"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Dim DateTime As Date
    On Error Resume Next
    Application.OnTime DateTime, "TimeOut", , False
End Sub


Private Sub TimerSTOP()
Application.OnTime EarliestTime:=DateTime, Procedure:="TimeOut", Schedule:=False
End Sub
В отдельный модуль
Код
Private Sub TimeOut()
ThisWorkbook.Close True
ActiveWorkbook.Close True
End Sub
Для вызова макроса на отключение таймера из Private Sub нужно написать отдельный макрос (чтобы отключение макроса можно было повесить на кнопку
Код
Sub RUN_1()
Application.Run ("TimerSTOP")
End Sub
 
Михаил С., пока писал свой ответ Вы меня опередели )
Страницы: 1
Наверх