- •2.1. Алфавит и словарь языка
- •2.2. Переменные
- •2.3. Константы
- •2.4. Строковые переменные
- •2.5. Массивы
- •2.6. Пользовательские типы данных
- •2.7. Операции VBA
- •2.8. Объектная модель Excel
- •2.8.1. Свойства и методы объектов
- •2.8.2. Отображение объектной модели Excel
- •2.8.2.1. Иерархия объектной модели
- •2.8.2.2. Ссылка на объекты в коде VBA
- •2.8.3. Работа с объектами
- •2.8.3.1. Задание свойств объекта
- •2.8.3.2. Использование методов объекта
- •2.8.3.3. Переменные-объекты
- •2.8.3.4. Коллекции
- •2.8.3.5. Метод Add
- •2.8.3.6. Свойство Count
- •2.8.4. Свойства и методы основных объектов Excel
- •2.8.4.1. Объект Application
- •2.8.4.2. Объект Worksheet
- •2.8.4.3. Объект Range
- •2.8.5. Просмотр объектов
- •2.8.6. Использование справочной системы
- •2.8.6.1. Использование функциональной клавиши F1
- •2.8.6.2. Использование помощника
- •2.9. Ввод и вывод данных
- •2.9.3. Метод InputBox
- •2.9.4. Объединение текстовых строк
- •2.10. Концепция событий Excel
- •2.10.1. Типы событий Excel
- •2.10.2. События объекта Workbook
- •2.10.3. События объекта Worksheet
- •2.10.4. События объекта Application
- •2.10.5. События объекта UserForm
- •2.10.6. События, не связанные с конкретными объектами
- •2.10.6.1. Метод OnKey
- •2.10.6.2. Событие OnTime
- •2.11. Формы пользователя
- •2.11.1. Свойства, методы и события экранных форм
- •2.11.1.1. Некоторые свойства форм
- •2.11.1.2. Некоторые методы форм
- •2.11.1.3. Некоторые события форм
- •2.11.2. Элементы управления
- •2.11.2.1. Элемент управления Label (Надпись)
- •2.11.2.1.1. Окно свойств формы
- •2.11.2.2. Элемент управления CommandButton (Кнопка)
- •2.11.2.3. Элемент управления TextBox (Текстовое поле)
- •2.11.2.4. Элемент управления ComboBox (комбинированный список)
- •2.11.2.5. Элемент управления ListBox (список)
- •2.11.2.6. Элемент управления CheckBox (Флажок)
- •2.11.2.7. Элемент управления ToggleButton (Выключатель)
- •2.11.2.8. Элемент управления OptionButton (Переключатель)
- •2.11.2.9. Элемент управления Image (Рисунок)
- •2.11.2.12. Элемент управления RefEdit (Поле со свёртыванием)
- •2.11.2.13. Элементы управления на рабочем листе
- •2.12. Инструкции VBA
- •2.12.1. Оператор присваивания
- •2.12.2. Инструкция Set
- •2.12.3. Циклы
- •2.12.3.1. Инструкция For… Next
- •2.12.3.2. Инструкция While…Wend
- •2.12.3.3. Инструкция Do... Loop
- •2.12.3.4. Инструкция For Each…Next
- •2.12.4. Инструкции перехода
- •2.12.4.1. Инструкция условного перехода If…Then…Else
- •2.12.4.2. Инструкция Select…Case
- •2.12.4.3. Инструкция безусловного перехода GoTo
- •2.12.4.4. Инструкции перехода к обработчику ошибок On Error
- •2.12.4.5. Инструкции прерывания выполнения блока Exit
- •2.13. Функции VBA
- •2.13.1. Встроенные функции
- •2.13.1.1. Математические функции
- •2.13.1.2. Функции преобразования данных
- •2.13.1.3. Функции даты и времени
- •2.13.1.4. Строковые функции
- •2.13.1.5. Примеры использования функций VBA
- •2.13.1.5.1. Удаление ненужных символов
- •2.13.1.5.2. Определение длины строки
- •2.13.1.5.3. Сравнение и поиск строк
- •2.13.1.5.4. Выделение части строки
- •2.13.1.5.5. Форматирование значений данных
- •2.13.2. Функции, определённые пользователем
- •2.14. Файлы VBA
- •2.14.1. Типы файлов в VBA
- •2.14.2. Открытие и закрытие файла
- •2.14.3. Ввод данных в файл последовательного доступа
- •2.14.4. Вывод данных из файла последовательного доступа
- •2.14.5. Работа с файлом произвольного доступа
- •2.15. Создание процедуры
- •2.16. Выполнение процедуры
- •2.17. Сохранение процедуры
- •2.18. Запись последовательности действий пользователя
- •2.19. Просмотр кода макроса
- •3.1. Тестирование и отладка как этап разработки приложений
- •3.1.1. Отладка
- •3.1.1.1. Режим останова
- •3.1.1.2. Использование окна Immediate
- •3.1.1.2.1. Просмотр значений в окне Immediate
- •3.1.1.3. Пошаговое выполнение программ
- •3.1.2. Исправление ошибок
- •Библиографический список
- •Оглавление
123
3.1. Тестирование и отладка как этап разработки приложений
Тестирование – это процесс выполнения процедуры и исследование всех аспектов ее работы. Цель тестирования – проверить правильность результатов выполнения процедуры и ее реакцию на разнообразные действия пользователя. Если во время работы процедуры получены неверные результаты вычислений, непредвиденная реакция на те или иные действия пользователя, либо вообще произошла остановка выполнения, то это говорит о том, что код процедуры имеет ошибки.
Необходимо вводить комментарии в коде процедур. Комментарии позволяют разобраться в назначении того или иного фрагмента кода и тем самым облегчить поиск ошибок. Кроме того, без понятных комментариев трудно поддерживать приложение в будущем.
Ошибки в коде процедур подразделяются на три типа:
синтаксические ошибки,
ошибками выполнения,
логические ошибки.
Синтаксические ошибки. Это ошибки, связанные с неправильным форматом кода. По умолчанию редактор Visual Basic отслеживает синтаксические ошибки в коде процедур после нажатия клавиши Enter. Это полезное средство, но при желании его можно отключить (или восстановить), удалив (или установив) флажок опции Auto Syntax Check (Автоматическая проверка синтаксиса) на вкладке Editor (Редактор) диалогового окна Options (Параметры).
Ошибки выполнения (runtime error). Это такие ошибки, которые приводят к остановке выполнения приложения. Например, введено имя объекта с ошибкой. VBA может обнаружить такую ошибку только во время выполнения программы. Ошибки выполнения также могут быть реакцией на действия пользователя, которые не предусмотрены в программе, например, на ввод некорректного значения аргумента функции, которая вы создана.
Логические ошибки (logic error). VBA не может отследить такой тип ошибок, так как в этом случае обычно нет грамматических и синтаксических ошибок в написании операторов, т.е. нарушена логика выполнения операторов.
3.1.1.Отладка
Процесс локализации и исправления ошибок называется отладкой (debugging). Для этих целей можно использовать функцию MsgBox и специальные средства отладки.
Функцию MsgBox можно использовать для вывода значений переменных в любом месте процедуры, чтобы контролировать изменение переменных в процессе выполнения процедуры. В процессе отладки можно последовательно выявлять ошибки, и чтобы ускорить процесс отладки можно “нейтрализовать” выполнение функции MsgBox, помещая перед ней символ “одиночная кавычка” ( ' ), превращая тем самым строку кода в при-
124
мечание. После отладки программы строки с отладочными строками можно удалить.
Кспециальным средствам отладки VBA относятся:
окно быстрого выполнения Immediate,
наблюдение за значениями переменных,
точки останова,
пошаговое выполнение кода.
Чтобы исследовать процесс отладки на практике, необходимо создать процедуру, содержащую ошибку. Для этого нужно выполнить следующие действия.
1.Закрыть все открытые книги.
2.Открыть новую рабочую книгу.
3.Нажать комбинацию клавиш <Alt+F11> для открытия редактора
Visual Basic.
4.Вставить модуль в текущую рабочую книгу.
5.Создать новую процедуру и назвать её, например, Ошибка.
6.Ввести код этой процедуры
Sub Ошибка() Dim response
response = Application.InputBox("Введите ваше имя") If response = "" Then
MsgBox "Процедура завершена" Exit Sub
Else
MsgBox "Ваше имя - " & response End If
End sub
7.Выполнить процедуру. В окне ввода ввести ваше имя и нажать клавишу Enter. Появится окно сообщения, содержащее введённое имя. Итак, пока процедура работает как надо.
1.Щёлкнуть на кнопке ОК для закрытия окна сообщения.
8.Нажать F5 для повторного выполнения процедуры.
9.В окне ввода щёлкнуть на кнопке Отмена. на экран будет выведено следующее диалоговое окно:
В диалоговом окне получено сообщение Ваше имя False! Но должны были получить Процедура завершена!
125
10. Щёлкнуть на кнопке ОК для удаления окна сообщения.
Итак, процедура работает неправильно. Она определенно содержит ошибку, но как найти эту ошибку? На примере этой процедуры рассмотрим различные методы отладки.
3.1.1.1. Режим останова
Чтобы отладить процедуру "вручную", необходимо просмотреть каждую строку кода. В VBA для локализации ошибки имеется несколько способов остановить выполнение процедуры в определенных точках кода.
Это называется перевести процедуру в режим останова. Режим останова временно приостанавливает выполнение процедуры. В этом режиме можно проверить значения переменных и свойств, применить другие средства отладки. Режим останова позволяет выполнить следующие действия.
Редактировать код процедуры.
Просматривать значения переменных, свойств и выражений.
Изменять значения переменных и свойств.
Выполнять операторы Visual Basic в окне быстрого выполнения
Immediate.
Врассматриваемой процедуре ошибка как-то связана с оператором InputBox. Поэтому после его выполнения следует остановить процедуру. Место в коде программы, где остановится выполнение процедуры, называется точкой останова (breakpoint). Есть несколько способов пометить строку кода точкой останова.
Выбрать строку кода и выполнить команду Debug > Toggle Breakpoint (Отладка > Установка точки останова).
Выбрать строку кода и нажать клавишу F9.
Точку останова можно установить только на строке, содержащей исполняемый код. В строке, содержащей неисполняемый код, установить точку останова нельзя. К неисполняемому коду относятся комментарии, операторы объявления переменных и констант, пустые строки. Когда на строке кода установлена точка останова, то она меняет цвет (в соответствии с текущими установками среды редактора VBA).
Удалить точки останова можно точно теми же описанными выше способами, что и установить. Если в коде установлены несколько точек останова, чтобы удалить их все за один раз, нужно выполнить команду Debug > Clear All Breakpoint (Отладка > Удалить все точки останова) или нажать комбинацию клавиш <Ctrl+Shift+F9>.
В процедуре Ошибка точку останова надо установить после строки, содержащей оператор InputBox. Для этого нужно выполнить следующие действия.
Поместить текстовый курсор где-нибудь в строке, расположенной ниже строки, содержащей оператор InputBox.
Нажать клавишу F9. Строка изменит цвет.
Можно установить больше одной точки останова.