Подходы к отладке кода

Некоторые подходы по нахождению ошибок и их исправлению приведены ниже.

Ошибки

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

Отчет выполнился не верно, сообщение в Business Studio

Отчет выполняется не с ожидаемым результатом. При этом в окне системных сообщений Business Studio (см. Руководство пользователяГлавное окно) выдается текст вида:

17.07.2013 9:07:18 Ошибка при выполнении макроса ПослеВыполненияОтчета: Адресат вызова создал исключение. 
Действия не будут выполнены.

Причина: причины могут быть различные. Например, попытка обработки текстовых переменных арифметическими операциями.

Решение: запустить отчет на выполнение в режиме отладки кода (см. Отладка кода).

Отчет выполнился не верно, сообщений об ошибках нет

При просмотре выполненного отчета видим, что необходимый результат не достигнут. При этом не было никаких сообщений об ошибке.

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

Решение: запустить отчет на выполнение в режиме отладки кода (см. Отладка кода).

Никаких сообщений, отчет выполняется "вечно"

Никаких сообщений не выводится и выполнение одного отчета длится очень долго. "Очень долго" - от нескольких минут и более. Если обработка не связана с очень большим объёмом данных, то, возможно,  получился бесконечный цикл, из которого макрос не может выйти.

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

Решение: завершить выполнение MS Word (MS Excel) через Диспетчер задач Windows (Ctrl+Alt+Del). Возможно, для работы над отчетом потребуется перегрузить Windows.

Далее отчет следует запускать на выполнение при отладке макроса (см. Отладка кода).

Другие сообщения об ошибках

Вариантов и причин ошибок может быть множество. Как правило, характер ошибки понятен из выводимого сообщения. И для исправления ошибок необходимо использовать отладку кода.

Отладка кода

Если путем логических размышлений о причине ошибки исправить её не получается, необходимо детально рассмотреть выполнение макроса и отладить код. Отладка кода подразумевает определение конкретного проблемного места в коде, который приводит к ошибке, и его исправление для получения желаемого результата.

Для того чтобы "залезть в отладку" и пошагово пройтись по выполнению макроса, необходимо первыми строками макроса написать следующие:

'Для отладки
Dim  DebugVar As Variant
Set DebugVar = 0
'конец "для отладки"

При выполнении макроса будет выдано сообщение об ошибке на фоне еще одного окна среды VBA. К этой ошибке привел вышеуказанный код.

Рисунок 1. Сообщение об ошибке, созданной умышленно

Далее необходимо:

  1. Нажать в сообщении "Ок";
  2. Закомментировать указанные ранее строки;
  3. Продолжить работу с макросом пошагово или через точки прерывания – Breakpoint
  4. Найти место ошибки и понять, как ее исправить.
  5. Внести исправление в код в среде VBA разрабатываемого отчета.
Рисунок 2. Комментирование строк, приведших к ошибке
Внимание!

Окно среды VBA, вызванное в ходе перехода к отладке, является окном для отладки конкретного вызываемого отчета и не относится к шаблону отчета Business Studio. Изменения кода в таком окне не будут сохранены в макросе шаблона разрабатываемого отчета. Поэтому окно VBA для отладки лучше использовать для понимания выполнения текущего кода. Изменения же кода необходимо делать в основном окне VBA разрабатываемого отчета.

Видимость значений переменных

В ходе отладки макроса необходимо видеть значения некоторых переменных. Возможные пути их получения приведены ниже.

Значения переменных в окне Watches

Значения необходимых переменных можно получить в ходе отладки в среде VBA: меню Debug – Add Watch…

Дополнительно:

Значения переменных в сообщениях

Значения необходимых переменных также можно получить путем их вывода в отдельных сообщениях в ходе выполнения макроса. Что и когда выводить, определяется непосредственно в коде макроса.

Например, вывести какое-то сообщение можно так:

MsgBox "Текст сообщения"

Значение переменной типа "Текст" можно вывести так:

txtVar = "Какое-то значение переменной"
MsgBox "Значение txtVar = " & txtVar

Значение числовой переменной можно вывести так:

 
digitalVar = 10
MsgBox "Значение digitalVar = " & Str(digitalVar)

Сообщение в разных строках можно вывести так:

 
MsgBox "Текст первой строки" & Chr(13)  & _
"Текст второй строки"

Полезные ссылки

Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki