- •Что такое 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 Case?
Ответ. Если эти условия однородные, то рациональнее применить оператор Select Case.
Вопрос. Если необходимы диалоговые окна для сохранения документов, организации процесса печати или другого типа, которые можно найти в программе Excel, то нужно ли создавать собственные диалоговые окна с помощью VBA?
Ответ. Нет, в своем приложении вы можете использовать все встроенные диалоговые окна Excel.
Практикум
С помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении.
Тесты
-
Какие два основных оператора используются для управления потоком выполнения приложений?
-
Истинно или ложно следующее утверждение: операторы If и Select Case чувствительны к регистру используемых значений?
-
Какой метод позволяет отображать встроенные диалоговые окна Excel?
-
Как преобразовать текстовую строку, чтобы все символы были прописными?
Упражнение
Создайте процедуру с именем ТестЩелчок. Эта процедура должна выводить на экран окно сообщения с текстом "Вы хотите продолжать?" и кнопками ОК и Отмена. Примените оператор If, чтобы узнать, на какой кнопке щелкнул пользователь, и выведите окно сообщения, показывающее выбор пользователя.
Создайте еще одну процедуру под названием Скидка. Процедура должна вывести на экран окно ввода, предлагающее ввести категорию скидки: 1, 2. 3 или 4. С помощью оператора Select Case организуйте вывод величины скидки в окне сообщения. Категории 1 соответствует скидка 5%, категории 2 - 10%, категории 3 - 15% и категории 4 - 20%.
1 Примечание для программистов и "блюстителей чистоты терминологии": применяемое автором выражение the flow of an application мы переводим как поток выполнения приложения и используем его как синоним выполнения одной из ветвей программы и не претендуем на стандартный термин поток (stream), применяемый в объектно-ориентированных языках программирования (таких как C++). - Прим. ред.
7-й час. Циклические вычисления
Допустим, в приложении необходимо выполнить одну и ту же последовательность действий 15 раз. Неужели для этого необходимо 15 раз повторять запись одной и той же последовательности операторов? Нет! Но чтобы избежать такой участи, надо организовать циклические вычисления. Циклические вычисления, или просто циклы, позволяют повторять выполнение одной группы операторов любое необходимое число раз. В этом часе вы изучите операторы Do… Loop и For… Next, используемые для организации циклических вычислений.
В этом часе будут рассмотрены следующие вопросы.
-
Выполнение оператора For.
-
Использование оператора Do... Loop.
Оператор For…Next
При создании программ вам рано или поздно придется повторно выполнять один и тот же набор операторов заданное число раз. Для организации повторных вычислений используется оператор For... Next, имеющий следующий синтаксис:
For счетчик = начало То конец [Step шаг]
[операторы]
[Exit For]
[операторы]
Next [счетчик]
Число выполнений этого оператора определяется параметрами начало и конец. Переменная счетчик при первом выполнении цикла имеет значение начало и каждый раз при выполнении оператора Next увеличивается на величину, заданную параметром шаг. Если этот необязательный параметр опущен, значение счетчик увеличивается на единицу. Параметр шаг может быть любым действительным числом, как целым, так и дробным, как положительным, так и отрицательным. (Отметим, что в зависимости от типа данных значений начало, конец и шаг объявляется соответствующий тип переменной счетчик.) Если параметр шаг положительный или опущен, то при превышении значения переменной счетчик значения параметра конец прекращается выполнение цикла. Необязательный оператор Exit For служит для экстренного прекращения цикла и обычно вкладывается в оператор If или Select Case.
Для экспериментов с оператором For... Next откройте новую рабочую книгу и сохраните ее под именем Час7. С помощью комбинации клавиш <Alt+F11> откройте редактор Visual Basic. Выполните следующие действия для создания простого примера с использованием оператора For... Next.
-
В окне проектов Project Explorer щелкните правой кнопкой мыши на элементе ЭтаКнига и выполните команду Insert > Module (Вставка > Модуль).
-
Вставьте новую процедуру и назовите ее Сигнал. Эта процедура должна исполнять звуковой сигнал компьютера заданное число раз.
-
Введите следующий код процедуры:
Dim iCounter As Integer
For iCounter = 1 To 15
Beep
Next
-
Нажмите клавишу <F5> для выполнения процедуры. Вы должны услышать звуковой сигнал.
В качестве эксперимента с оператором For измените число 15, например на 5 или 10000, чтобы увидеть (точнее, услышать) разницу. Если сравнить приведенный оператор For с его синтаксисом, то нетрудно заметить, что опущен элемент Step шаг. Рассмотрим еще один пример оператора For, где параметр шаг принимает отрицательное значение, осуществляя таким образом обратный счет значения переменной счетчик оператора For.
-
Вставьте новую процедуру и назовите ее ОбратныйСчет. Эта процедура будет выводить последовательность окон сообщения, показывающих значения переменной iCounter (счетчик) при отсутствии параметра шаг и при его отрицательном значении.
-
Введите код процедуры ОбратныйСчет:
Dim iCounter As Integer
For iCounter = 1 To 3
MsgBox “Счет вперед: “ & iCounter
Next
For iCounter = 3 To 1 Step -1
MsgBox “Обратный счет: “ & iCounter
Next
-
Выполните процедуру. Вы увидите первое окно сообщения (рис. 7.1), показывающее, что текущее значение переменной iCounter равно 1.
-
Щелкните в этом окне на кнопке ОК и затем таким же образом закройте следующие два окна сообщения. Далее должно появиться окно сообщения, показанное на рис. 7.2. В этом окне видно, что первоначальное значение счетчика равно 3.
-
Щелкните на кнопке ОК. В последующих двух окнах значение счетчика каждый раз будет уменьшаться на единицу.
-
Щелкайте на кнопке ОК в окнах сообщений, пока не завершится выполнение процедуры.
Рис. 7.1. Текст этого окна показывает, что первое значение счетчика равно 1
Рис. 7.2. В каждом последующем окне сообщения значение счетчика будет меньше, чем в предыдущем
Чтобы показать другие возможности применения оператора For, создадим еще одну процедуру, вычисляющую сложные проценты на вклады и конечную величину вклада при 10% годовых. Выполните следующее.
-
Вставьте новую процедуру и назовите ее Вклад.
-
Введите код процедуры:
Dim iNumberOfYears As Integer
Dim cSavings As Currency
Dim iCounter As Integer
cSavings = InputBox(“Введите сумму вклада:”)
iNumberOfYears = InputBox(“Введите число лет, на которые помещается вклад:”)
For iCounter = 1 То iNumberOfYears
cSavings = cSavings * 1.1
Next
MsgBox “3a “ & iNumberOfYears & “ лет вы получите по вкладу “ & _
Format(cSavings,”0.00”) & “ рублей”
-
Выполните процедуру Вклад.
-
Введите число 1000 в качестве суммы вклада.
-
Введите число 10 как число лет, на которые помещается вклад. Следующее окно покажет общую сумму вклада за 10 лет. Вы не ожидали, что эта сумма составит 2593,74 рубля?
-
Чтобы закрыть соблазняющее вас окно, щелкните на кнопке ОК.
В этой процедуре для вычисления конечного значения (переменная cSavings) используется переменная iNumberOfYears, задающая, сколько раз будет выполняться цикл. Вы, наверное, заметили новый оператор Format (cSavings, “0.00”), который преобразует значение переменной cSavings в формат с двумя десятичными разрядами.