Остановка выполнения Excel Macro при нажатии Esc не будет работать - PullRequest
33 голосов
/ 21 июля 2011

Я запускаю Excel 2007 на XP.

Есть ли способ остановить запуск макроса во время его выполнения, кроме нажатия escape? Обычно, если я думаю, что создал бесконечный цикл или иным образом что-то испортил, я нажимаю escape, и он выдает ошибку, но макрос останавливается.

На этот раз (и я делал это раньше, но не так уж плохо), я установил msgbox для некоторой быстрой отладки. Оказывается, он должен был зацикливаться около 6000 раз, что означало, что я должен был «ОК» 6000 окон сообщений, что заняло несколько минут. Я не сохранил перед запуском (еще одна ошибка), поэтому я не смог открыть диспетчер задач для выхода.

Есть ли другой способ остановить выполнение макроса в случае, если я снова так не справлюсь?

Ответы [ 9 ]

51 голосов
/ 21 июля 2011

Используйте CRTL + BREAK , чтобы приостановить выполнение в любой точке. Вы перейдете в режим прерывания и можете нажать F5 для продолжения выполнения или F8 для пошагового выполнения кода в визуальном отладчике.

Конечно, это работает только тогда, когда окно сообщений не открыто, поэтому, если ваш код VBA постоянно открывает окна сообщений, по какой-то причине будет немного сложно нажимать клавиши в нужный момент.

Вы даже можете редактировать большую часть кода во время его работы.

Используйте Debug.Print для распечатки сообщений в Immediate Window в редакторе VBA, это намного удобнее, чем MsgBox.

Используйте точки останова или ключевое слово Stop, чтобы автоматически остановить выполнение в интересных областях.

Вы можете использовать от Debug.Assert до условно остановить выполнение .

15 голосов
/ 25 декабря 2015

CTRL + SCR LK (Scroll Lock) работал для меня.

6 голосов
/ 22 сентября 2017

Иногда правильный набор клавиш ( Пауза , Перерыв или ScrLk) недоступен на клавиатуре (в основном это происходит с пользователями ноутбуков) и нажатие Esc 2, 3 или несколько раз не останавливает макрос тоже.

Я тоже застрял и в конце концов нашел решение в функции доступности Windows, после чего я попробовал все исследуемые варианты, и 3 из них работали для меня в 3 различных сценариях.

Шаг # 01 : Если на вашей клавиатуре нет определенной клавиши, не беспокойтесь и откройте «Клавиатуру на экране» из Windows Utilities, нажав Win + U .

Шаг # 02 : Теперь попробуйте любой из приведенных ниже вариантов, и они определенно будут работать в зависимости от архитектуры вашей системы, то есть ОС и версии Office

  • Ctrl + Пауза
  • Ctrl + ScrLk
  • Esc + Esc (нажмите дважды последовательно)

Вы будете переведены в режим прерывания с использованием вышеуказанных комбинаций клавиш, поскольку макрос приостанавливает выполнение, немедленно завершая текущую задачу. Например, если он извлекает данные из Интернета, то он немедленно останавливается перед выполнением любой следующей команды, но после извлечения данных, после чего можно нажать F5 или F8 , чтобы продолжить отладку.

4 голосов
/ 24 января 2016

Вы можете остановить макрос, нажав ctrl + break , но если у вас нет клавиши прерывания , вы можете использовать эту autohotkey (с открытым исходным кодом) код:

+ ESC :: SendInput {} CtrlBreak вернуться

Нажатие shift + Escape будет похоже на нажатие ctrl + break и, таким образом, остановит ваш макрос.

Вся слава этой странице

2 голосов
/ 10 сентября 2017

Мне также нравится использовать MsgBox для отладки, и я неоднократно сталкивался с этой проблемой. Теперь я всегда добавляю кнопку «Отмена» во всплывающее окно и выхожу из макроса, если нажать «Отмена». Пример кода:

    If MsgBox("Debug message", vbOKCancel, "Debugging") = vbCancel Then Exit Sub
1 голос
/ 09 ноября 2013

Я обнаружил, что иногда, когда я открываю второе окно Excel и запускаю макрос для этого второго окна, выполнение первого останавливается. Я не знаю, почему это не работает постоянно, но вы можете попробовать.

1 голос
/ 15 апреля 2013

Вы также можете попробовать нажать «FN» или функциональную клавишу с помощью кнопки «Break» или с помощью кнопки «sys rq» - системный запрос как этот - необходимо нажать вместе, и это остановит любой работающий макрос

0 голосов
/ 14 июня 2019

ESC и CTRL-BREAK у меня не работают только сейчас.Но CTRL-ESC сработал !?Не знаю почему, но я думал, что выкину это там, если это поможет кому-то другому.(Я забыл i = i + 1 в моем цикле ...)

0 голосов
/ 18 апреля 2017

Я забыл закомментировать строку с MsgBox перед выполнением моего макроса. Это значит, что мне придется нажимать ОК более ста тысяч раз. Ключ ESC просто экранировал окно сообщения, но не остановил выполнение макроса. Постоянное нажатие клавиши ESC в течение нескольких секунд помогло мне остановить выполнение кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...