Страницы: 1
RSS
Не отключается таймер по времени в макросе
 
Вечер добрый всем !

Кое как на примерах наваял конструкцию с таймером на сохранение файла с MsgBox "Продолжить автосохранение ?" Да - продолжаем Нет - автосохранение прекращается до следующего запуска файла
Но по кнопке MsgBox Нет выполнение автосохранения продолжается - почему и как можно сделать так чтоб процедура по таймеру прекратилась до след запуска ?

В  модуле
Код
Public Flag As Boolean
Sub АвтосохранениеКнига()
Flag = True
'If Flag = True Then
'If Flag Then
If Flag Then
Application.OnTime Now + TimeValue("00:01:00"), "АвтосохранениеКнига" ' Автосохранение через заданный период времени
If MsgBox("Продолжить дальнейшие автосохранения файла?", vbYesNo + 32, "Предупреждение!") = vbNo Then
    'Здесь действия при отрицательном ответе
    Flag = False
    Exit Sub
    'Здесь действия при положительном ответе
    Flag = True
End If
End If
Call Автосохранение_Архив_осн
End Sub

Код
Public Flag As Boolean
Private Sub Workbook_Open() 
Flag = True
Call АвтосохранениеКнига 'сохраняем книгу по таймеру в каждые 15 мин 
End Sub

В чем может быть дело - как этот таймер до перезапуска остановить ? Вроде Flag = False и      Exit Sub есть но таймер все равно работает   Далее если в начале кода модуля поставить If Flag Then просто или If Flag = True Then - вообще ничего не запускается - почему? тогда получается на открытие книги Flag = True не работает ? вобщем запутался я в этих флагах ...

Изменено: oleg355 - 03.06.2018 22:38:33
 
Обратите внимание, что до строки 12 (Здесь действия при положительном ответе)  дело никогда не дойдёт. При любом варианте ответа.
 
местами поменять так
Код
If MsgBox("Продолжить дальнейшие автосохранения файла?", vbYesNo + 32, "Предупреждение!") = vbYes Then
 'Здесь действия при положительном ответе
    Flag = True
Else
    'Здесь действия при отрицательном ответе
    Flag = False
    Exit Sub
End If
 
 
а кажется понял ошибку - спасибо Юрий что указали на нужное место
 
нет не помогло - все равно не отключается таймер  (ошибка была  else забыл)   Почему при если в начале кода модуля поставить If Flag Then просто или If Flag =  True Then - вообще ничего не запускается - почему? Сейчас тоже не запускается   а если и запускается(если принудительно Flag=True в модуль втолкнуть в начале)  то не останавливается.    тогда получается на  открытие книги Flag = True не работает ?

В книгу
Код
Public Flag As Boolean
Private Sub Workbook_Open() 
Flag = True
Call АвтосохранениеКнига 'сохраняем книгу по таймеру в каждые 15 мин 
End Sub
В модуль
Код
Public Flag As Boolean
Sub АвтосохранениеКнига()
'Flag = True
'If Flag = True Then
'If Flag Then
If Flag Then
Application.OnTime Now + TimeValue("00:01:00"), "АвтосохранениеКнига" ' Автосохранение через заданный период времени
If MsgBox("Продолжить дальнейшие автосохранения файла?", vbYesNo + 32, "Предупреждение!") = vbYes Then
'Здесь действия при положительном ответе
    Flag = True
Else
    'Здесь действия при отрицательном ответе
    Flag = False
    Exit Sub
End If
End If
Call Автосохранение_Архив_осн
End Sub
Изменено: oleg355 - 03.06.2018 23:15:03
 
Для начала уберите объявление глобальной переменной в модуле книги.
 
и сейчас при открытии книги ругается Compile error:Ambiguous name detected: Flag
 
У меня не ругается.
 
вот пример - внутри файл с папками куда сохраняется
Изменено: oleg355 - 04.06.2018 00:15:13
 
Вот пример, где отключается и не ругается.
Зачем мне Ваши папки?
 
Без ошибок
 
Понял где ошибка (при открытии книги ругается Compile error:Ambiguous name detected: Flag) была зарыта и почему
Код
Private Sub Workbook_Open() 
Flag = True

ругалась на Flag  (а в тестовых примерах все нормально работает)

1)у меня в рабочей книге
Код
Public Flag As Boolean

была обьявлена в нескольких  модулях, тк там тоже Flag используется
Получается Модуль1 Public Flag As Boolean - обьявлен Flag
                 Модуль2 Public Flag As Boolean - обьявлен Flag
                 Модуль3 Public Flag As Boolean - обьявлен Flag

2)Убрал текст Public Flag As Boolean  из 2 и 3 модуля, оставил только в 1 - все заработало, книга открывается нормально и сохранение работает

3)Те если Flag работает в нескольких Модулях (макросах)  то его  обьявлять Public Flag As Boolean только в 1(одном) модуле - остальные его подхватят ?
Изменено: oleg355 - 04.06.2018 16:26:51
 
Я же ещё в #6 предлагал Вам удалить объявление переменной в модуле книги.
Да, достаточно в одном стандартном модуле - область действия такой переменной распространяется на весь проект.
 
Благодарю Юрий за помощь ! сейчас понятно хоть стало ..
 
Советую почитать эту статью.
Страницы: 1
Наверх