Подтвердить что ты не робот

Остановка выполнения Excel Macro при нажатии Esc не будет работать

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

Шаг # 01. Если ваша клавиатура не имеет определенного ключа, не волнуйтесь и откройте "OnScreen Keyboard" из Windows Utilities, нажав Win + U.

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

    If MsgBox("Debug message", vbOKCancel, "Debugging") = vbCancel Then Exit Sub

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

Мое небольшое ретроспективное предложение состоит в том, чтобы вставить Stop после каждого Msgbox, который вы используете при отладке. Если вы пишете для Msgbox, который возвращает ответ (например, VbOk, VbCancel), также добавляйте инструкцию Stop к каждому. Выдвиньте утверждения остановки, когда все будет идеально.

Ответ 10

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