- •Что такое 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-му часу Тесты
- •Упражнение
Обзор процедур
До сих пор мы использовали один термин, не объясняя его. Этот термин - процедура. Восполняем этот пробел "расплывчатым" определением: процедура - любая совокупность кода VBA, рассматриваемая как единое целое. Как правило, процедура состоит из операторов, выполняющих какую-либо задачу или вычисляющих значение. Каждая процедура идентифицируется своим уникальным именем.
Существуют два типа процедур: процедура-подпрограмма и процедура-функция (будем их называть просто подпрограммой и функцией). Подпрограмма выполняет один или несколько операторов и не возвращает значения. Примером подпрограммы является код макроса - макрос может записать только подпрограмму, но не функцию. В листинге 4.1 показан пример подпрограммы.
Листинг 4.1. Пример подпрограммы
1: Sub cmdБольшойШрифт_Click ()
2: With Selection.Font
3: .Name = "Arial"
4: .FontStyle = "обычный"
5: .Size = 16
6: End With
7: End Sub
Часто выполнение процедуры является реакцией на какое-либо событие (event). В этом случае говорят, что процедура обрабатывает событие. Чтобы узнать, что это за событие, надо посмотреть на имя процедуры. Имя процедуры состоит из названия объекта, cmdБольшойШрифт, и события, Click (щелчок), которое отделяется от названия объекта символом подчеркивания. Для тех, кто еще не догадался, сообщаю, в данном случае процедура выполняется в ответ на щелчок на командной кнопке, которая имеет имя cmdБольшойШрифт.
Процедура-функция (напомню, что мы договорились называть ее просто функцией) в отличие от подпрограммы возвращает какое-либо значение. Это значение часто является результатом вычислений или результатом тестирования чего-либо (в этом случае возвращается логическое значение ИСТИНА или ЛОЖЬ). Как уже упоминалось ранее, вы можете использовать VBA для создания собственных функций. Затем эти функции можно применить при создании формул в ячейках рабочего листа. Листинг 4.2. содержит пример простой функции, вычисляющей торговую наценку в размере 10% от цены.
Листинг 4.2. Пример простой функции
1: Public Function Наценка(Цена)
2: Наценка = Цена * 0.1
3: End Function
Отметим, что функция использует аргумент Цена, который определяет величину наценки. (Аргументы могут иметь как функции, так и подпрограммы.) Аргумент Цена может быть числом или ссылкой на ячейку рабочего листа. Величина наценки является тем значением, которое возвращает функция. Применение этой функции показано на рис. 4.1.
Рис. 4.1. Использование созданной функции Наценка
Создание процедур
Создание первой процедуры требует выполнения двух последовательных шагов: сначала надо вставить модуль в рабочую книгу, а затем в этом модуле написать процедуру. Для любого создаваемого приложения надо создать свой модуль. Приложение может содержать несколько модулей, но это не обязательно. Некоторые разработчики предпочитают иметь много модулей, так как в этом случае они могут организовать их по назначению, виду и т.п. Процедура, созданная нами в следующем примере, будет выводить на экран окно сообщения. Для создания этой процедуры выполните следующие действия.
-
Откройте новую рабочую книгу.
-
Выполните команду Сервис > Макрос > Редактор Visual Basic. Откроется окно редактора Visual Basic.
-
В левой части окна редактора Visual Basic вы видите окно проектов Project Explorer. Откройте проект VBAProject (Книга1) и щелкните правой кнопкой мыши на элементе ЭтаКнига. В контекстном меню выберите команду Insert > Module (Вставка > Модуль). В ваше приложение будет добавлен модуль (рис. 4.2).
Если вы не видите окно проектов, нажмите комбинацию клавиш <Ctrl+R>.
В верхней части окна кода модуля вы увидите оператор Option Explicit (явное описание опций), который принуждает явно описывать все переменные с помощью операторов Dim, Private, Public, ReDim и Static. Если вы попытаетесь использовать переменную без ее объявления, то при компиляции кода будет выдана ошибка. Этот оператор в новом модуле появляется не всегда, а только тогда, когда в диалоговом окне Options на вкладке Editor установлен флажок опции Require Variable Declaration (Требовать объявления переменных). Диалоговое окно Options открывается командой Tools > Options (Сервис > Параметры).
Рис. 4.2. Окно проектов позволяет следить за компонентами приложений
-
Выполните команду Insert > Procedure (Вставка > Процедура). Откроется диалоговое окно Add Procedure (Добавить процедуру) (рис. 4.3).
-
Введите имя процедуры, например ПерваяПроцедура. В секции Туре (Тип) установите переключатель Sub (Подпрограмма). Щелкните на кнопке ОК. Как показано на рис. 4.4, новая процедура будет добавлена в модуль.
-
В пустой строке находится текстовый курсор, предлагая начать ввод кода процедуры. Нажмите клавишу <Таb> и введите следующий текст:
MsgBox "Это моя 1-я процедура VBA"
После того как вы введете MsgBox и нажмете клавишу пробела, появится окно с информацией о данном операторе.
Делать отступ текста с помощью клавиши <Таb> не обязательно. Отступ делается для более легкого чтения кода.
-
Нажмите клавишу <Enter>. Завершенная процедура показана на рис. 4.5.
Рис. 4.3. Это диалоговое окно помогает в создании подпрограмм и функций
Рис. 4.4. Новая процедура начинается оператором Public Sub и заканчивается оператором End Sub
Рис. 4.5. Ваша первая процедура имеет всего три строчки кода VBA
VBA требует выполнения определенных правил для имен подпрограмм и функций. Эти правила таковы.
-
Первые три символа имени должны быть буквами.
-
Имя может содержать буквы, цифры и знаки подчеркивания.
-
Имя не может содержать пробелы, точки, запятые, восклицательные знаки (!) и символы @, &, $, #.
-
Имя не должно иметь более 255 символов.