Отладка программ и обработка ошибок в vba
Скачать 30.93 Kb.
|
Отладка программ и обработка ошибок в VBAЦель лабораторной работы Лабораторная работа служит для ознакомления с возможностями VBA по отладке программ и обработке ошибок и приобретения практических навыков по их использованию при отладке программ. Основные сведения о средствах отладки и обработки ошибок Отладка программ - это проверка и внесение исправлений в программу при ее разработке. В процессе отладки программы возможны три вида ошибок: ошибки компиляции, возникающие при неправильном использовании синтаксиса инструкций, свойств и методов объектов. Эти ошибки выявляются на уровне компиляции и легко исправляются; ошибки выполнения, возникающие при выполнении программы. Причиной таких ошибок может быть отсутствие данных, неправильные данные, неготовность устройства и так далее. Для устранения возникновения этих ошибок целесообразно использовать имеющиеся в VBA средства обработки ошибок. Обработка ошибок - это задание реакции на ошибки, которые возникают во время выполнения программы. Целесообразно в программе создать подпрограмму - обработчик ошибок, тех которые могут возникнуть в данной программе на этапе выполнения; логические ошибки, являющиеся причиной неправильной работы программы. Для нахождения таких ошибок предназначены средства отладки. Средства отладки позволяют обнаружить логические ошибки и ошибки периода выполнения, а также наблюдать за выполнением программы. К средствам обработки ошибок относятся операторы On Error, Resume. Оператор On Error осуществляет передачу управления на подпрограмму обработки ошибок. Возможны три варианта синтаксиса оператора:
Оператор Resume передает управление из обработчика ошибок в программу, возможны следующие варианты синтаксиса оператора:
Объект Err, через свойства и методы которого можно получить о последней ошибке выполнения. Свойства объекта Err: Number - номер возникшей ошибки; Source - имя проекта, в котором возникла ошибка; Description - строка с описанием ошибки; HelpFile - полное имя файла справки; HelpContext - идентификационный номер ошибки в файле справке; LastDLLError - содержит код системной ошибки для последнего вызова DLL. Методы объекта Err: Clear - очищает значения всех свойств объекта Err; Raise - генерирует ошибку во время выполнения программы. Используется для проверки работы обработчика ошибок, или создания собственных ошибок при выполнении программы. Средства отладки VBA дают возможность прервать выполнение программы в точке останова (точка останова - это специальная инструкция в процедуре VBA, на которой работа процедура приостанавливается), обеспечивают возможность пошагового выполнения процедуры, позволяют в процессе работы процедуры отслеживать значения ее переменных, выражений, свойств объектов, и если нужно изменять их. В VBA имеется три режима работы с программой: режим конструктора (режим работы с текстом программы); режим выполнения (текст программы не доступен для изменения работы, его можно только просматривать); режим прерывания (приостановка работы программы, режим позволяет просматривать значения переменных, продолжать или прекращать работу программы, вносить изменения в текст программы). Команды отладки доступны из меню Отладка или через панель Отладка. VBA имеет следующие средства отладки:
Выполнение лабораторной работы Открыть новый документ EXCEL или WORD. Добавить в проект модуль с именем Отладка. Добавить в модуль процедуру, подсчитывающую отношение суммы элементов массива и их произведения, а также нахождение среднего арифметического элементов массива, значение которых являются четными числами: Public Sub pr_Otl1() Dim b(10) As Integer Dim s As Single Dim p As Integer Dim s1 As Single Dim k As Integer p = 1 For i = 1 To 10 b(i) = InputBox("Введите число") If b(i) Mod 2 = 0 Then s1 = s1 + b(i): k = k + 1 s = s + b(i): p = p* b(i) Next s = s / p : MsgBox s s1 = s1 / k : MsgBox s1 End Sub Выполнить отладку процедуры. Запустить процедуру на выполнение и ввести значения элементов массива 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 . VBA выдает ошибку выполнения № 6 - "переполнение" (Overflow). В окне с сообщением об ошибке нажать кнопку Debug (Отладка). Цветом выделяется оператор, выполнение которого привело к возникновению ошибки. Просмотреть значения переменных, влияющих на результат в режиме прерывания. Для этого в VBA имеется несколько средств: для просмотра значения конкретной переменной, установить на ее имя указатель мыши и значение переменной отобразится во всплывающей подсказке. Если этого не произошло, следует установить флажок Auto Data Tips на вкладке Editop в окне команды Tools/Options. Просмотреть значение переменных p и b(i); для просмотра значений всех локальных переменных выполнить команду View\Locals Window (Вид\Окно локальных переменных); для просмотра значений нужных переменных и выражений использовать окно Watches (Контрольные значения). Просмотреть в контрольном окне значение переменных p и b(i), а также выражения p*b(i). Для добавления переменной (выражения) в контрольное окно, следует выделить ее имя (выражение) в операторе и выполнить команду Add Watch (Отладка\Добавить контрольное значение). Просмотр окна Watches позволяет сделать вывод, что тип переменной p не соответствует помещаемому значению. Тип переменной р необходимо изменить на Long (Длинное целое). Внести изменение в текст процедуры. Закрыть окно Watches. Повторно выполнить программу. Продолжить отладку программы. Запустить программу на выполнение и ввести значения 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. VBA выдает ошибку выполнения №11 - "деление на 0" (Division by zero). Просмотреть значение переменных, участвующих в вычислениях в операторе, выполнение которого привело к возникновению ошибки. Перейти из режима прерывания программы в режим конструктора. Для этого выполнить команду Run\Reset (Запуск\Сброс) или нажать кнопку Сброс на панели Стандарт. Продолжить отладку программы. Запустить ее на выполнение и ввести значения 1,3,5,7,9,11,13,15,17, 19. VBA выдает ошибку выполнения № 6 - "переполнение". Просмотреть значение переменных, участвующих в вычислениях в операторе, выполнение которого привело к возникновению ошибки. Добавить в процедуру обработчик ошибок. Для этого отредактировать процедуру в соответствии с приведенным ниже текстом: Public Sub pr_Otl1() Dim b(10) As Integer Dim s As Single Dim p As Long Dim s1 As Single Dim k As Integer On Error GoTo MyErrHandler p = 1 Vvod: For i = 1 To 10 b(i) = InputBox("Введите число") If b(i) Mod 2 = 0 Then s1 = s1 + b(i): k = k + 1 s = s + b(i): p = p * b(i) Next s = s / p MsgBox s s1 = s1 / k MsgBox s1 Exit Sub MyErrHandler: Select Case Err.Number Case 6 MsgBox "среди элементов массива нет четных чисел, повторите ввод" Err.Clear: s1 = 0: p = 1 Resume Vvod Case 11 MsgBox "Один из элементов массива равен нулю," & _ " отношение суммы к произведению элементов найти нельзя" Resume Next Case Else Dim err_num As Integer err_num = Err.Number MsgBox "Ошибка выполнения" & err_num Err.Clear Resume Next End Select End Sub Выполнить отладку обработчика ошибок. Для этого выполнить программу несколько раз, вводя по очереди такие исходные данные, которые привели бы к возникновению всех обрабатываемых ошибок. Осуществить пошаговое выполнение программы (трассировку) с помощью команды Debug\Step Into (Отладка \ Шаг с заходом), анализируя изменение значений переменных процедуры на каждом шаге выполнения. Осуществить пошаговое выполнение части программы. Для этого необходимо: установить точку останова, щелкнув указателем мыши по левому полю рядом с нужной строкой программы, или выполнив команду Debug\Toggle Breakpoint (Отладка\Точка останова), или нажав клавишу F9 (например: установить точку останова на строке s = s / p); запустить процедуру на выполнение; после прерывания работы процедуры просмотреть значение переменных s,s1,p,k; продолжить выполнение процедуры в режиме трассировки; удалить точку останова. |