Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
ru:creating_user_reports:use_macros_in_reports:debug [2013/10/17 11:25] belkin [Отчет выполнился не верно, сообщение в Business Studio] |
ru:creating_user_reports:use_macros_in_reports:debug [2019/11/11 16:48] (текущий) belkin [Отладка кода] |
||
---|---|---|---|
Строка 5: | Строка 5: | ||
===== Ошибки ===== | ===== Ошибки ===== | ||
- | Конечная цель при выполнении макроса -- это получение требуемого для нас отчета. Если отчет выполнился с другим результатом, чем ожидалось, -- это ошибка. Ошибки могут быть явными -- выдается какое-либо предупреждение, и неявными -- сообщений нет, но требуемый результат не достигнут. Возможные ситуации, которые сопровождают ошибки, приведены ниже. | + | Конечная цель при выполнении макроса - это получение требуемого для нас отчета. Если отчет выполнился с другим результатом, чем ожидалось, это ошибка. Ошибки могут быть явными - выдается какое-либо предупреждение, и неявными - сообщений нет, но требуемый результат не достигнут. Возможные ситуации, которые сопровождают ошибки, приведены ниже. |
==== Отчет выполнился не верно, сообщение в Business Studio ==== | ==== Отчет выполнился не верно, сообщение в Business Studio ==== | ||
- | Отчет выполняется не с ожидаемым результатом. При этом в [[ru/manual/interface/main_form|окне системных сообщений Business Studio]] выдается текст вида: | + | Отчет выполняется не с ожидаемым результатом. При этом в окне системных сообщений Business Studio (см. [[ru/manual/manual]] -> [[ru/manual/interface/main_form]]) выдается текст вида: |
- | <code text> | + | |
- | 17.07.2013 9:07:18 Ошибка при выполнении макроса ПослеВыполненияОтчета: Адресат вызова создал исключение.. | + | <code> |
+ | 17.07.2013 9:07:18 Ошибка при выполнении макроса ПослеВыполненияОтчета: Адресат вызова создал исключение. | ||
Действия не будут выполнены. | Действия не будут выполнены. | ||
</code> | </code> | ||
- | __Причина__: причины различные. Например, попытка обработки текстовых переменных арифметическими операциями. | ||
- | __Решение__: запустить отчет на выполнение в режиме отладки кода (см. [[#отладка_кода| Отладка кода]]). | + | __Причина__: причины могут быть различные. Например, попытка обработки текстовых переменных арифметическими операциями. |
+ | |||
+ | __Решение__: запустить отчет на выполнение в режиме отладки кода (см. [[#отладка_кода|Отладка кода]]). | ||
==== Отчет выполнился не верно, сообщений об ошибках нет ==== | ==== Отчет выполнился не верно, сообщений об ошибках нет ==== | ||
- | При просмотре выполненного отчета, видим, что необходимый результат не достигнут. При этом не было никаких сообщений об ошибке. | + | При просмотре выполненного отчета видим, что необходимый результат не достигнут. При этом не было никаких сообщений об ошибке. |
__Причина:__ ошибка в логике кода, не указаны полностью все необходимые действия в коде, ошибочные вводные параметры. | __Причина:__ ошибка в логике кода, не указаны полностью все необходимые действия в коде, ошибочные вводные параметры. | ||
- | __Решение:__ запустить отчет на выполнение в режиме отладки кода (см. [[#отладка_кода| Отладка кода]]). | + | __Решение:__ запустить отчет на выполнение в режиме отладки кода (см. [[#отладка_кода|Отладка кода]]). |
==== Никаких сообщений, отчет выполняется "вечно" ==== | ==== Никаких сообщений, отчет выполняется "вечно" ==== | ||
Строка 32: | Строка 34: | ||
__Причина__: Разработчик кода макроса допустил логическую ошибку, задав неверные условия в циклических операциях. | __Причина__: Разработчик кода макроса допустил логическую ошибку, задав неверные условия в циклических операциях. | ||
- | __Решение__: завершить выполнение MS Word (MS Excel) через Диспетчер задач (Alt+Ctrl+Del). Возможно, для работы над отчетом потребуется перегрузить Windows. | + | __Решение__: завершить выполнение MS Word (MS Excel) через Диспетчер задач Windows (Ctrl+Alt+Del). Возможно, для работы над отчетом потребуется перегрузить Windows. |
- | Далее отчет следует запускать на выполнение при отладке макроса (см. [[#отладка_кода| Отладка кода]]). | + | Далее отчет следует запускать на выполнение при отладке макроса (см. [[#отладка_кода|Отладка кода]]). |
==== Другие сообщения об ошибках ==== | ==== Другие сообщения об ошибках ==== | ||
- | Вариантов и причин ошибок может быть множество. Как правило, характер ошибки пишется в сообщения. И для их исправления необходимо использовать отладку кода. | + | Вариантов и причин ошибок может быть множество. Как правило, характер ошибки понятен из выводимого сообщения. И для исправления ошибок необходимо использовать отладку кода. |
===== Отладка кода ===== | ===== Отладка кода ===== | ||
- | Если путем логических размышлений о причине ошибке исправить её не получается, необходимо детально рассмотреть выполнение макроса -- отладить код. Отладка кода подразумевает определение конкретного проблемного места в коде, который приводит к ошибке, и его исправление для получения желаемого результата. | + | Если путем логических размышлений о причине ошибки исправить её не получается, необходимо детально рассмотреть выполнение макроса и отладить код. Отладка кода подразумевает определение конкретного проблемного места в коде, который приводит к ошибке, и его исправление для получения желаемого результата. |
- | Для того чтобы "залезть в отладку" и пошагово пройтись по выполнению макроса необходимо первыми строками макроса написать следующие строки: | + | Для того чтобы "залезть в отладку" и пошагово пройтись по выполнению макроса, необходимо первыми строками макроса написать следующие: |
- | + | ||
- | <code vb> | + | |
+ | <code> | ||
'Для отладки | 'Для отладки | ||
Dim DebugVar As Variant | Dim DebugVar As Variant | ||
Set DebugVar = 0 | Set DebugVar = 0 | ||
- | 'конец "для отладки" | + | 'конец "для отладки" |
- | + | ||
</code> | </code> | ||
Строка 64: | Строка 64: | ||
- Нажать в сообщении "Ок"; | - Нажать в сообщении "Ок"; | ||
- Закомментировать указанные ранее строки; | - Закомментировать указанные ранее строки; | ||
- | - Продолжит работу с макросом пошагово или через точки прерывания -- Breakpoint | + | - Продолжить работу с макросом пошагово или через точки прерывания -- Breakpoint |
- Найти место ошибки и понять, как ее исправить. | - Найти место ошибки и понять, как ее исправить. | ||
- Внести исправление в код в среде VBA разрабатываемого отчета. | - Внести исправление в код в среде VBA разрабатываемого отчета. | ||
Строка 70: | Строка 70: | ||
[{{ ru:creating_user_reports:use_macros_in_reports:debug:debug2.png?nolink |Рисунок 2. Комментирование строк, приведших к ошибке | [{{ ru:creating_user_reports:use_macros_in_reports:debug:debug2.png?nolink |Рисунок 2. Комментирование строк, приведших к ошибке | ||
}}] | }}] | ||
- | |||
== Внимание! == | == Внимание! == | ||
- | |||
Окно среды VBA, вызванное в ходе перехода к отладке, является окном для отладки конкретного вызываемого отчета и не относится к шаблону отчета Business Studio. Изменения кода в таком окне не будут сохранены в макросе шаблона разрабатываемого отчета. Поэтому окно VBA для отладки лучше использовать для понимания выполнения текущего кода. Изменения же кода необходимо делать в основном окне VBA разрабатываемого отчета. | Окно среды VBA, вызванное в ходе перехода к отладке, является окном для отладки конкретного вызываемого отчета и не относится к шаблону отчета Business Studio. Изменения кода в таком окне не будут сохранены в макросе шаблона разрабатываемого отчета. Поэтому окно VBA для отладки лучше использовать для понимания выполнения текущего кода. Изменения же кода необходимо делать в основном окне VBA разрабатываемого отчета. | ||
- | ====== ====== | + | ==== ==== |
- | ==== Видеть значения переменных ==== | + | ==== Видимость значений переменных ==== |
В ходе отладки макроса необходимо видеть значения некоторых переменных. Возможные пути их получения приведены ниже. | В ходе отладки макроса необходимо видеть значения некоторых переменных. Возможные пути их получения приведены ниже. | ||
Строка 91: | Строка 89: | ||
**Значения переменных в сообщениях** | **Значения переменных в сообщениях** | ||
- | Значения необходимых переменных также можно получить путем их вывода в отдельных сообщениях в ходе выполнения макроса. Что и когда выводить определяется непосредственно в коде макроса. | + | Значения необходимых переменных также можно получить путем их вывода в отдельных сообщениях в ходе выполнения макроса. Что и когда выводить, определяется непосредственно в коде макроса. |
Например, вывести какое-то сообщение можно так: | Например, вывести какое-то сообщение можно так: | ||
- | <code vb> | + | <code> |
MsgBox "Текст сообщения" | MsgBox "Текст сообщения" | ||
</code> | </code> | ||
- | Значение переменной типа текст можно вывести так: | + | Значение переменной типа "Текст" можно вывести так: |
- | <code vb> | + | <code> |
txtVar = "Какое-то значение переменной" | txtVar = "Какое-то значение переменной" | ||
MsgBox "Значение txtVar = " & txtVar | MsgBox "Значение txtVar = " & txtVar | ||
Строка 105: | Строка 103: | ||
Значение числовой переменной можно вывести так: | Значение числовой переменной можно вывести так: | ||
- | <code vb> | + | <code> |
digitalVar = 10 | digitalVar = 10 | ||
MsgBox "Значение digitalVar = " & Str(digitalVar) | MsgBox "Значение digitalVar = " & Str(digitalVar) | ||
</code> | </code> | ||
- | Для вывода сообщения в разных строках необходимо использовать вставить Chr(13): | + | Сообщение в разных строках можно вывести так: |
- | <code vb> | + | <code> |
MsgBox "Текст первой строки" & Chr(13) & _ | MsgBox "Текст первой строки" & Chr(13) & _ | ||
"Текст второй строки" | "Текст второй строки" | ||
</code> | </code> | ||
+ | |||
===== Полезные ссылки ===== | ===== Полезные ссылки ===== | ||
- | *[[http://office.microsoft.com/ru-ru/access-help/HP005186717.aspx|Отладка программ Visual Basic]] | ||
*[[https://www.google.ru/search?q=отладка+кода+vba|google.com]] | *[[https://www.google.ru/search?q=отладка+кода+vba|google.com]] | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | [<contextnavigator>] | ||
+ | |||
+ |