Страницы: 1
RSS
Отмена выполнения макроса, Cancel macro while it running
 
Приветствую!
Возникла необходимость правильно обработать нажатие Esc (сработает при DoEvents) во время работы макроса, а именно:
    1. Как обнаружить нажатие и/или появление диалогового окна отладки как на скрине
    2. Как не дать этому окну появиться или скрыть его
    3. Как продолжить работу макроса после "отмены", как, если бы пользователь нажал Continue в окне отладки (чтобы дать макросу отменить совершённые действия, включить отключённой и так далее, неважно что)

Чтобы окно появилось, нужно во время работы макроса (несколько секунд) нажать Esc
Скрин
UPD. Решение (файл и код):
Опытным путём было установлено, что в самой функции перехватить дебаговое окно нельзя (или я что-то не так делал), зато можно перехватить в основной процедуре и правильно его обработать

sokol92, ещё раз большое спасибо!  :idea:
Изменено: Jack Famous - 24.03.2022 14:51:56
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
2. Application.EnableCancelKey

В частности, при значении xlErrorHandler при нажатии пользователем Ctrl+Break возникнет ошибочная ситуация с кодом ошибки 18, которую можно обработать в макросе по On Error.
Изменено: sokol92 - 24.03.2022 14:48:24
Владимир
 
sokol92, спасибо! Смотрю…
Цитата
UPD:
sokol92: при значении xlErrorHandler при нажатии пользователем ESC возникнет ошибочная ситуация с кодом ошибки 18, которую можно обработать в макросе по On Error
то, что нужно! Пробую…
Изменено: Jack Famous - 24.03.2022 14:35:55
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Для остановки работы макроса нужно нажимать Ctrl+Break (поправил).
Код
Sub Mymacro()
 Application.EnableCancelKey = xlErrorHandler
 On Error GoTo ErrLabel
 ' бесконечный цикл
 While True
   Range("A1") = Now
   Application.Wait Now + TimeValue("0:00:01")
   DoEvents
 Wend
 
ErrLabel:
 If Err.Number = 18 Then
   If MsgBox("Вы действительно хотите прервать работу макроса MyMacro", vbYesNo + vbQuestion) = vbYes Then
     Exit Sub
   Else
     Resume Next
   End If
 Else
   MsgBox "Ошибка при выполнении макроса MyMacro:" & Err.Description, vbCritical
 End If
End Sub
Изменено: sokol92 - 24.03.2022 14:53:23
Владимир
 
Цитата
sokol92: Ctrl+Break
при DoEvents (нужно для корректного отображения прогресса в статус-баре) достаточно Esc
Обновил шапку темы
Изменено: Jack Famous - 24.03.2022 14:53:44
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
sokol92 написал:
Для остановки работы макроса нужно нажимать Ctrl+Break (поправил).
А меня давно интересует вопрос, как быть, если в клаве ноута клавиша "Break" отсутствует в принципе?
"Ctrl", правда, есть.  :)
 
Это к медвежатникам.  :)
Владимир
 
RAN, в отдельной теме лучше обсудить - к моей отношения не имеет  :)
Я думаю, что хватит программы для переназначения на уровне винды и/или SendKeys
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, пытался....
Тишина была в ответ.
И вот, снова отправили в пешее эротическое путешествие.  :(
Изменено: RAN - 24.03.2022 18:09:39
 
RAN, оставь тут ссылку, друже-котяра  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Не найду
 
Цитата
RAN написал:
если в клаве ноута клавиша "Break" отсутствует в принципе?
тогда надо взять инструкцию и посомтреть нет ли сочетания с FN. что обычно делается.  Часто она совмещается с PAUSE но при нажатой FN .
По вопросам из тем форума, личку не читаю.
 
Jack Famous,
не пишите в своем коде херни, не тужно будет думать как остановить ее выполнение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко: не пишите в своем коде херни, не тужно будет думать как остановить ее выполнение
о, экспертное мнение подъехало  8)  
Вы, бабуля, опять на бутылку сели, судя по всему?  :D

UPD: Интуиция не подвела))
Изменено: Jack Famous - 25.03.2022 09:04:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх