Автозакрытие книги Excel по таймеру

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Stiv_k
Сообщения: 3
Зарегистрирован: 16 янв 2013, 17:02

Уважаемые гуру!
Помогите, пожалуйста, решить проблему.

На сервере в общем доступе лежит популярная у пользователей книга (телефонный справочник).
Чтобы она не оставалась доступной для редактирования только одному, открывшему её первым, сделал таймер для автозакрытия книги:

______________________________________
Public Sub Auto_Open()
a = Time
b = 0.00347 'Выдержка пять минут
iTime = a + b
Application.OnTime EarliestTime:=iTime, Procedure:="Workbook_Close"
End Sub
__________________________________
...........
__________________________________
Private Sub Workbook_Close()
Application.DisplayAlerts = False
Application.EnableEvents = False 'Запрещает обработку события "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
ThisWorkbook.Close

End Sub
_________________________________

Когда книга находится на локальной машине - все работает на отлично.
Но когда оана в папке общего доступа на сервере - закрывается и открывается раз по 10-15.
Доходит счетчик до уставки, книга начинает закрываться, потом появляется окно сообщения "Открытие книги... бла-бла-бла" книга открывается и опять начинает закрываться. И процесс повторяется неоднократно.

Что я не так сделал?
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Вообще-то, для того, чтобы одну книгу могли редактировать несколько человек одновременно, её достаточно сделать общей. В XL97-2003 это можно сделать следующим образом, в меню Сервис выбрать команду Доступ к книге, в появившемся стандартном диалогом окне Управление доступом к файлу выделить закладку Правка и установить "флажок" напротив Разрешить совместный доступ, после чего подтвердить свои намерения.

Что касается таймера, то можно попробовать использовать что-то вроде :

модуль ThisWorkbook(ЭтаКнига)

Код: Выделить всё

Private iTime As Date

Private Sub Workbook_Open()
    iTime = DateAdd("n", 5, Now)
    Application.OnTime EarliestTime:=iTime, Procedure:=Me.CodeName & ".Workbook_Close"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnTime EarliestTime:=iTime, Procedure:=Me.CodeName & ".Workbook_Close", Schedule:=False
End Sub

Private Sub Workbook_Close()
    'Application.DisplayAlerts = False
    Application.EnableEvents = False 'Запрещает обработку всех событий, в т.ч. и BeforeClose()
    Me.Close saveChanges:=True
    Application.EnableEvents = True
End Sub
Stiv_k
Сообщения: 3
Зарегистрирован: 16 янв 2013, 17:02

Спасибо огромное!
Все работает.
Один раз, правда, переоткрывается, но по крайней мере не зацикливается.

А общий доступ к книге я открывал. Но при закрытии такой книги задается вопрос о том, чью версию сохранить. Это вообще пользователей в тупик ставит.
Уж лучше так.
Ответить