В настоящее время не удается войти в режим паузы.

Это происходит все чаще, когда у меня есть листы. добавить или листы. удалить в Excel VBA. После поиска и поиска я наконец нашел официальную страницу поддержки Microsoft на Это. Мой вопрос: кто-нибудь знает, почему я мог снова и снова выполнять этот код, а потом вдруг он начал делать то, что Microsoft говорит, что он всегда будет делать, и есть ли способ это исправить?

Sub foo()

    Sheets.add
    debug.print "sheet added" 'breakpoint here

End sub

Это так просто. Вы не сможете воссоздать это, потому что проблема, о которой я спрашиваю, заключается в том, что сначала этого не происходит. Он работает просто отлично снова и снова, а затем случайным образом выдает ошибку, описанную в linked Страница поддержки Microsoft.


person Cloude    schedule 13.11.2015    source источник
comment
Во-первых: ссылка не предполагает, что Microsoft говорит, что будет делать это всегда. Он описывает определенные условия, при которых ожидаемое поведение не может войти в режим приостановки. Если ни одно из этих условий не выполняется в вашем случае, у вас другая проблема.   -  person David Zemens    schedule 13.11.2015
comment
Есть ли какие-либо элементы управления ActiveX на листах, которые вы пытаетесь удалить? И, используя этот простой пример, можете ли вы воссоздать ошибку после полного закрытия Excel и повторного открытия новой/пустой книги?   -  person David Zemens    schedule 13.11.2015
comment
Да, после того, как это произойдет в первый раз, это произойдет с тех пор. И нет, на удаляемом рабочем листе нет кода или каких-либо элементов управления.   -  person Cloude    schedule 13.11.2015
comment
Из любопытства, вы получаете какую-либо ошибку без установки точки останова?   -  person David Zemens    schedule 13.11.2015
comment
Вы также можете попробовать из меню отладки VBE компилировать проект VBA. Это своего рода выстрел в темноте, но вы можете попробовать.   -  person David Zemens    schedule 13.11.2015
comment
Кроме того, вместо того, чтобы устанавливать точку останова в операторе печати, просто используйте MsgBox "sheet added", хотя это не решает вопрос о том, почему вы получаете предупреждение, я на 99,9% уверен, что в окне сообщения не будет такой же проблемы.   -  person David Zemens    schedule 13.11.2015
comment
Нет, это происходит только в том случае, если есть точка останова после sheet.add или если вы выполняете код с помощью F8. Таким образом, в долгосрочной перспективе после того, как все остальное заработает, код будет работать нормально, просто очень сложно отлаживать другие проблемы, если он продолжает выбрасывать меня из режима отладки всякий раз, когда мой код добавляет рабочий лист. Что касается компиляции проекта VBA, сделать это невозможно, поскольку ошибка возникает, как только вы проходите через Sheets.add.   -  person Cloude    schedule 13.11.2015
comment
попробуйте скомпилировать перед выполнением, вероятно, ничего не изменится, но стоит попробовать...   -  person David Zemens    schedule 13.11.2015


Ответы (4)


Проверьте, не упоминается ли Microsoft Visual Basic for Applications Extensibility в проекте.

Вы можете проверить это в меню Инструменты/Ссылки в окне Visual Basic проекта.

Ссылка на Visual Basic для расширяемости приложений предотвращает приостановку выполнения программы:

Excel помогает конкретно:

Изменение было внесено в проект программно с использованием объектной модели расширяемости (надстройки). Это предотвращает приостановку выполнения программы. Вы можете продолжить выполнение или завершить выполнение, но не можете приостановить выполнение.

Вы не можете выполнить код при внесении изменений в проект (динамически, например, с помощью InsertLine и т. д.). код может быть запущен, но не пошагово.

person agcala    schedule 30.09.2019
comment
Например, Workbook.VBProject.references.AddFromGuid не может быть пройден. - person DaveP; 27.03.2020

Удаление определенных объектов, включая объекты ActiveX, фактически изменяет проект VB. Мне потребовалось некоторое время, чтобы понять, что следующая строка кода предотвращает переход VBE в режим останова:

Excel.ActiveSheet.DrawingObjects.Delete

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

person ChrisB    schedule 25.10.2019

Вот несколько предложений, которые не являются надежными,

Во-первых, убедитесь, что ошибка не возникает, если точка останова не установлена.

Если это не так, попробуйте еще несколько вещей:

  1. В меню отладки VBE «Скомпилировать проект VBA» стоит попробовать.
  2. Полностью удалить строку. Запустите код. Затем верните строку и повторите попытку с точкой останова.
  3. Добавьте оператор DoEvents после Sheets.Add
  4. Используйте MsgBox вместо точки останова на Debug.Print. При отображенном окне сообщения попытайтесь вручную прервать работу, используя ctrl+fn+End. (На данный момент «ломать» не обязательно, но было бы интересно посмотреть, сможете ли вы сломать таким образом)
  5. Вместо этого поставьте точку останова на Sheets.Add; с практической точки зрения нет причин ставить точку останова на оператор Print, если вы можете просто поставить ее на предыдущую строку.
  6. Аддины есть? Если это так, отключите их все и снова включите по одному, проверяя, какой из них может способствовать возникновению ошибки.
person David Zemens    schedule 13.11.2015

Еще один глюк Excel/VBA.

Когда это происходит со мной, когда я нажимаю кнопку, запускающую макрос:

  • Сначала я пытаюсь напрямую запустить макрос из VBE,
  • если не получается, то я ставлю точку останова на первую инструкцию макроса,
  • если это все еще не удается, я пробую оба,
  • или, нажав кнопку и прервав первую точку останова, я делаю один шаг (SHIFT F8), а затем могу позволить отладке выполняться как обычно (F5).

И пока я больше не получаю эту ошибку.

Вероятно, это тоже не надежно, но попробовать стоит.

person Pragmateek    schedule 12.12.2018