Приложение Excel VBA самопроизвольно останавливается с сообщением " выполнение кода остановлено"
из того, что я вижу в интернете, это довольно распространенная жалоба, но ответы кажутся более редкими. Проблема заключается в следующем:
У нас есть ряд приложений Excel VBA, которые отлично работают на нескольких машинах пользователей. Однако на одной машине, они останавливаются на определенных строках кода. Это всегда те же линии, но эти линии не имеют ничего общего друг с другом.
Если вы нажмете F5 (run) после остановки, приложение продолжится, так что это почти как точка останова был добавлен. Мы попытались выбрать "Удалить все перерывы" из меню и даже добавить перерыв и удалить его снова.
У нас была эта проблема с отдельными приложениями раньше, и мы "бодгировали" ее, вырезая код из модулей, компилируя и затем вставляя его обратно в etc.
теперь проблема, похоже, связана с самим Excel, а не с одним.xls, так что мы немного не уверены, как это сделать.
любая помощь будет принята с благодарностью :)
спасибо,
Филип Уиттингтон
11 ответов:
Я нашел 2-е решение.
- Нажмите кнопку "отладка" во всплывающем окне.
- пресс Ctrl+Пауза|Перерыв два раза.
- Нажмите кнопку воспроизведения, чтобы продолжить.
- сохраните файл после завершения работы.
надеюсь, это кому-то поможет.
эта проблема возникает из-за странной причуды в офисе/Windows.
после разработки одного и того же фрагмента кода VBA и запуска его сотни раз (буквально) за последние пару дней я столкнулся с этой проблемой только сейчас. Единственное, что отличалось от этого, - это то, что непосредственно перед тем, как испытать эту запутанную проблему, я случайно закончил выполнение кода VBA неортодоксальным методом.
я очистил все временные файлы, перезагрузил и т. д... Когда я запустил код опять же после всего этого я все еще получил проблему - прежде чем я вошел в первый цикл. Это имеет смысл, что "нажмите кнопку" отладка "во всплывающем окне, затем дважды нажмите [Ctrl + Break] и после этого можно продолжить без остановок" потому что что-то в комбинации Office/Windows не выпустило выполнение. Он застрял.
избыточное действие Ctrl+Break, вероятно, разрешает затяжное выполнение.
одно решение здесь:
решение этой проблемы заключается в добавлении строки кода "Приложение.EnableCancelKey = xlDisabled" в первой строке вашего макрос.. Это устранит проблему, и вы сможете выполнить макрос успешно без получения сообщения об ошибке"выполнение кода было прервано".
но после того, как я вставил эту строку кода, я больше не мог использовать Ctrl+Break. Так что это работает, но не сильно.
Я бы попробовал обычные корректирующие вещи: - Запустите очиститель кода VBA Роба Бови на вашем коде VBA - удалить все надстройки на ПК пользователей, в частности COM и .NET надстройки - Удалить всех пользователей .Файлы с расширением EXD (обновление Мсофт несовместимости) - Запустите программу Excel обнаружение и ремонт на пользователей системы - проверьте размер пользователя .xlb файл (должен быть 20-30K) - Перезагрузка затем удалить все временные файлы пользователей
спасибо всем за их вклад. Эта проблема была решена путем выбора ремонта в Панели Управления. Я предполагаю, что это явно перерегистрирует некоторые из собственных COM-компонентов Office и делает вещи, которые переустановка не делает. я ожидаю, что последний просто проходит контрольный список и иногда принимает то, что есть, если он уже установлен, возможно. Затем у меня была отдельная проблема с регистрацией моей собственной dll .NET для COM-взаимодействия на машине пользователя (несмотря на то, что это также работает на других машинах), хотя я думаю, это была моя ошибка, а не Майкрософт. Еще раз спасибо, я действительно ценю это.
Я столкнулся с этой проблемой несколько раз во время разработки одного сложного приложения Excel VBA. Иногда Excel начинал разбивать объект VBA совершенно случайно. И единственным выходом была перезагрузка машины. После перезагрузки Excel обычно начинал действовать нормально.
вскоре я узнал, что возможным решением этой проблемы является нажатие CTRL+Break один раз, когда макрос не работает. Может быть, это может помочь вам.
У меня была эта проблема также с помощью excel 2007 с foobar.xlsm (macro enabled ) книга, которая получит "выполнение кода было прервано", просто пытаясь закрыть книгу на Красном X в правом углу без каких-либо макросов, работающих вообще, или любой "инициализировать" форму, книгу или макросы рабочего листа либо. Параметры, которые я получил, были "конец" или "продолжить", Debug всегда был серым. Я сделал как предыдущий плакат предложил Панель управления - >Программы и функции - > щелкните правой кнопкой мыши " Microsoft Office Proffesional 2007 " (в моем случае) ->изменить->восстановить.
Это решило проблему для меня. Я мог бы добавить, что это произошло вскоре после обновления MS, и я также нашел надстройку в Excel под названием "Team Foundation" от Microsoft, которую я, конечно же, не устанавливал добровольно
моя текущая репутация еще не позволяет опубликовать это в качестве комментария. Stans решение для входа в режим отладки, нажмите дважды Ctrl + Break, играть дальше, сохранить действительно решить мою проблему, но у меня есть два неожиданных поворотов:
мой проект struture защищен паролем, поэтому для того, чтобы попасть в режим отладки мне пришлось сначала войти в режим разработчика, нажмите на структуру проекта и введите пароль.
мой проект-это файл шаблона (.xmtl). Я открыл файл с помощью двойного щелчка, который открывает его как .xml с "1" в конце предыдущего имени файла. Я исправил ошибку, как по инструкции Stans и сохранил его как это ...1.XML-файл. Когда я снова открыл шаблон, на этот раз как шаблон, и хотел применить то же исправление ошибки к этому файлу, ошибка исчезла! Я не изменил этот файл и до сих пор нет ошибки при выполнении макроса. Это означает для меня, что ошибка на самом деле не в файле, а в (скрытой) настройке Превосходить.
Я хотел бы добавить больше деталей к станответ #2 по следующим причинам:
Я сам сталкивался с этой проблемой более десятка раз и в зависимости от условий проекта, я выбирал между Стэном магия Вуду ответ #1 или #2. Когда я снова столкнулся с этим, я стал более любопытным, поэтому это происходит в первую очередь.
Я хотел бы добавить ответ для пользователей Mac тоже.
есть ограничения с обоими этими возможными ответами:
Это может произойти по любой из следующих причин:
операционные системы не выделять системные ресурсы для процесса Excel. (устранение: нужно просто запустить операционную систему - показатель успеха очень низок, но, как известно, работает много раз)
P-код-это промежуточный код, который использовался в Visual Basic (до .NET) и, следовательно, он по-прежнему используется в VBA. Это позволило более компактный исполняемый файл за счет более медленного выполнения. Почему я говорю о p-код? Потому что он иногда повреждается между несколькими исполнения и большие файлы или просто из-за установки программного обеспечения (Excel) пошли коррумпированы где-то. Когда р-код развращает. выполнение кода продолжает прерываться. решение: в этих случаях предполагается, что ваш код начал повреждаться и шансы в будущем, что ваша книга Excel также получить поврежден давая вам сообщения, как "excel файл поврежден и не может быть открыт". Таким образом, как быстрое решение, вы можете положиться на ответ #1 и ответ #2 согласно вашим требованиям. Однако никогда не игнорируйте признаки коррупции. Лучше скопировать модули кода в блокнот, удалить модули, сохранить и закрыть книгу, закрыть excel. Теперь снова откройте книгу и начните создавать новые модули с кодом, скопированным ранее в блокнот.
пользователи Mac, попробуйте любой из приведенных ниже вариантов, и из них, безусловно, будет работать в зависимости от вашей архитектуры системы, т. е. ОС и офиса версия
- Ctrl + пауза
- Ctrl + ScrLk
- Esc + Esc (нажать два раза подряд)
вы будете переведены в режим прерывания, используя вышеуказанные комбинации клавиш, поскольку макрос приостанавливает выполнение сразу после завершения текущей задачи. Это замена шага 2.
- устранение: чтобы преодолеть ограничение, используя ответ #1 и ответ #2, Я использую
xlErrorHandlerвместе сResumeоператор в обработчике ошибок, если код ошибки равен 18. Затем прерывание отправляется в запущенную процедуру как ошибка, которую можно перехватить обработчиком ошибок, настроенным с помощью инструкции on Error GoTo. Код перехватываемая ошибка составляет 18. Текущая процедура прерывается, и пользователь может отладить или завершить процедуру. Microsoft дает предупреждение, что не используйте это, если ваш обработчик ошибок имеет оператор resume, иначе ваш обработчик ошибок всегда возвращается к тому же оператору. Именно этого мы и хотим в нежелательных бессмысленных прерываниях выполнения кода.
теперь проблема, похоже, связана с самим Excel
переустановите и исправьте его:) Кроме того, что его трудно сказать.
Comments