Страницы: 1
RSS
Закрытие документа с сохранением
 
Здравствуйте.
Необходима возможность закрыть документ Excel (любой) с сохранением двумя способами:
   - по нажатию на кнопку;
   - по истечении определенного времени (скорее всего, будет 5 мин.) при отсутствии действий на протяжении этого периода.
    Поиском готового ответа не нашел, буду благодарен за помощь.
 
Дык, речь, видимо о макросах? Тогда в справку по ontime. Ежли че непонятно - спрашивайте.
Я сам - дурнее всякого примера! ...
 
Да, наверное, макросы, а что такое по справка ontime ?
 
Ребят, Тс незаслуженно забыт ИМХО. Мне недосуг, неужто желающих дефицит?
Я сам - дурнее всякого примера! ...
 
Вот пример, разбирайтесь. Если за 30 сек не успеете - файл закроется.
 
KuklP, Михаил С., спасибо за помощь. Все работает как надо.
 
Кажется, я поторопился сказать, что все в порядке. Что-то с файлом не так... Пытаюсь разобраться..
 
Там на скорую руку сделано, просто что б принцип показать.
А глубоко я сам не разбирался с этим; мне как-то не надо было, до сих пор....
 
Михаил, проблема в том, что файл, если в него вносились изменения, после закрытия по срабатыванию макроса, через несколько секунд снова открывается и закрывается уже без моего участия. Как я понял, это как-то связано с присваиванием дополнительному аргументу Schedule значение False. Я это сделал методом тыка, конечно, но ничего не изменилось. Михаил, если Вы знаете решение навскидку - сообщите, пожалуйста. Если нет, могу ли я использовать файл из Вашего примера для создания новой темы?
 
Попробуйте так:
Код
Option Explicit
Dim NowDateVale As Double

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnTime NowDateVale, "my_Procedure", , False
End Sub

Private Sub Workbook_Open()
    NowDateVale = Now + TimeValue("0:00:30")
    Application.OnTime NowDateVale, "my_Procedure"
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    On Error Resume Next
    NowDateVale = Now + TimeValue("0:00:30")
    Application.OnTime NowDateVale, "my_Procedure"
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Здравствуйте, The_Prist. Спасибо за вариант.
Срабатывает с Вашим кодом гораздо быстрее. Если в файл не вносились изменения - он закрывается как надо. Если действия были - после закрытия еще раз откр./закр. Происходит это быстро, можно бы и потерпеть, но на файле, для которого нужен код будет стоять пароль, и поэтому будет вылезать и висеть окно его ввода. Также при наличии изменений время закрытия продолжает отсчитываться от момента открытия файла, а не от момента последнего действия.
 
Проблема или абсолютно никому не интересна, или нерешаемая.
 
Наверное, надо попробовать так:
Код
Option Explicit

Dim NowDateVale As Double

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnTime NowDateVale, "my_Procedure", , False
End Sub

Private Sub Workbook_Open()
    NowDateVale = Now + TimeValue("0:00:30")
    Application.OnTime NowDateVale, "my_Procedure"
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    On Error Resume Next
    Application.OnTime NowDateVale, "my_Procedure", , False
    NowDateVale = Now + TimeValue("0:00:30")
    Application.OnTime NowDateVale, "my_Procedure"
End Sub


Т.к. после открытия сразу же назначается время запуска. Если произошли изменения на листе - то добавляется еще одно время запуска и они живут раздельно друг от друга. Следователь, если отменить запуск(Shedule:=False), то он будет отменен только для последней назначенной даты/времени. А все, которые были до этого будут действовать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Здравствуйте, The_Prist. Спасибо, что не бросаете.
Ваш последний код решает одну из двух замеченных мной проблем, а именно, перестает повторно открываться и закрываться файл. Но время запуска по событию "изменение на листе" вообще не работает. (Проверял, меняя в различных сочетаниях длительности периодов). Умом понимаю, что при появлении изменений должно отменяться время запуска по открытию и назначаться по изменению, а как сделать не знаю.
 
Последний код The_Prist'а работает правильно.  Пост №14 - результат моей невнимательности.  Приношу извинения автору и всем читавшим тему.
Страницы: 1
Наверх