Додаток Excel VBA мимовільно зупиняється повідомленням "Виконання коду припинено"


151

З того, що я бачу в Інтернеті, це досить поширена скарга, але відповіді здаються більш рідкими. Проблема полягає в наступному:

У нас є ряд додатків Excel VBA, які відмінно працюють на машинах багатьох користувачів. Однак на одній машині вони зупиняються на певних рядках коду. Це завжди однакові лінії, але, здається, ці лінії не мають нічого спільного між собою.

Якщо після зупинки натиснути F5 (запустити), додаток продовжується, тож це майже як додано точку перерви. Ми спробували вибрати з меню «видалити всі перерви» і навіть додати перерву та видалити її знову.

Раніше у нас була ця проблема з окремими програмами, і ми її "обробляли", вирізавши код з модулів, склавши та потім вставляючи їх назад і т.д.

Зараз проблема, мабуть, стосується самого Excel, а не одного .xls, тому ми трохи не впевнені, як цим керувати.

Будь-яка допомога буде вдячна :)

Дякую,

Філіп Віттінгтон


2
Чи натискає користувач натискання клавіші в середині будь-якої обробки? Або будь-який інший додаток, який надсилає ключ відключення?
shahkalpesh

1
Вибравши Видалити всі точки точки розриву , ви також перекомпілювали та зберегли проект VBA? Я бачив пов’язану проблему в Word VBA, коли раніше зняті точки пробою все ще викликають перерву.
Дірк Волмар

Нічого не обробляється під час страти, шахкалпеш. Диво - спасибі, я, можливо, не спробував їх саме в такому порядку. Зробимо це зараз ...
Філ Віттінгтон,

На додаток до коментаря divo, може бути корисним прокоментувати відповідні рядки та будь-які рядки, які зупиняли б налагодження, вони можуть бути коментовані, а код перекомпільований (знову).
Fionnuala

І я забув згадати: Щоб реально викликати перебудову, зазвичай потрібно змінити рядок, а потім перемістити курсор у наступний рядок, щоб позначити вихідний код як змінений (наприклад, внести зміни, перемістити курсор вниз, перемістити курсор вгору та скасувати зміну вручну)
Дірк Волмар

Відповіді:


404

Я знайшов друге рішення.

  1. Натисніть кнопку "Налагодити" у спливаючому вікні.
  2. Натисніть Ctrl+ Pause|Breakдвічі.
  3. Натисніть кнопку відтворення, щоб продовжити.
  4. Збережіть файл після завершення.

Сподіваюся, що це комусь допоможе.


12
+1: Вау, ця публікація врятувала мене від світу болю. Дуже несподіване рішення химерної проблеми. Після натискання [Ctrl + Перерва] двічі та продовження, я зберег файл. Після цього проблема більше не з’явилася, коли я закрив і знову відкрив файл.
dbenham

28
Якщо коли-небудь відповідь заслуговувала голосування, це все. Чудова відповідь.
The_Barman

4
Це мені дуже допомогло. Ця відповідь заслуговувала 1000 оновлень. Мене мучила ця проблема останні 4-5 днів. Це спрацювало чудово.
demouser123

25
Хтось знає, чому це працює? Або звідки воно походить? Це магія?
ZX9

4
Досі допомагаю мені у 2017 році. Дякую!
Плити

16

Ця проблема випливає з дивної примхи в Office / Windows.

Після розробки одного і того ж фрагмента коду VBA і запуску його сотні разів (буквально) за останні кілька днів я зіткнувся саме з цією проблемою. Єдине, що було іншим - це якраз перед тим, як відчути цю неприємну проблему, я випадково закінчив виконання коду VBA неортодоксальним методом.

Я очистив усі тимчасові файли, перезавантажив і т.д. ... Коли я знову запустив код після всього цього, у мене все-таки з’явилася проблема - до того, як я вступив у перший цикл. Має сенс "натиснути кнопку" Налагодити "у спливаючому вікні, потім двічі натиснути [Ctrl + Перерва] і після цього можна продовжуватись без зупинок", тому що щось у поєднанні Office / Windows не відпустило виконання. Він застряг.

Надмірна дія Ctrl + Break, ймовірно, вирішує затримку виконання.


14

Одне рішення є тут :

Рішення цієї проблеми полягає в тому, щоб додати в перший рядок макросу рядок коду “Application.EnableCancelKey = xlDisabled”. Це виправить проблему, і ви зможете успішно виконати макрос, не отримуючи повідомлення про помилку “Код страта була перервана ».

Але після того, як я вставив цей рядок коду, я більше не міг використовувати Ctrl + Break. Так це працює, але не дуже.


Дякую, Стен - це, безумовно, рішення, якщо ти знаходишся під тиском часу і просто хочеш, щоб він працював! Дуже корисний.
Філ Віттінгтон

1
Ви можете знову ввімкнути його в тому ж виконанні, встановивши його xlInterrupt. (Він також автоматично відновлюється після завершення виконання коду.) Ваша інша відповідь спрацювала для мене, але в гіршому випадку це могло бути використане як тимчасове виправлення. Більше інформації про Application.EnableCancelKey
Kodithic

2
Правильна відповідь - і єдина правильна відповідь - вище. Вставлення будь-якого рядка коду, включаючи "Application.EnableCancelKey = xlDisabled", просто переносить проблему на інший рядок. Часто новою 'точкою розриву' є саме та лінія, яку ви вставили. Єдиною причиною, коли я не заперечую вашої відповіді, є те, що я останнім десятиліттям неодноразово вдався до її використання.
Найджел Геффернан

6

Я знайшов натискання клавіші ctrl + break, поки макрос не працював.


3

Я б спробував звичайні виправні речі: - Запустіть CBA Cleaner Roba Bovey у вашому коді VBA - видаліть усі надбудови на ПК користувачів, зокрема надбудови COM та .NET - Видаліть усі користувачі .EXD файли (несумісність оновлення MSoft) - Запустіть Excel Виявлення та ремонт у системі користувачів - перевірте розмір файлу .xlb користувача (має бути 20-30 К) - перезавантажте, а потім видаліть усі файли Temp для користувачів


2

Дякуємо всім за їх внесок. Цю проблему вдалося вирішити, вибравши РЕМОНТ на панелі керування. Я думаю, що це явно перереєструє деякі вроджені COM-компоненти компонентів Office і робить те, що REINSTALL не робить. Я думаю, що останній просто проходить контрольний список і іноді приймає те, що там, якщо воно вже встановлено, можливо. Потім у мене виникла окрема проблема з реєстрацією власного .NET dll для COM-інтеропу на машині користувача (незважаючи на це, що він працює і на інших машинах), хоча я думаю, що це була моя помилка, а не Microsoft. Ще раз дякую, я дуже ціную це.


2

Я не раз стикався з цим питанням під час розробки одного складного додатка Excel VBA. Іноді Excel починає ламати об'єкт VBA досить випадковим чином. І єдиним засобом було перезавантаження машини. Після перезавантаження Excel зазвичай почав діяти нормально.

Незабаром я з'ясував, що можливим рішенням цієї проблеми є натиснути CTRL + Перерва один раз, коли макрос НЕ працює. Можливо, це може допомогти і вам.


2

У мене була ця проблема також із використанням excel 2007 з робочою книжкою foobar.xlsm (макрос ввімкнено), яка отримала б "Виконання коду було перервано", просто намагаючись закрити робочу книгу на червоному X у правому куті, без макросів, що працюють на всі, або будь-яка форма "ініціалізації", робоча книжка або макроси робочого листа. Опції, які я отримав, були "Кінець" або "Продовжити", налагодження завжди було сірим. Як і в попередньому плакаті, я запропонував панель керування-> Програми та функції-> клацніть правою кнопкою миші «Microsoft Office Proffesional 2007» (у моєму випадку) -> зміни-> ремонт.

Це вирішило проблему для мене. Я можу додати, що це сталося незабаром після оновлення MS, і я також знайшов надбудову в Excel під назвою "Team Foundation" від Microsoft, яку я, звичайно, не встановив добровільно


1

Я хотів би додати більше деталей до відповіді Стен №2 з наступних причин:

  • Я зіткнувся з цим питанням не один десяток разів і, залежно від умов проекту, я обрав один із магічних відповідей вуду Стану №1 або №2. Коли я знову стикався з цим, я ставав більш допитливим, що чому це відбувається в першу чергу.

  • Я хотів би додати відповідь і для користувачів Mac.

  • Існують обмеження щодо обох можливих відповідей:

    • якщо код захищений (і ви не знаєте пароль), відповідь №1 не допоможе.
    • якщо код незахищений, відповідь №2 не дозволить вам налагоджувати код.

  1. Це може статися через будь-яку з наведених нижче причин:

    • Операційна система не виділяє системні ресурси на процес Excel. ( Рішення. Потрібно лише запустити операційну систему - рівень успішності дуже низький, але він, як відомо, працює багато разів)

    • P-код - це проміжний код, який використовувався у Visual Basic (раніше .NET), а отже, він все ще використовується у VBA. Це дало можливість більш компактного виконання за рахунок більш повільного виконання. Чому я кажу про p-код? Оскільки він іноді пошкоджується між кількома виконаннями та великими файлами або просто через встановлення програмного забезпечення (Excel) кудись пошкоджується. Коли p-код пошкоджується. виконання коду постійно переривається. Рішення: У цих випадках передбачається, що ваш код почав псуватися, і в майбутньому є ймовірність, що ваша робоча книга Excel також пошкодиться, передаючи вам повідомлення типу "файл Excel пошкоджений і його неможливо відкрити". Отже, як швидке рішення, ви можете розраховувати на відповідь №1 або відповідь №2 відповідно до своїх вимог. Однак ніколи не ігноруйте ознаки корупції. Краще скопіювати кодові модулі в блокнот, видалити модулі, зберегти та закрити робочу книжку, закрити програму Excel. Тепер знову відкрийте робочу книгу і починайте створювати нові модулі з кодом, скопійованим раніше в блокнот.

  2. Користувачі Mac, спробуйте будь-який із наведених нижче варіантів, і з них, безумовно, буде працювати залежно від вашої архітектури системи, тобто версії ОС та Office

    • Ctrl + Pause
    • Ctrl + ScrLk
    • Esc+ Esc(Натисніть двічі поспіль)

Ви будете переведені в режим перерви, використовуючи наведені вище комбінації клавіш, оскільки макрос призупиняє виконання негайно, закінчуючи поточне завдання. Це заміна кроку 2.

  1. Рішення: Щоб подолати обмеження використання відповіді №1 та відповіді №2 , я використовую xlErrorHandlerразом із Resumeтвердженням в Посібнику помилок, якщо код помилки 18. Тоді переривання надсилається до запущеної процедури як помилка, відстежується помилкою обробник, створений за допомогою оператора On Error GoTo. Код помилки, який можна відстежувати, - 18. Поточна процедура перервана, і користувач може налагодити чи закінчити процедуру. Microsoft обережно не використовує це, якщо ваш обробник помилок відновив заяву, інакше ваш обробник помилок завжди повертається до тієї самої заяви. Саме цього ми хочемо у небажаних безглуздих перервах виконання коду.


0

Моя нинішня репутація ще не дозволяє розмістити це як коментар. Рішення Stans для входу в режим налагодження, натисніть двічі Ctrl + Перерва, грайте далі, збереження вирішило мою проблему, але у мене є два несподівані повороти:

  1. Моя структура проекту захищена паролем, тому для того, щоб увійти в режим налагодження, мені потрібно було спочатку увійти в режим розробника, натисніть на структуру проекту та введіть пароль.

  2. Мій проект - файл шаблону (.xmtl). Я відкрив файл подвійним клацанням, що відкриває його у форматі .xml з "1" в кінці попереднього імені файлу. Я виправив помилку згідно інструкції Станса і зберег її як такий ... 1.xml файл. Коли я знову відкрив шаблон, на цей раз як шаблон, і хотів застосувати те саме виправлення помилок до цього файлу, помилка зникла! Я не змінив цей файл, і досі немає помилки при виконанні макросу. Це означає для мене, що помилка насправді не у файлі, а у (прихованому) налаштуванні в Excel.


-1

Зараз проблема, здається, стосується самого Excel

Перевстановіть і закріпіть його :) Інше, що це важко сказати.


Ми спробували перевстановити, хоча користувач «забув» перезавантажитись після того, як хлопець із служби підтримки зробив його. Я намагаюся уникнути чергової перевстановлення Office, але це може бути неминучим ... Спасибі
Філ Віттінгтон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.