Хитрости »
12 Апрель 2016
Дмитрий 22862 просмотров
Code execution has been interrupted - что за баг?
Иногда при выполнении вполне рабочего кода может возникнуть ошибка "Code execution has been interrupted":

чаще всего она появляется в циклах (это Do ... Loop, For each, For ... Next). Но может проявится и на отдельных участках кода совершенно независимо от того, что делает тот или иной кусок кода. Сама по себе ошибка не является таковой - при нажатии Continue код продолжает работать и может даже дойти до конца уже без ошибок. Но что примечательно - появившись в каком-то коде однажды, эта ошибка начинает преследовать вас и при этом воспроизводится только на том ПК, на котором появилась. На других же ПК код может работать отлично и без всяких казусов.
Почему вообще появляется эта ошибка? Точный ответ на этот вопрос я, к сожалению, не дам. Только предположения: VBA тоже хранит всевозможные логи при работе и обращается к разным библиотекам. И скорее всего в какой-то момент этого хлама набирается так много, что VBE начинает "подглючивать" таким вот нестандартным образом, предполагая, что мы пытаемся выполнить параллельно два кода.
И главное: как ошибку Code execution has been interrupted устранить?
Я знаю два способа.
Способ 1 - разовый
Перед выполнением кода поставить строку:
Application.EnableCancelKey = xlDisabled |
Application.EnableCancelKey = xlDisabled
а после выполнения(перед End Sub или в любом месте, где может произойти выход из процедуры) её вернуть:
Application.EnableCancelKey = xlInterrupt |
Application.EnableCancelKey = xlInterrupt
чем не нравится данный метод мне лично: свойство EnableCancelKey отвечает за возможность обработки нажатия клавиш при выполнении кода. Значение xlDisabled переводит VBA в режим "глухой обороны" - т.е. он не будет реагировать ни на какие нажатия пока не завершится выполнение кода. Догадались, чем это чревато? Правильно: если вдруг попали в бесконечный цикл или захотели прервать выполнение - ничего не получится, т.к. сочетание Ctrl+Break будет просто проигнорировано.
Способ 2 - пожизненный(почти)
После появления ошибки нажмите
Debug, затем
Ctrl+
Break, затем кнопку
Play на панели редактора VBE (зеленый треугольничек воспроизведения кода) - продолжится выполнение кода. После этого ошибка должна исчезнуть.
Главное жать не
F5 для продолжения выполнения, а именно треугольник на панели. Иначе может не сработать.
Если знаете еще способы устранения ошибки - делитесь в комментариях - это обязательно поможет кому-то спасти нервы и силы и в карму вам плюсанется :)
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Спасибо огромное!
Спасибо. Второй способ помог. Не представляю как можно было досооброжать до такого неочевидного решения)
Это режим отладки включенный.
Попробуйте прожать еще раз Ctrl+Break
Евгений, Вы бы статью прочитали для начала, прежде чем комментарий оставлять :) Этот баг проявляется редко и ни о каком режиме отладки речи не идет. Рассматривается ситуация, когда код просто запущен стандартным методом или через кнопку и появляется данная ошибка.
Ситуация действительно похожа на какой-то глюк отладчика VBA. Запускаем макрос по F5, нажимаем Ctrl+Pause, Debug, перезапускаем по F5 или кнопке Play - получаем ошибку с остановкой в произвольных местах. Никакое количество последовательностей "Debug, Ctrl+Pause, F5" не помогает, но при замене F5 на Play срабатывает. Перезапуск Excel не помогает, перезагрузка Win помогает (если правильно помню).
Выручили!
Спасибо! Способ №2 помог!
Блеск!!! Очень помогло и спасло много сил и времени!!!
Супер! Большое Вам спасибо!!!
PS: способ №2
Спасибо! Способ №2 рабочий!