MyTetra Share
Делитесь знаниями!
Code execution has been interrupted - что за баг?
16.03.2019
23:43
Текстовые метки: Обработка ошибок, On Error Goto, VBA, error, ошибки
Раздел: !Закладки - VBA - VBA управление кодами - Ошибки-глюки

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


1

Application.EnableCancelKey = xlDisabled

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

Application.EnableCancelKey = xlEnabled


1

Application.EnableCancelKey = xlEnabled

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


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



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

 
MyTetra Share v.0.52
Яндекс индекс цитирования