Чтобы распечатать список описаний кодов ошибок в окне «Немедленное», перейдите к функции Debug.Print :
Private Sub ListErrCodes() Debug.Print «List Error Code Descriptions» For i = 0 To 65535 e = Error(i) If e <> «Application-defined or object-defined error» Then Debug.Print i : » Hello World» Stop ‘Sub will be executed to this point and then wait for the user MsgBox TestVar End Sub
Немедленное окно
Если вы хотите протестировать строку макрокода, не требуя запуска всего суб, вы можете вводить команды непосредственно в окно Immediate и нажимать ENTER для запуска строки.
Для тестирования вывода строки вы можете поставить перед ним знак вопроса ? для печати непосредственно в окне Immediate. В качестве альтернативы вы также можете использовать команду print для вывода вывода.
В редакторе Visual Basic нажмите CTRL + G чтобы открыть окно Immediate. Чтобы переименовать текущий выбранный лист в «ExampleSheet», введите следующее в окне «Немедленное» и нажмите ENTER
Отладка VBA: #4 Режим отладки — что это и как в него выйти
ActiveSheet.Name = «ExampleSheet»
Чтобы напечатать имя текущего выбранного листа непосредственно в окне «Немедленное»
? ActiveSheet.Name ExampleSheet
Этот метод может быть очень полезен для проверки функциональности встроенных или определенных пользователем функций перед их внедрением в код. В приведенном ниже примере показано, как окно Immediate можно использовать для проверки вывода функции или ряда функций для подтверждения ожидаемого.
‘In this example, the Immediate Window was used to confirm that a series of Left and Right ‘string methods would return the desired string ‘expected output: «value» print Left(Right(«1111value1111»,9),5) ‘
Непосредственное окно также может использоваться для установки или сброса приложений, рабочей книги или других необходимых свойств. Это может быть полезно, если у вас есть Application.EnableEvents = False в подпрограмме, которая неожиданно вызывает ошибку, заставляя ее закрываться без сброса значения в True (что может вызвать разочарование и неожиданную функциональность. В этом случае команды могут быть введены непосредственно в окно Immediate и запустите:
? Application.EnableEvents ‘
Для более сложных методов отладки двоеточие : можно использовать в качестве разделителя строк. Это можно использовать для многострочных выражений, таких как цикл в приведенном ниже примере.
x = Split(«a,b,c»,»,»): For i = LBound(x,1) to UBound(x,1): Debug.Print x(i): Next i ‘
Использование таймера для поиска узких мест в производительности
Первым шагом в оптимизации скорости является поиск самых медленных разделов кода. Функция Timer VBA возвращает количество секунд, прошедших с полуночи, с точностью 1/256 секунды (3,90625 миллисекунды) на компьютерах под управлением Windows. Функции VBA Now и Time верны с точностью до секунды.
Dim start As Double ‘ Timer returns Single, but converting to Double to avoid start = Timer ‘ scientific notation like 3.90625E-03 in the Immediate window ‘ . part of the code Debug.Print Timer — start; «seconds in part 1» start = Timer ‘ . another part of the code Debug.Print Timer — start; «seconds in part 2»
Добавление точки останова к вашему коду
Вы можете легко добавить точку останова в свой код, нажав на серый столбец слева от строки вашего кода VBA, где вы хотите остановить выполнение. В столбце появляется красная точка, а код точки останова также выделяется красным цветом.
Отладка VBA: #1 Введение
Вы можете добавить несколько точек останова по всему вашему коду и возобновить выполнение, нажав значок «играть» в строке меню. Не весь код может быть точкой останова в качестве строк определения, первая или последняя строка процедуры и строки комментариев не могут быть выбраны в качестве точки останова.
Окно локаторов отладки
Окно Locals обеспечивает легкий доступ к текущему значению переменных и объектов в рамках функции или подпрограммы, в которой вы работаете. Это важный инструмент для отладки вашего кода и перехода к изменениям, чтобы найти проблемы. Он также позволяет вам исследовать свойства, которые, возможно, не были известны.
Возьмем следующий пример:
Option Explicit Sub LocalsWindowExample() Dim findMeInLocals As Integer Dim findMEInLocals2 As Range findMeInLocals = 1 Set findMEInLocals2 = ActiveWorkbook.Sheets(1).Range(«A1») End Sub
В редакторе VBA нажмите «Вид» -> «Окно локалей».
Затем, перейдя через код с помощью F8 после нажатия внутри подпрограммы, мы остановились перед тем, как назначить findMeinLocals. Ниже вы можете увидеть, что значение равно 0 — и это то, что будет использовано, если вы никогда не назначили ему значение. Объект диапазона — «Ничего».
Если мы остановимся до завершения подпрограммы, мы увидим окончательные значения переменных.
Как отладить программу vba
Большое спасибо Дмитрий за лучший онлайн тренинг.
Очень понравились манера подачи материала тренинга, примеры на которых демонстрировался материал и конечно домашние задания. Та еще головоломка 🙂
Всем у кого будет шанс -> советую брать Вебинар, а не просмотр Мастер-класса в записи. При прохождении Вебинара онлайн -> появляется уникальный шанс задавать вопросы в прямом эфире и также после выполнения задания на дом получить рекоммендации и советы по оптимизации именно вашего собственного кода от гуру Экселя 🙂
. Очень важно всем кто собирается принять участие в Вебинаре -> Посмотреть перед началом все бесплатные видеоуроки .
Еще раз благодарю вас Дмитрий за ваш труд,
Александр из Канады
Александр Огай о практическом тренинге
Дмитрий, спасибо за интересные уроки!
Тут я впервые стала писать код вручную самостоятельно, от начала до конца. Раньше это был микс из макрорекодера и надерганных фрагментов чужих макросов. А сейчас вышла на принципиально другой уровень. Это круто!
Дарья Бабушкина о практическом тренинге
Дмитрий, очень рада, что попала на ваш проект. Огромное вам спасибо: за то, что не разочаровали; за профессионализм; за правильно выстроенную методику подачи сложного материала; за советы и поддержку во время выполнения домашних заданий; за грамотную речь; за терпение.
Получила массу полезной информации. Всю преподнесённую информацию пока ещё не «переварила». Но, к счастью, есть ваши ценные видеоуроки.
Успехов вам в делах и в личной жизни! Благодарю.
Светлана Баринова о практическом тренинге
Хочу поблагодарить вас за проведенный вебинар, который состоялся 26.06.2018г. С excel работаю давно, но с макросами никогда не сталкивалась, казалось, что это только для программистов. После просмотра вебинара изменила свое мнение.
Понятно, что не зная языка программирования и даже базового английского, сама что-то придумать я не смогу, но на имеющихся ваших примерах, можно существенно облегчить рутинную работу. Главное, что объясняете вы доступно и понятно даже для новичков, а запись помогает закрепить усвоенный материал. Конечно,не все на раз — два получается, но если задаться целью и набраться терпения, результат превосходит все, даже самые смелые, ожидания. Качество записи отличное, плюс xl файл с прописанными макросами. Спасибо вам огромное!
Нина Фролова о мастер-классе
Хочу поделиться своими впечатлениями о вебинаре 26.06.2018 «Автоматизация заполнения таблиц».
Урок прошел на высоком профессиональном уровне, как и все остальные, в которых я принимал участие. Материал подан в понятной и доступной форме, даже для начинающих.
Все примеры разобраны до мелочей, что заставляет думать об использовании данных программ или написании новых в дальнейшем. Участие в таких уроках очень полезно, особенно новичкам, так как очное присутствие не заменит никакая запись.
Хочу пожелать Дмитрию и его команде продолжать в том же духе, хотя понимаю, что это очень дорогое и хлопотное занятие. А мы всегда поддержим своим вниманием и участием.
Всем остальным хочу пожелать, чтобы через нашу информацию становилось больше участников разных проектов этой команды.
Источник: excel-eto-prosto.ru
Макросы Excel – отладка кода
Вы узнали, что макрос хранится в виде кода VBA в Excel. Вы также узнали, что можете напрямую написать код для создания макроса в редакторе VBA. Однако, как и в случае с любым кодом, даже код макроса может иметь дефекты, и макрос может работать не так, как вы ожидали.
Это требует изучения кода, чтобы найти дефекты и исправить их. Термин, который используется для этого действия в разработке программного обеспечения, является отладкой.
Отладка VBA
Редактор VBA позволяет приостановить выполнение кода и выполнить любую необходимую задачу отладки. Ниже приведены некоторые из задач отладки, которые вы можете выполнить.
- Пошаговое выполнение кода
- Использование точек останова
- Резервное копирование или движение вперед в коде
- Не переступая через каждую строку кода
- Запрашивать что-либо во время пошагового выполнения кода
- Остановка казни
Это лишь некоторые из задач, которые вы можете выполнять в среде отладки VBA.
Пошаговое выполнение кода
Первое, что вам нужно сделать для отладки, это пройти по коду при его выполнении. Если у вас есть представление о том, какая часть кода, вероятно, создает дефект, вы можете перейти к этой строке кода. В противном случае вы можете выполнить код построчно, выполнить резервное копирование или продвинуться вперед в коде.
Вы можете перейти к коду из диалогового окна «Макрос» в рабочей книге или из самого редактора VBA.
Войдя в код из рабочей книги
Чтобы войти в код из рабочей книги, выполните следующие действия:
- Нажмите вкладку VIEW на ленте.
- Нажмите Макросы.
- Выберите View Macros из выпадающего списка.
Откроется диалоговое окно «Макрос».
- Нажмите на имя макроса.
- Нажмите кнопку Шаг в.
Откроется редактор VBA и в окне кода появится код макроса. Первая строка в коде макроса будет выделена желтым цветом.
Шаг в код от редактора VBA
Чтобы войти в код из редактора VBA, выполните следующие действия:
- Нажмите вкладку РАЗРАБОТЧИК на ленте.
- Нажмите Visual Basic. Откроется редактор VBA.
- Нажмите на модуль, который содержит код макроса.
Код макроса появится в окне кода.
- Перейдите на вкладку «Отладка» на ленте.
- Выберите Step into из выпадающего списка.
Перейдите на вкладку «Отладка» на ленте.
Выберите Step into из выпадающего списка.
Первая строка в коде макроса будет выделена. Код находится в режиме отладки, и параметры в раскрывающемся списке «Отладка» станут активными.
Резервное копирование или движение вперед в коде
Вы можете двигаться вперед или назад в коде, выбрав Step Over или Step Out.
Не переступая через каждую строку кода
Вы можете избежать пошагового прохождения каждого строкового кода, если вы идентифицируете потенциальную часть кода, которую необходимо обсудить, выбрав Run to Cursor.
Использование точек останова
Кроме того, вы можете установить точки останова в определенных строках кода и выполнить код, наблюдая результаты в каждой точке останова. Вы можете переключать точку останова и очищать все точки останова, если и когда это необходимо.
Использование часов
Вы можете добавить часы во время отладки, чтобы оценить выражение и остановить выполнение, когда переменная достигает определенного значения. Это означает, что вы настраиваете выражение наблюдения, которое будет отслеживаться до тех пор, пока оно не станет истинным, а затем макрос остановится и оставит вас в режиме прерывания. VBA предоставляет вам несколько типов часов на выбор, чтобы выполнить то, что вы ищете.
Остановка казни
Во время отладки, в любой момент, если вы нашли подсказку о том, что идет не так, вы можете остановить выполнение, чтобы расшифровать его дальше.
Если вы опытный разработчик, терминология отладки вам знакома, а опции отладки в редакторе VBA сделают вашу жизнь проще. Даже в противном случае освоение этого навыка не займет много времени, если вы изучите VBA и поймете код.
Источник: coderlessons.com