- •Что такое 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-му часу Тесты
- •Упражнение
Инициализация значений экранной формы
Вы должны заранее подумать о том, что произойдет при загрузке экранной формы. Например, желательно поместить текущую дату в поле ввода Дата - пользователи будут весьма благодарны за то, что отпадет необходимость вводить дату. Чтобы сделать это и все остальное, что должно выполняться при открытии формы, нужно создать процедуру загрузки формы (назовем ее ЗагрузкаФормы). В этой процедуре должен быть код, задающий значения для элементов управления формы.
Эта процедура должна, кроме того, вставить заранее созданные на рабочем листе списки значений в списки экранной формы. В нашем случае (напомню, что мы продолжаем работать с экранной формой, созданной в предыдущем часе) надо иметь списки значений для полей со списками Тип расходов и Тип карты. Для создания списков значений выполните следующие действия.
-
Перейдите в текущую рабочую книгу. Переименуйте рабочий лист Лист2 на Списки.
-
На рабочем листе Списки перейдите в ячейку А1 и введите заголовок Типы расходов.
-
Начиная с ячейки В2, введите следующие значения:
в ячейку В2: Пляжный зонтик,
в ячейку B3: Аренда велосипеда,
в ячейку В4: Уроки гольфа,
в ячейку В5: Гольф, 18 лунок,
в ячейку В6: Гольф, 9 лунок,
в ячейку В7: Полотенце для бассейна,
в ячейку В8: Теннисный корт,
в ячейку В9: Уроки тенниса.
-
Выделите диапазон В2:В9 и задайте ему имя Расходы.
Чтобы задать имя диапазону ячеек, выделите этот диапазон и в поле Имя (с левой стороны в строке формул) введите имя диапазона. Нажмите клавишу <Enter>.
-
Перейдите в ячейку Е1 и введите заголовок Типы кредитных карт.
-
Начиная с ячейки F2, введите следующие значения:
в ячейку F2: Mastercard,
в ячейку F2: Visa,
в ячейку F2: American Express,
в ячейку F2: Diner's Club.
-
Выделите диапазон F2:F5 и задайте ему имя ТипыКарт.
-
Сохраните рабочую книгу.
-
Нажмите <Alt+F11> для возврата в редактор Visual Basic.
Теперь необходимо связать введенные значения и соответствующие им элементы управления экранной формы. Для этого выполните следующее.
-
Дважды щелкните на экранной форме (не на элементах управления, а именно на форме). Откроется окно кода с заголовком процедуры UserForm_Click (Щелчок на экранной форме) (рис. 15.1).
-
Нам пока не нужна процедура UserForm_Click, которая вызывается на исполнение после щелчка на экранной форме. Нам нужна процедура, выполняющаяся при открытии формы. На языке программистов такая процедура называется процедурой, обрабатывающей событие Activate (Активизация). Чтобы создать эту процедуру, щелкните на кнопке со стрелкой, направленной вниз, в правой части раскрывающегося списка возможных событий (рис. 15.1). В этом списке выберите событие Activate. В окне кода появится заголовок процедуры UserForm_Activate.
-
Введите код процедуры UserForm_Activate.
With lstExpenseType
.RowSource = "Расходы"
.ListIndex =0
End With
txtDate.Text = Format(Now, "dd/mm/yy")
With lstCardType
.RowSource = "ТипыКарт"
.ListIndex = 0
End With
Рис. 15.1. Окно кода для создания и редактирования процедур, управляющих экранной формой
-
Нажмите клавишу <F5> для выполнения процедуры. Отобразится экранная форма с заполненными списками Типы расходов и Типы карт, а также заполненным полем Дата (рис. 15.2).
-
Закройте форму и вернитесь в редактор Visual Basic.
Ключевой момент при инициализации значений в форме - использование процедуры, реагирующей на событие Activate (открытие формы). Используя подобный код, можно задать значения флажков, переключателей и любых других элементов управления.
Рис. 15.2. Автоматическое заполнение списков и полей формы при ее открытии Полный код процедуры UserForm_Activate приведен в листинге 15.1.
Листинг 15.1. Процедура UserForm Activate
1: Private Sub UserForm_Activate()
2: With lstExpenseType
3: .RowSource = "Расходы"
4: .ListIndex =0
5: End With
6:
7: txtDate.Text = Format(Now, "dd/mm/yy")
8:
9: With lstCardType
10: .RowSource = "ТипыКарт"
11: .ListIndex = 0
12: End With
13: End Sub
Для задания значений списков используются одинаковые группы операторов. Так, для списка Типы расходов значения задаются следующими операторами:
With lstExpenseType
.RowSource = "Расходы"
.ListIndex = 0
End With
Свойство RowSource ссылается на имя диапазона, где хранятся значения элементов списка. (Очевидно преимущество использования имени диапазона по сравнению с адресом диапазона - меньше вероятность неправильно ввести ссылку, возможность в дальнейшем переопределить диапазон без изменения кода процедуры, лучшая читаемость кода.) Свойство ListIndex определяет, какой элемент списка будет отображаться при открытии формы - все элементы списка пронумерованы, начиная с нуля.
По-иному задается значение для поля Дата:
txtDate.Text = Format(Now, "dd/mm/yy")
Функция Now возвращает текущую дату, функция Format форматирует текущую дату в соответствии с форматом dd/mm/yy (день месяца, порядковый номер месяца, две цифры года).