Приложение Excel VBA самопроизвольно останавливается с сообщением " выполнение кода остановлено"

из того, что я вижу в интернете, это довольно распространенная жалоба, но ответы, похоже, реже. Проблема в следующем:

У нас есть несколько приложений Excel VBA, которые отлично работают на нескольких компьютерах пользователей. Однако на одной машине, они останавливаются на определенных строках кода. Это всегда те же линии, но эти линии не имеют ничего общего друг с другом.

Если вы нажмете F5 (run) после остановки, приложение продолжится, так что это почти как точка останова добавлено. Мы попытались выбрать "Удалить все перерывы" из меню и даже добавить перерыв и удалить его снова.

У нас была эта проблема с отдельными приложениями раньше, и мы "bodged" его, вырезая код из модулей, компиляции, а затем вставляя его обратно в etc.

проблема теперь, похоже, связана с самим Excel, а не с одним.xls, поэтому мы немного не уверены, как это сделать.

любая помощь будет принята с благодарностью :)

спасибо,

Филип Уиттингтон

11 ответов


Я нашел 2-е решение.

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

надеюсь, это кому-то поможет.


эта проблема возникает из-за странной причуды в Office / Windows.

после разработки одного и того же фрагмента кода VBA и запуска его сотни раз (буквально) за последние пару дней я столкнулся с этой проблемой только сейчас. Единственное, что отличалось от этого, - это то, что незадолго до возникновения этой запутанной проблемы я случайно закончил выполнение кода VBA неортодоксальным методом.

я очистил все временные файлы, перезагрузил и т. д... Когда я запустил код опять же, после всего этого у меня все еще была проблема - до того, как я вошел в первый цикл. Имеет смысл, что "нажмите кнопку" отладка "во всплывающем окне, затем нажмите дважды [Ctrl + Break] и после этого может продолжаться без остановок" потому что что-то в сочетании Office/Windows не выпустило выполнение. Она застряла.

избыточное действие Ctrl+Break, вероятно, разрешает затянувшееся выполнение.


одним из решений является здесь:

решение этой проблемы заключается в добавлении строки кода "Приложение.EnableCancelKey = xlDisabled" в первой строке вашего макрос.. Это исправит проблему, и вы сможете выполнить макрос успешно без получения сообщения об ошибке "выполнение кода было прервано".

но после того, как я вставил эту строку кода, я больше не мог использовать Ctrl+Break. Так что это работает, но не очень.


Я обнаружил, что нажатие ctrl + break, пока макрос не работал, исправило проблему.


Я бы попробовал обычные корректирующие вещи: - Запустите очиститель кода VBA Роба Бови на вашем коде VBA - удалите все дополнения на ПК пользователей, особенно COM и .NET addins - Удалить всех пользователей .Файлы EXD (несовместимости обновлений MSoft) - Запустите Excel Detect & Repair в системе пользователей - проверьте размер пользователя .xlb файл (должен быть 20-30K) - Перезагрузка затем удалить все временные файлы пользователей


спасибо всем за их вклад. Эта проблема была решена путем выбора ремонта в Панели Управления. Я предполагаю, что это явно перерегистрирует некоторые из собственных com-компонентов Office и делает вещи, которые переустановка не делает. Я ожидаю, что последний просто проходит контрольный список и иногда принимает то, что есть, если он уже установлен, возможно. Затем у меня была отдельная проблема с регистрацией моей собственной .NET dll для COM-взаимодействия на машине пользователя (несмотря на это также работает на других машинах), хотя я думаю, это была моя ошибка, а не Майкрософт. Еще раз спасибо, я очень ценю это.


Я сталкивался с этой проблемой несколько раз во время разработки одного сложного приложения Excel VBA. Иногда Excel начал разбивать объект VBA довольно случайным образом. И единственным выходом было перезагрузить машину. После перезагрузки Excel обычно начинал действовать нормально.

вскоре я узнал, что возможное решение этой проблемы-нажать CTRL+Break один раз, когда макрос не работает. Может, это поможет и тебе.


У меня была эта проблема также с использованием excel 2007 с foobar.xlsm (макрос включен ) книга, которая получит "выполнение кода было прервано", просто пытаясь закрыть книгу на Красном X в правом углу без каких-либо макросов, работающих вообще, или любой "инициализировать" форму, книгу или макрос рабочего листа либо. Параметры, которые я получил, были "End" или "Continue", Debug всегда был серым цветом. Я сделал как предыдущий плакат предложил Панель управления - >Программы и функции - > щелкните правой кнопкой мыши " Microsoft Office Proffesional 2007 " (в моем случае) ->изменить->восстановить.

Это решило проблему для меня. Я мог бы добавить, что это произошло вскоре после обновления MS, и я также нашел дополнение в Excel под названием "Team Foundation" от Microsoft, которое я, конечно, не устанавливал добровольно


моя текущая репутация еще не позволяет опубликовать это как комментарий. Решение Stans для входа в режим отладки, дважды нажмите Ctrl + Break, play on, save решило мою проблему, но у меня есть два неожиданных поворота:

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

  2. мой проект-это файл шаблона (.xmtl). Я открыл файл двойным щелчком мыши, который открывает его как .xml с "1" в конце предыдущего имени файла. Я исправил ошибку, как по инструкции Stans, и сохранил ее как это ...1.XML-файл. Когда я снова открыл шаблон, на этот раз как шаблон, и хотел применить то же исправление ошибки к этому файлу, ошибка исчезла! Я не менял этот файл и до сих пор нет ошибки при выполнении макроса. Это означает, что ошибка на самом деле не в файле, а в (скрытой) настройке в Превосходить.


Я хотел бы добавить больше деталей к стан ответ #2 по следующим причинам:

  • Я сам сталкивался с этой проблемой более десятка раз и в зависимости от условий проекта, я выбрал между Стэном магический ответ вуду #1 или #2. Когда я снова сталкиваюсь с этим, я становлюсь более любопытным, почему это происходит в первую очередь.

  • Я хотел бы добавить ответ для пользователей Mac тоже.

  • существуют ограничения с обоими этими возможными ответами:

    • если код защищен (и вы не знаете пароль), то ответ #1 не поможет.
    • если код не защищен, то ответ #2 не позволит вам отлаживать код.

  1. это может произойти из-за любой из следующих причин:

    • операционные системы не выделять системные ресурсы для процесса Excel. (устранение: нужно просто запустить операционную систему-показатель успеха очень низок, но, как известно, работает много раз)

    • P-code-это промежуточный код, который использовался в Visual Basic (до .NET) и, следовательно, все еще используется в VBA. Он включил более компактный исполняемый файл за счет более медленного выполнения. Почему я говорю о p-код? Потому что он иногда повреждается между несколькими исполнения и большие файлы или просто из-за установки программного обеспечения (Excel) где-то испортились. Когда P-код развращает. выполнение кода постоянно прерывается. решение: в этих случаях предполагается, что ваш код начал повреждаться, и в будущем есть вероятность, что ваша книга Excel также будет повреждена, давая вам сообщения, такие как "файл excel поврежден и не может быть открыт". Следовательно, в качестве быстрого решения вы можете положиться на ответ № 1 или ответ № 2 в соответствии с вашими требованиями. Однако никогда не игнорируйте признаки коррупции. Лучше скопировать модули кода в блокнот, удалить модули, сохранить и закрыть книгу, закрыть excel. Теперь снова откройте книгу и начните создавать новые модули с кодом, скопированным ранее в блокнот.

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

    • Ctrl + пауза
    • Ctrl + ScrLk
    • Esc + Esc (нажать два раза подряд)

вы будете переведены в режим перерыва, используя вышеуказанные комбинации клавиш, так как макрос приостанавливает выполнение сразу после завершения текущей задачи. Это замена шага 2.

  1. устранение: чтобы преодолеть ограничение, используя ответ #1 и ответ #2, Я использую xlErrorHandler вместе с Resume оператор в обработчике ошибок, если код ошибки равен 18. Затем прерывание отправляется в выполняемую процедуру как ошибка, перехватываемая обработчиком ошибок, настроенным с помощью оператора On Error GoTo. Код ошибки trappable-18. Текущая процедура прерывается, и пользователь может отладить или завершить процедуру. Microsoft дает предупреждение, что не используйте это, если ваш обработчик ошибок имеет оператор resume, иначе ваш обработчик ошибок всегда возвращается к тому же оператору. Именно этого мы и хотим в нежелательных бессмысленных прерываниях выполнения кода.


проблема теперь, похоже, связана с самим Excel

переустановите и исправьте его:) другое, тогда это трудно сказать.