Code execution has been interrupted - що за баг, Excel для всіх

Іноді при виконанні цілком робочого коду може виникнути помилка "Code execution has been interrupted ":

execution
найчастіше вона з'являється в циклах (це Do. Loop, For each, For. Next ). Але може виявитися і на окремих ділянках коду незалежно від того, що робить той чи інший шматок коду. Сама по собі помилка не така - при натисканніContinue код продовжує працювати і може навіть дійти до кінця вже без помилок. Але що примітно - з'явившись у якомусь коді одного разу, ця помилка починає переслідувати вас і при цьому відтворюється лише на тому ПК, на якому з'явилася. На інших же ПК код може працювати добре і без будь-яких казусів.

Чому взагалі виникає ця помилка? Точну відповідь на це питання я, на жаль, не дам. Тільки припущення: VBA теж зберігає всілякі логи під час роботи та звертається до різних бібліотек. І швидше за все в якийсь момент цього мотлоху набирається так багато, що VBE починає "підглинати" таким ось нестандартним чином, припускаючи, що ми намагаємося виконати паралельно два коди.

І головне: як помилку Code execution has been interrupted усунути? Я знаю два способи. Спосіб 1 - разовий Перед виконанням коду поставити рядок:

а після виконання (перед End Sub або в будь-якому місці, де може статися вихід із процедури) її повернути:

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

Стаття допомогла? Поділися посиланням із друзями!