- •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. Исправление ошибок
- •Библиографический список
- •Оглавление
126
Теперь необходимо выполнить процедуру Ошибка и посмотреть, какой эффект произведет точка останова.
1.Выполнить процедуру Ошибка.
2.В окно ввода ввести свое имя и нажать клавишу Enter. Появится окно редактора Visual Basic, где будет выделена строка, на которой установлена точка останова:
Теперь процедура находится в режиме останова, и есть возможность узнать значение, которое в данный момент приняла переменная response. Самый простой путь сделать это – поместить указатель мыши на имя переменной. Появится маленькое окошко, показывающее текущее значение переменной: response = “МАРИЯ”
Таким же образом можно просмотреть значения других переменных и свойств. Просмотр значений переменных – это самое наименьшее, что можно сделать для поиска и устранения ошибок.
Имеются и другие способы просмотра значений переменных и свойств, например, использование окна Immediate, которое позволяет не только просматривать значения переменных и свойств, но и изменять их.
3.1.1.2. Использование окна Immediate
Окно быстрого выполнения Immediate предоставляет доступ ко всем переменным и свойствам, используемым в процедуре. С помощью этого окна можно решать различные задачи, включая следующие.
Задать значения переменных и свойств.
127
Изменить значения переменных и свойств.
Увидеть результат отладочных действий.
Вызвать на исполнение любую процедуру.
Ввести новые операторы и сразу их выполнить. Это позволяет экспериментировать с различными вариантами кода процедуры.
Копировать и вставлять фрагменты кода процедуры в окно Immediate и сразу их выполнять.
3.1.1.2.1. Просмотр значений в окне Immediate
Как было показано ранее, можно просмотреть текущие значения переменных в режиме останова, поместив указатель мыши на имя переменной. Другой путь просмотра значений переменных и свойств – окно Immediate. Для этого также предусмотрено несколько способов. Во-первых, в окне Immediate можно ввести слово Print (Печать) или знак вопроса (?), а затем – имя переменной или свойства. Во-вторых, можно ввести непосредственно в процедуру оператор Debug.Print, который будет показывать в окне Immediate значения заданных переменных. Ниже рассмотрены оба эти способа.
Сначала испробуем способ со словом Print (или что то же самое, со знаком вопроса).
1.Если процедура Ошибка все еще находится в режиме останова, нужно привести её в исходное состояние, выполнив команду Run > Reset (Выполнить > Восстановить) или щелкнув на кнопке Reset
стандартной панели инструментов.
2.Начать выполнение процедуры, нажав клавишу F5. В окне ввода щёлкнуть на кнопке Отмена. Поскольку при выполнении процедуры достигнута точка останова, то откроется редактор VBA.
3.Если в окне редактора отсутствует окно Immediate, нажать комбинацию клавиш <Ctrl+G>. Откроется окно Immediate. Его также можно открыть с помощью команды View > Immediate Window (Вид > Окно
Immediate).
4.Чтобы узнать значение переменной response, щёлкнуть в окне
Immediate и ввести ?response (между знаком ? и словом response
не должно быть пробела!).
5.Нажать клавишу Enter. В следующей строке окна Immediate появится значение переменной response. В данном случае эта переменная имеет значение False:
Выше указано, что в окне Immediate можно не только просмотреть значения переменных, но и задавать эти значения. Это позволяет проверить логику выполнения программы. В нашей процедуре оператор If дол-
128
жен вывести соответствующее окно сообщения, если переменная response имеет значение пустой строки. Для проверки этого необходимо:
1.В окне Immediate ввести строчку response = ""
2.Нажать клавишу Enter. Теперь переменная response имеет значение пустой строки.
3.Нажать клавишу F5, чтобы продолжить выполнение процедуры. На экран будет выведено диалоговое окно:
4.Щёлкнуть на кнопке ОК в окне сообщения для завершения процедуры.
Впредыдущем примере для получения доступа к окну Immediate была установлена точка останова, которая переводила процедуру в режим останова. Но если по каким-либо причинам нет необходимости останавливать выполнение процедуры, но нужно знать значения переменных или свойств во время выполнения, то необходимо использовать оператор Debug.Print. Этот оператор вставляется непосредственно в код процедуры и выводит соответствующий текст в окно Immediate во время ее выполнения. Чтобы воспользоваться этим оператором в процедуре Ошибка, нужно проделать следующее.
1.Выполнить команду Debug > Clear All Breakpoints для удаления всех точек останова из процедуры.
2.Удалить текст из окна Immediate.
3.Измените код процедуры следующим образом (изменения выделены полужирным шрифтом):
Public Sub Ошибка_2() Dim response
response = Application.InputBox("Введите свое имя")
Debug.Print "Значение response: " & response
If response = " " Then
MsgBox "Процедура завершена" Exit Sub
Else
MsgBox "Ваше имя - " & response. End If
End Sub
4.Нажав клавишу F5, начать выполнение процедуры.
5.Ввести имя в окне ввода и нажать клавишу Enter.
6.Щёлкнуть на кнопке OK для закрытия окна сообщения.