Главная страница
Навигация по странице:

  • Основные сведения о средствах отладки и обработки ошибок

  • Source

  • LastDLLError

  • Отладка

  • Выполнение лабораторной работы

  • Debug \ Step Into (Отладка \ Шаг с заходом)

  • Debug \ Toggle Breakpoint (Отладка\Точка останова)

  • Отладка программ и обработка ошибок в vba


    Скачать 30.93 Kb.
    НазваниеОтладка программ и обработка ошибок в vba
    Дата19.12.2022
    Размер30.93 Kb.
    Формат файлаdocx
    Имя файла6.docx
    ТипЛабораторная работа
    #852532

    Отладка программ и обработка ошибок в VBA



    Цель лабораторной работы

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

    Основные сведения о средствах отладки и обработки ошибок

    Отладка программ - это проверка и внесение исправлений в программу при ее разработке.

    В процессе отладки программы возможны три вида ошибок:

    • ошибки компиляции, возникающие при неправильном использовании синтаксиса инструкций, свойств и методов объектов. Эти ошибки выявляются на уровне компиляции и легко исправляются;

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

    Обработка ошибок - это задание реакции на ошибки, которые возникают во время выполнения программы. Целесообразно в программе создать подпрограмму - обработчик ошибок, тех которые могут возникнуть в данной программе на этапе выполнения;

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

    К средствам обработки ошибок относятся операторы On Error, Resume.

    Оператор On Error осуществляет передачу управления на подпрограмму обработки ошибок. Возможны три варианта синтаксиса оператора:

    On Error GoTo метка -

    передача управления на подпрограмму, идентифицирующуюся меткой;

    On Error Resume Next -

    ошибка игнорируется, и управление передается следующему оператору за тем, при выполнении которого возникла ошибка;

    On Error GoTo 0 -

    отключает обработку ошибок для данной процедуры.


    Оператор Resume передает управление из обработчика ошибок в программу, возможны следующие варианты синтаксиса оператора:

    Resume [0] -

    повторное выполнение оператора, вызвавшего ошибку;

    Resume Next -

    выполнение следующего оператора за тем, при выполнении которого возникла ошибка;

    Resume метка -

    выполнение оператора, помеченного меткой.

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

    Свойства объекта Err:

    Number - номер возникшей ошибки;

    Source - имя проекта, в котором возникла ошибка;

    Description - строка с описанием ошибки;

    HelpFile - полное имя файла справки;

    HelpContext - идентификационный номер ошибки в файле справке;

    LastDLLError - содержит код системной ошибки для последнего вызова DLL.

    Методы объекта Err:

    Clear - очищает значения всех свойств объекта Err;

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

    Средства отладки VBA дают возможность прервать выполнение программы в точке останова (точка останова - это специальная инструкция в процедуре VBA, на которой работа процедура приостанавливается), обеспечивают возможность пошагового выполнения процедуры, позволяют в процессе работы процедуры отслеживать значения ее переменных, выражений, свойств объектов, и если нужно изменять их.

    В VBA имеется три режима работы с программой:

    • режим конструктора (режим работы с текстом программы);

    • режим выполнения (текст программы не доступен для изменения работы, его можно только просматривать);

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

    Команды отладки доступны из меню Отладка или через панель Отладка. VBA имеет следующие средства отладки:



    Запуск/

    Продолжение

    Переключение из режима конструктора в режим выполнение, или из режима прерывания в режим выполнения



    Прервать

    Переключение в режим прерывания



    Сброс

    Переключение из режима прерывания или выполнения в режим конструктора



    Точка останова

    Устанавливает / удаляет в текущей строке точку останова



    Шаг с заходом

    Выполняет следующую строку с заходом в процедуры



    Шаг с обходом

    Выполняет следующую строку без захода в процедуру, процедура выполняется полностью



    Шаг с выходом

    Выполняет оставшуюся часть процедуры и останавливается на следующем после вызова процедуры операторе



    Окно локальных переменных

    Открывает окно с текущими значениями всех локальных переменных процедуры



    Окно отладки

    Открывает окно, в котором можно выполнить нужные операторы



    Окно контрольного значения

    Открывает окно, в котором можно просматривать текущие значения переменных, выражений



    Стек вызова

    В режиме прерывания открывает диалоговое окно со списком всех работающих процедур


    Выполнение лабораторной работы

    1. Открыть новый документ EXCEL или WORD.

    2. Добавить в проект модуль с именем Отладка.

    3. Добавить в модуль процедуру, подсчитывающую отношение суммы элементов массива и их произведения, а также нахождение среднего арифметического элементов массива, значение которых являются четными числами:

    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. Выполнить отладку процедуры. Запустить процедуру на выполнение и ввести значения элементов массива 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 .

    VBA выдает ошибку выполнения № 6 - "переполнение" (Overflow).

    В окне с сообщением об ошибке нажать кнопку Debug (Отладка). Цветом выделяется оператор, выполнение которого привело к возникновению ошибки.

    1. Просмотреть значения переменных, влияющих на результат в режиме прерывания. Для этого в 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. Продолжить отладку программы. Запустить программу на выполнение и ввести значения 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. VBA выдает ошибку выполнения №11 - "деление на 0" (Division by zero). Просмотреть значение переменных, участвующих в вычислениях в операторе, выполнение которого привело к возникновению ошибки.

    2. Перейти из режима прерывания программы в режим конструктора. Для этого выполнить команду Run\Reset (Запуск\Сброс) или нажать кнопку Сброс на панели Стандарт.

    3. Продолжить отладку программы. Запустить ее на выполнение и ввести значения 1,3,5,7,9,11,13,15,17, 19. VBA выдает ошибку выполнения № 6 - "переполнение". Просмотреть значение переменных, участвующих в вычислениях в операторе, выполнение которого привело к возникновению ошибки.

    4. Добавить в процедуру обработчик ошибок. Для этого отредактировать процедуру в соответствии с приведенным ниже текстом:

    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

    1. Выполнить отладку обработчика ошибок. Для этого выполнить программу несколько раз, вводя по очереди такие исходные данные, которые привели бы к возникновению всех обрабатываемых ошибок.

    2. Осуществить пошаговое выполнение программы (трассировку) с помощью команды Debug\Step Into (Отладка \ Шаг с заходом), анализируя изменение значений переменных процедуры на каждом шаге выполнения.

    3. Осуществить пошаговое выполнение части программы. Для этого необходимо:

    • установить точку останова, щелкнув указателем мыши по левому полю рядом с нужной строкой программы, или выполнив команду Debug\Toggle Breakpoint (Отладка\Точка останова), или нажав клавишу F9 (например: установить точку останова на строке s = s / p);

    • запустить процедуру на выполнение;

    • после прерывания работы процедуры просмотреть значение переменных s,s1,p,k;

    • продолжить выполнение процедуры в режиме трассировки;

    • удалить точку останова.


    написать администратору сайта