Страницы: 1
RSS
Макрос на автоматическое закрытие файла по таймеру
 

Добрый день. Вписал в макрос, который не дает пользоваться книгой без включения макросов, строчку для  закрытия файла по таймеру. Все работает, вот только если макрос по  истечению времени сам закрывает файл, то при следующем открытии файла  лист с инструкцией по включению макросов не появляется и возможно  работать в файле без включения макросов, а следовательно и макрос на  отключение по таймеру работать не будет. Он появляется снова только при  разовом включении макросов самостоятельно, а потом снова все работает,  до закрытия файла макросом.

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

Код для книги:

Код
'Данная процедура скрывает перед закрытием книги все листы,
 'кроме листа "Внимание"
 Sub Workbook_BeforeClose(Cancel As Boolean)
     Application.ScreenUpdating = False
     Dim wsSh As Worksheet
     Sheets("Внимание").Visible = -1
     For Each wsSh In ThisWorkbook.Sheets
         If wsSh.Name  "Внимание" Then wsSh.Visible = 2
     Next wsSh
     ThisWorkbook.Save
 End Sub
 'Данная процедура показывает перед открытием книги все листы,
 'кроме листа "Внимание"
 Sub Workbook_Open()
     Dim wsSh As Worksheet
     For Each wsSh In ThisWorkbook.Sheets
         wsSh.Visible = -1
     Next wsSh
     ThisWorkbook.Sheets("Внимание").Visible = 2
     Application.OnTime Now + TimeValue("00:01:00"), "CloseBook"
 End Sub

Код для модуля:

Код
Public iTimer As Date
 Private Sub CloseBook()
 ThisWorkbook.Close (True)
 End Sub

Изменено: asu2601 - 02.10.2017 14:01:19
 
Как вариант:

Разделите задачи. Пусть макрос скрытия и отображения листов работает сам по себе, а автоматическое закрытие книги отдельно.
Вот вам код, который закрывает книгу через 10 мин. Измените время 12:10:00, на то, которое потребуется Вам.

Код
Private Sub Auto_Close()
Dim DateTime As Date
    DateTime = Now + #12:10:00 AM#
    Application.OnTime DateTime, "TimeOut"
End Sub

Private Sub Workbook_BeforeClose1(Cancel As Boolean)
    On Error Resume Next
    Application.OnTime DateTime, "TimeOut", , False
End Sub
Private Sub TimeOut()
    ThisWorkbook.Close True
End Sub
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
asu2601, код следует оформлять соответствующим тегом. Ищите такую кнопку и исправьте своё сообщение.
 
Разобрался, все работает, всем спасибо.
Страницы: 1
Читают тему
Наверх