Иногда при выполнении вполне рабочего кода может возникнуть ошибка "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

а после выполнения(перед End Sub или в любом месте, где может произойти выход из процедуры) её вернуть:

Application.EnableCancelKey = xlInterrupt

чем не нравится данный метод мне лично: свойство EnableCancelKey отвечает за возможность обработки нажатия клавиш при выполнении кода. Значение xlDisabled переводит VBA в режим "глухой обороны" - т.е. он не будет реагировать ни на какие нажатия пока не завершится выполнение кода. Догадались, чем это чревато? Правильно: если вдруг попали в бесконечный цикл или захотели прервать выполнение - ничего не получится, т.к. сочетание Ctrl+Break будет просто проигнорировано.


Способ 2 - пожизненный(почти)
После появления ошибки нажмите Debug, затем Ctrl+Break, затем кнопку Play на панели редактора VBE (зеленый треугольничек воспроизведения кода) - продолжится выполнение кода. После этого ошибка должна исчезнуть.
Главное жать не F5 для продолжения выполнения, а именно треугольник на панели. Иначе может не сработать.


Если знаете еще способы устранения ошибки - делитесь в комментариях - это обязательно поможет кому-то спасти нервы и силы и в карму вам плюсанется :)

9 комментариев

    1. Евгений, Вы бы статью прочитали для начала, прежде чем комментарий оставлять :) Этот баг проявляется редко и ни о каком режиме отладки речи не идет. Рассматривается ситуация, когда код просто запущен стандартным методом или через кнопку и появляется данная ошибка.

      1. Ситуация действительно похожа на какой-то глюк отладчика VBA. Запускаем макрос по F5, нажимаем Ctrl+Pause, Debug, перезапускаем по F5 или кнопке Play - получаем ошибку с остановкой в произвольных местах. Никакое количество последовательностей "Debug, Ctrl+Pause, F5" не помогает, но при замене F5 на Play срабатывает. Перезапуск Excel не помогает, перезагрузка Win помогает (если правильно помню).

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.