- •Введение
- •Работа с макросами в офисных приложениях
- •Создание и выполнение программ в редакторе vba
- •Проектирование форм в редакторе vba
- •Отладка программ в редакторе vba
- •Работа с управляющими конструкциями в vba
- •Обработка табличных Excel данных в vba
- •Создание пользовательских приложений
- •Строковые функции vba:
- •Функции vba для работы с датой/временем:
- •Функции vba для работы с массивами:
- •Функции преобразования типов данных:
- •Литература
- •Содержание
Отладка программ в редакторе vba
Цель работы: изучить работу с окнами Immediate и Locals при отладке программ в редакторе VBA.
Задание 1 Работа с окном Immediate
Создайте в Excel новую рабочую книгу и сохраните ее с именем Debug1.xlsm.
Войдите в редактор VBA, вставьте в окно редактора новую форму (команда Insert>UserForm), разместите на форме элементы управления Label, TextBox и CommandButton. Оформите внешний вид формы, как показано на рис. 4.1.
Рис. 4.1 Внешний вид формы Системы счисления
В окне Properties в поле Name для элементов TextBox и CommandButton введите имя в соответствии с таблицей 4.1.
Двойным щелчком по кнопке ОК откройте окно кода и введите между строчками Private Sub cmd_Ok_Click() и End Sub следующий код:
Dim num_P, num_Q, num_10, num_S
num_P = Val(txt_P)
num_Q = Val(txt_Q)
For i = 1 To Len(txt_A)
num_10 = num_10 + Val(Mid(txt_A, i, 1)) * num_P ^ (Len(txt_A) - i)
‘ Debug.Print ("num_10=" & num_10)
Next i
txt_B = ""
While num_10 <> 0
num_S = num_10 Mod num_Q
‘ Debug.Print ("num_S" & num_S)
txt_B = Mid(Str(num_S), 2, 1) + txt_B
‘ Debug.Print ("txt_B=" & txt_B)
num_10 = num_10 \ num_Q
Wend
Таблица 4.1 Имена элементов на форме Системы счисления
Элемент |
Наименование |
Имя |
Форма |
Системы счисления |
UserForm1 |
Текстовое поле |
Из системы P |
txt_P |
Текстовое поле |
Число для перевода |
txt_A |
Текстовое поле |
В систему Q |
txt _Q |
Текстовое поле |
Результат |
txt_B |
Кнопка |
OK |
cmd_OK |
Кнопка |
Очистка |
cmd_Clear |
Кнопка |
Exit |
cmd_Exitr |
Двойным щелчком по кнопке Exit откройте окно кода и введите между строчками Private Sub cmd_Exit_Click() и End Sub следующий код:
UserForm1.Hide
Двойным щелчком по кнопке Очистка откройте окно кода и введите между строчками Private Sub cmd_Clear_Click() и End Sub следующий код:
txt_A = " "
txt_B = " "
txt_P = " "
txt_Q = " "
Запустите программу на выполнение, введите исходные данные в первые три текстовых поля и нажмите ОК. При отсутствии ошибок в программе в текстовом поле Результат будет выведен результат перевода введенного числа в системе с основанием P в систему с основанием Q.
Удалите символ комментария в строках процедуры cmd_Ok_Click, содержащих оператор Debug.Print для его исполнения в ходе выполнения программы. Этот оператор будет выводить текущие значения переменных num_10, num_S и текстового поля txt_B в окно Immediate.
Откройте окно Immediate (<Ctrl+G>) и проанализируйте значения, которые контролируемые величины принимали в ходе выполнения программы.
Оставьте окно Immediate видимым на экране и запустите программу командой Step Into в меню Debbug.
Введите исходные данные в текстовые поля формы и последовательным нажатием клавиши <F8> выполните программу в пошаговом режиме, наблюдая в окне Immediate за изменением значений выводимых оператором Debug.Print величин.
Задание 2 Работа с окном Locals
Откройте окно Locals командой Locals Window в меню Viev.
Запустите программу в пошаговом режиме и проследите значения переменных num_P, num_Q, num_10, num_S на каждом шаге выполнения программы в окне Locals. Вид окна Locals на первом шаге выполнения цикла For i = 1 …Next I показан рис. 4.2.
Просмотрите и попробуйте изменить в окне Locals свойства кнопок и текстовых полей, открыв контейнер специального объекта ME и контейнер соответствующего элемента управления. Вид окна Locals при открытых свойствах формы и кнопки cmd_Clear показан на рис. 4.3.
Сохраните книгу Debug1.xlsm и подготовьте отчет по лабораторной работе.
Задание для самостоятельной работы
Изучить приемы использования окна контролируемых выражений Watches при отладке программ в окне редактора VBA.
Рис. 4.2 Вид окна Locals на одном из шагов отладки программы
Рис. 4.3 Вид окна Locals при открытых свойствах формы и кнопки cmd_Clear
Методические материалы
Опыт показывает, что при написании программного кода могут быть допущены ошибки. Задача программиста - найти эти ошибки и устранить их до передачи программы конечному пользователю.
Все ошибки можно разделить на три большие группы - синтаксические, логические и ошибки времени выполнения.
Один из самых важных приемов в ходе отладки программы - переход в режим остановки выполнения программы, чтобы просмотреть значения переменных и вмешаться в ход выполнения программы вручную.
В режим паузы программу можно перевести:
сразу запустить программу в режиме пошагового выполнения (меню Debug>Step Into или клавиша <F8>). В этом случае программа будет переходить в режим паузы после выполнения каждого оператора;
установить в программе точку останова (breakpoint). Это можно сделать установкой указателя в нужной строке кода и выбором в меню Debug команды Toggle Breakpoint (<F9>). Второй вариант - просто щелкнуть мышкой по рамке слева от строки. Снятие точки останова - сделать все то же самое еще раз;
еще одна возможность приостановить выполнение программы - воспользоваться контролируемым выражением в окне Watches.
В любом случае выполнение будет приостановлено в выбранном месте программы и следующий оператор, который должен быть выполнен, будет выделен желтым цветом.
В режим паузы можно:
продолжить выполнение программы в пошаговом режиме - команда Debug->Step Into (<F8>);
если в строке программы происходит вызов какой-то процедуры, которая уже отлажена, можно без остановок перейти к следующему оператору - Debug>Step Over (<Shift>+<F8>);
довести выполнение начатой процедуры до конца - команда Debug>Step Out (Ctrl>+<Shift>+<F8>);
исполнить код не пошагово, а участками. Для этого надо щелкнуть правой кнопкой мыши по нужному участку кода и в контекстном меню выбрать Run to Cursor или воспользоваться той же командой в меню Debug (<Ctrl>+<F8>);
"перепрыгнуть" через какой-то участок кода, вызывающий ошибку - команда Debug>Set Next Statement (<Ctrl>+<F9>), а затем перетащить желтую отметку по левой границе вниз или вверх;
вернуться к месту остановки без долгих розысков - Show Next Statement;
продолжить выполнение после остановки - <F5> или воспользоваться командой Continue (она появится вместо команды Run) в меню Run;
прекратить выполнение программы командой Reset (<Alt>+<F4>).
В окне Immediate (вызов из меню View или <Ctrl>+<G>) можно просматривать или изменять значения переменных и свойств объектов.
Вывод в окно Immediate значений переменной a можно произвести, вписав в код программы строку Debug.Print a.
Изменение значений перемененных и свойств в окне Immediate производится точно так же, как в коде программы. В окне Immediate можно также вызывать процедуры и функции программы или методы объектов - точно так же, как в коде программы.
Чтобы не печатать в окне Immediate выражения и имена переменных, которые уже есть в коде, можно воспользоваться перетаскиванием участков кода в окно Immediate из окна редактора кода с нажатой клавишей <Ctrl> для копирования.
Окно Watches (Контролируемые выражения) предназначено для контроля за отдельными выражениями и значениями переменных.
Чтобы добавить контролируемое выражение в окно Watches, нужно щелкнуть по нему правой кнопкой мыши и выбрать из контекстного меню команду Add Watch.
Для редактирования контролируемого выражения в окне Watches используется команда Edit Watch, для удаления - Delete Watch, для добавления нового - Add Watch.
Вид окна Watches с введенными двумя контролируемыми выражениями приведен на рис. 4.4.
Ртс. 4.4 Вид окна Watches с добавленными контролируемыми выражениями
Лабораторная работа № 5
