Это старая версия документа.


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

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

Ошибки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отладка кода

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

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

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

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

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

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

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

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

Видеть значения переменных

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

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

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

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

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

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

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

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

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

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

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

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

Для вывода сообщения в разных строках необходимо использовать вставить Chr(13):

MsgBox "Текст первой строки"й строки"Текст второй строки"

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

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