- •Что такое 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-му часу Тесты
- •Упражнение
Отладка
Процесс локализации и исправления ошибок называется отладкой (debugging). VBA предлагает богатый набор средств отладки. К ним относятся:
-
окно быстрого выполнения Immediate,
-
наблюдение за значениями переменных,
-
точки останова,
-
пошаговое выполнение кода.
Чтобы исследовать процесс отладки на практике, нам необходим какой-нибудь код. Создадим процедуру, содержащую ошибку.
-
Закройте все открытые книги.
-
Откройте новую рабочую книгу.
-
Нажмите комбинацию клавиш <Alt+F11> для открытия редактора Visual Basic.
-
Вставьте модуль в текущую рабочую книгу.
-
Создайте новую процедуру и назовите ее Ошибка.
-
Введите код этой процедуры
Dim response
response = Application.InputBox("Введите ваше имя")
If response = "" Then
MsgBox "Процедура завершена"
Exit Sub
Else
MsgBox "Ваше имя - " & response
End If
-
Выполните процедуру. В окне ввода введите ваше имя и нажмите клавишу <Enter>. Появится окно сообщения, содержащее ваше имя. Итак, пока процедура работает как надо.
-
Щелкните на кнопке ОК для закрытия окна сообщения.
-
Нажмите <F5> для повторного выполнения процедуры.
-
В окне ввода щелкните на кнопке Отмена. Что получилось? Получили окно сообщение, что ваше имя False! Но должны были получить окно сообщения, что процедура завершена!
-
Щелкните на кнопке ОК для удаления окна сообщения.
Итак, процедура работает неправильно. Она определенно содержит ошибку, но как найти эту ошибку? На примере этой процедуры мы рассмотрим различные методы отладки.
Режим останова
Чтобы отладить процедуру "вручную", даже если у вас есть определенные соображения о том, "где зарыта собака", необходимо просмотреть каждую строку кода. VBA, чтобы локализовать ошибку, предлагает несколько способов остановить выполнение процедуры в определенных точках кода. Это называется перевести процедуру в режим останова. Режим останова временно приостанавливает выполнение процедуры. В этом режиме можно проверить значения переменных и свойств, применить другие средства отладки. Режим останова позволяет выполнить следующие действия.
-
Редактировать код процедуры.
-
Просматривать значения переменных, свойств и выражений.
-
Изменять значения переменных и свойств.
-
Выполнять операторы Visual Basic в окне быстрого выполнения Immediate.
В нашей процедуре, как вы догадываетесь, ошибка как-то связана с оператором InputBox. Строка, содержащая этот оператор, хороший кандидат для того, чтобы после ее выполнения остановить процедуру. Место в коде программы, где остановится выполнение процедуры, называется точкой останова (breakpoint). Есть несколько способов пометить строку кода точкой останова.
-
Выберите строку кода и выполните команду Debug > Toggle Breakpoint (Отладка > Установка точки останова).
-
Выберите строку кода и нажмите клавишу <F9>.
-
Выберите строку кода и щелкните напротив этой строки на серой правой границе окна кода. (Эта серая граница называется индикаторной панелью окна кода.)
-
Если на экране отображается панель инструментов Edit (Редактирование) или панель Debug (Отладка), то выберите строку кода и щелкните на кнопке Toggle Breakpoint (Переключатель точки останова) одной или другой панели инструментов.
Точку останова можно установить только на строке, содержащей исполняемый код. В строке, содержащей неисполняемый код, установить точку останова нельзя. К неисполняемому коду относятся комментарии, операторы объявления переменных и констант, пустые строки. Когда на строке кода установлена точка останова, то она меняет цвет (в соответствии с текущими установками среды редактора Visual Basic), и на индикаторной панели напротив этой строки появляется большая точка (рис. 12.2).

Рис. 12.2. В окне кода точку останова найти нетрудно
Удалить точки останова можно точно теми же описанными выше способами, что и установить. Если в коде установлены несколько точек останова, чтобы удалить их все за один раз, выполните команду Debug > Clear All Breakpoint (Отладка > Удалить все точки останова) или нажмите комбинацию клавиш <Ctrl+Shift+F9>.
В нашей экспериментальной процедуре Ошибка точку останова надо установить после строки, содержащей оператор InputBox. Для этого выполните следующие действия.
-
Поместите текстовый курсор где-нибудь в строке, расположенной ниже строки, содержащей оператор InputBox.
-
Нажмите клавишу <F9>. Вы увидите, что строка изменила цвет и рядом на индикаторной панели появилась точка.
Конечно, можно установить больше одной точки останова - столько, сколько считаете нужным. Теперь выполним процедуру Ошибка и посмотрим, какой эффект произведет точка останова.
-
Выполните процедуру Ошибка.
-
В окно ввода введите свое имя и нажмите клавишу <Enter>. Появится окно редактора Visual Basic, где будет выделена строка, на которой установлена точка останова (рис. 12.3).

Рис. 12.3. Когда при выполнении процедура достигает точки останова, открывается окно редактора Visual Basic

Рис. 12.4. Быстрый просмотр значений переменных
Теперь процедура находится в режиме останова, и есть возможность узнать значение, которое в данный момент приняла переменная response. Самый простой путь сделать это - поместить указатель мыши на имя переменной. Появится маленькое окошко, показывающее текущее значение переменной (рис. 12.4). Таким же образом можно просмотреть значения других переменных и свойств, которые вас интересуют. Просмотр значений переменных - это самое наименьшее, что вы можете сделать для поиска и устранения ошибок.
Конечно, существуют и другие способы просмотра значений переменных и свойств. В следующем разделе мы познакомимся с окном Immediate, которое позволяет не только просматривать значения переменных и свойств, но и изменять их.
