- •Что такое Visual Basic for Applications
- •Автоматизация среды Excel
- •Запись простого макроса
- •Выполнение макросов
- •Просмотр кода макроса
- •Редактирование кода макроса
- •Ограниченность макросов
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Назначение макросам комбинаций клавиш
- •Где хранить макросы
- •Создание личной книги макросов
- •Сохранение макросов в личной книге макросов
- •Выполнение макросов из личной книги макросов
- •Редактирование макросов в личной книге макросов
- •Удаление макросов из личной книги макросов
- •Назначение макросов командным кнопкам
- •Назначение макроса графическим изображениям
- •Назначение макросов кнопкам панелей инструментов
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Введение в процесс разработки приложений
- •Кто будет использовать приложение
- •Откуда будут поступать данные для приложения
- •Где и как будут храниться данные, полученные с помощью приложения
- •Как данные будут обрабатываться приложением
- •Вид выходных данных
- •Типы элементов управления
- •Вставка элементов управления в рабочий лист
- •Форматирование элементов управления
- •Имена элементов управления
- •Экранные формы
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Модуль: дом для кода vba
- •Обзор процедур
- •Создание процедур
- •Выполнение процедуры
- •Сохранение изменений в модуле
- •Переменные
- •Типы данных
- •Объявление переменных
- •Соглашения об именах переменных
- •Массивы
- •Присвоение значений переменным
- •Использование констант
- •Область видимости переменных и констант
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Функция MsgBox
- •Функция InputBox
- •Метод InputBox
- •Именование аргументов
- •Объединение текстовых строк
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Управление выполнением приложения
- •Оператор If
- •Оператор Select Case
- •Использование встроенных диалоговых окон Excel
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Оператор For…Next
- •Оператор Do... Loop
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Что такое объект
- •Объекты, свойства и методы
- •Объектная модель Excel
- •Пять наиболее часто используемых объектов
- •Как понимать иерархию объектной модели
- •Ссылка на объекты в коде vba
- •Работа с объектами
- •Задание свойств объекта
- •Использование методов
- •Справочная информация о свойствах и методах
- •Переменные-объекты
- •1: Sub ПримерПеремОбъекта()
- •Коллекции
- •Метод Add
- •Свойство Count
- •1: Sub КоличРабЛистов()
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Объект Application
- •Использование встроенных функций Excel
- •Свойства и методы объекта Application
- •Объект Workbook
- •Объект Worksheet
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Описание объекта Range
- •Свойства объекта Range
- •Методы объекта Range
- •Использование оператора With
- •Оператор For Each
- •Использование объекта Range
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Панели инструментов
- •Просмотр кода
- •Использование справочной системы
- •Просмотр объектов
- •Параметры редактора Visual Basic
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Тестирование и отладка как этап разработки приложений
- •Отладка
- •Режим останова
- •Использование окна Immediate
- •Просмотр значений в окне Immediate
- •Пошаговое выполнение программ
- •Наблюдение за переменными
- •Исправление ошибок
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Понятие об обработке ошибок
- •Перехват ошибок
- •Написание процедуры обработки ошибся
- •Выход из обработчика ошибок
- •Пример обработчика ошибок
- •Централизованный обработчик ошибок
- •Вопрос и ответы
- •Практикум
- •Упражнение
- •Вставка экранных форм в приложения
- •Свойства экранной формы
- •Выполнение экранной формы
- •Вставка элементов управления в экранную форму
- •Свойства элементов управления
- •Свойства командных кнопок
- •Свойства переключателей
- •Блокировка элементов управления
- •Экранные подсказки к элементам управления
- •Задание порядка обхода элементов формы
- •Назначение быстрых клавиш элементам формы
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Инициализация значений экранной формы
- •Вызов экранной формы
- •Управление поведением формы
- •Проверка вводимых данных
- •Сохранение данных, введенных в форму
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Настройка панелей инструментов
- •Создание панелей инструментов
- •Процедуры, управляющие панелями инструментов
- •Создание панели инструментов
- •Удаление панели инструментов
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Способы изменения меню
- •Программная работа с меню
- •Добавление пунктов и команд меню
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Создание диаграмм
- •Запись макроса построения диаграмм
- •Код макроса
- •Изменение кода макроса
- •Усовершенствованная процедура построения диаграмм
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Работа со сводной таблицей
- •Основы сводных таблиц
- •Запись макроса для создания сводной таблицы
- •Исследование кода макроса
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Базы данных, доступные из Excel
- •Средства доступа к внешним данным
- •Использование ms Query
- •Код записанного макроса
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Что такое ado
- •Объекты доступа к базам данных
- •Использование ado
- •Создание ссылки на библиотеку ado
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Вставка полей в экранную форму
- •Перемещение по записям
- •Редактирование данных
- •Добавление средства поиска
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Что такое автоматизация
- •Основы автоматизации
- •Ссылка на библиотеку объектов приложения-сервера
- •Просмотр библиотеки объектов
- •Создание экземпляра приложения-сервера
- •Использование объектов Microsoft Word
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Автоматическое выполнение процедур
- •Процедуры, выполняемые при наступлении событий
- •Создание надстроек Excel
- •Упражнение
- •Приложение. Ответы Ответы к 1-му часу Тесты
- •Ответы ко 2-му часу Тесты
- •Ответы к 3-му часу Тесты
- •Ответы к 4-му часу Тесты
- •Упражнение
- •Ответы к 5-му часу Тесты
- •Упражнение
- •Ответы к 6-му часу Тесты
- •Упражнение
- •Ответы к 7-му часу Тесты
- •Упражнение
- •Ответы к 8-му часу Тесты
- •Упражнение
- •Ответы к 9-му часу Тесты
- •Упражнение
- •Ответы к 10-му часу Тесты
- •Упражнение
- •Ответы к 11-му часу Тесты
- •Упражнение
- •Ответы к 12-му часу Тесты
- •Упражнение
- •Ответы к 13-му часу Тесты
- •Упражнение
- •Ответы к 14-му часу Тесты
- •Ответы к 15-му часу Тесты
- •Упражнение
- •Ответы к 16-му часу Тесты
- •Упражнение
- •Ответы к 17-му часу Тесты
- •Упражнение
- •Ответы к 18-му часу Тесты
- •Упражнение
- •Ответы к 19-му часу Тесты
- •Упражнение
- •Ответы к 20-му часу Тесты
- •Упражнение
- •Ответы к 21-му часу Тесты
- •Упражнение
- •Ответы к 22-му часу Тесты
- •Упражнение
- •Ответы к 23-му часу Тесты
- •Упражнение
- •Ответы к 24-му часу Тесты
- •Упражнение
Пошаговое выполнение программ
В большинстве случаев при отладке проверяется логика выполнения процедуры, поэтому необходимо отслеживать порядок исполнения строк кода. Это особенно необходимо при проверке работы операторов If и Select. Для этого применяется особый режим выполнения программ - пошаговое выполнение, когда программа останавливается после исполнения каждой строки кода.
Существует два режима пошагового выполнения: Step Into (Тотальное пошаговое выполнение) и Step Over (Пошаговое выполнение с перешагиванием через процедуры). Оба режима позволяют пошагово выполнять весь код процедуры и отслеживать значения переменных и свойств.
Есть и различия между этими режимами. Если отлаживается процедура, которая вызывает другие процедуры, и вы не хотите их выполнять в пошаговом режиме, то используется режим Step Over. В этом режиме вызываемые процедуры выполняются в обычном режиме, а не пошагово. Если вы хотите просмотреть в пошаговом режиме и вызываемые процедуры, то применяется режим Step Into.
Обычно в пошаговом режиме выполняется не вся процедура. Чаще точка останова устанавливается в том месте кода процедуры, которое вызывает сомнение. Затем процедура выполняется, доходит до точки останова, останавливается, а далее применяется пошаговый режим. Покажем, как выполняется пошаговый режим на примере нашей процедуры Ошибка.
-
Удалите оператор Debug.Print из процедуры.
-
Установите точку останова в строке после оператора InputBox. Нажмите <F5>, чтобы начать выполнение процедуры.
-
Щелкните на кнопке Отмена в окне ввода. Вы вернетесь в окно редактора Visual Basic, так как процедура достигла точки останова. Следующий выполняемый оператор - оператор If. Надо проследить, как выполняется этот оператор. По логике, сейчас условное выражение в операторе If имеет значение True (Истина), и должен выполняться оператор вывода окна сообщения (о том, что процедура завершена).
-
Нажмите клавишу <F8>, чтобы перейти в пошаговый режим и выполнить следующий оператор. Заметьте, что после проверки условия оператора If процедура не стала выполнять оператор вывода окна сообщения, а перешла к пункту Else (рис. 12.8). Вот и найден оператор, который работает не так, как мы рассчитывали!
Рис. 12.8. В пошаговом режиме на выполняемый оператор указывает стрелка на индикаторной панели
-
Нажмите клавишу <F5>, чтобы продолжить выполнение процедуры в обычном режиме.
Наблюдение за переменными
Visual Basic предлагает еще один способ отслеживания значений переменных и свойств, который называется наблюдением за выражениями. Наблюдаемые выражения (watch expressions) - это любые определенные пользователем выражения Visual Basic, позволяющие просматривать значения многих переменных или выражений. Конечно, наблюдаемые выражения должны быть корректными с точки зрения языка VBA.
Существует три режима наблюдения за выражениями, которые задаются выбором соответствующих переключателей в диалоговом окне Add Watch (Добавление наблюдаемых выражений) (рис. 12.9).
-
Режим Watch Expression (Наблюдаемое выражение) - отслеживаются значения заданных выражений без всякого влияния на ход выполнения приложения.
-
Режим Break When Value Is True (Останов, если значение истинно) - выполнение процедуры приостанавливается, если наблюдаемое выражение принимает значение True.
-
Режим Break When Value Changes (Останов, если значение изменилось) - выполнение процедуры приостанавливается, если наблюдаемое выражение изменило свое значение.
Используем в качестве наблюдаемого выражения переменную response.
-
Удалите из процедуры все точки останова.
-
Выделите имя переменной response в процедуре Ошибка.
-
Выполните команду Debug > Add Watch (Отладка > Добавить наблюдаемое выражение), чтобы открыть диалоговое окно Add Watch (рис. 12.9).
Рис. 12.9. В этом диалоговом окне задаются режимы наблюдения за выражениями
-
Поскольку в процедуре выделено слово response, то оно автоматически появится в поле Expression (Выражение) диалогового окна Add Watch. He изменяйте установки в секции Context (Состояние), где задано, из какой процедуры какого модуля наблюдается переменная (другими словами, здесь задается область видимости наблюдаемого выражения).
-
Установите переключатель Break When Value Changes.
-
Щелкните на кнопке ОК.
Если хотите быстро создать наблюдаемое выражение, выделите нужное выражение (например, имя переменной) в окне кода и выполните команду Debug > Quick Watch (Отладка > Быстрое наблюдение) либо нажмите комбинацию клавиш <Shift+F9>. Наблюдение в этом случае будет проводиться в режиме Watch Expression, т.е. без вмешательства в ход выполнения процедуры.
-
Нажмите <F5> для начала выполнения процедуры.
-
Щелкните на кнопке Отмена в окне ввода. Процедура перейдет в режим останова, так как переменная response изменила свое значение. В редакторе Visual Basic появится окно Watches (Наблюдение), показывающее значение переменной response (рис. 12.10).
-
Нажмите <F5> для продолжения выполнения процедуры.
Рис. 12.10. Окно Watches показывает значения всех наблюдаемых выражений
Теперь, когда мы разобрались с ошибками, можно удалить наблюдаемые выражения. Для этого сделайте следующее.
-
Выполните команду Debug > Edit Watch (Отладка > Редактирование наблюдаемых выражений). Откроется диалоговое окно Edit Watch (рис. 12.11).
-
Так как у нас только одна наблюдаемая переменная, то в поле Expression будет выделено слово response. Щелкните на кнопке Delete (Удалить), и наблюдение за переменной будет отменено.
Рис. 12.11. Это окно используется для редактирования и удаления наблюдаемых выражений