- •Что такое 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-му часу Тесты
- •Упражнение
Запись макроса для создания сводной таблицы
В прошлом часе мы записали макрос (строящий диаграмму), код которого послужил основой для созданной затем процедуры. Такой же подход используется и в этом часе. Сейчас мы запишем макрос, код которого исследуем и используем для создания процедуры, строящей сводные таблицы.
Прежде всего создайте таблицу данных, похожую на представленную на рис. 19.1. Пусть эта таблица имеет заголовки Год, Район, Категория товара и Объем продаж.
Если вы хотите, чтобы таблица данных на рабочем листе воспринималась Excel как список, позаботьтесь о том, чтобы заголовки столбцов были выделены шрифтом, отличным оттого, каким набраны строки сданными.
Выделите таблицу данных и начните запись макроса. Выполните команду Данные > Сводная таблица. В первом диалоговом окне мастера сводных таблиц установите переключатели в списке или базе данных Microsoft Excel и сводная таблица. Щелкните на кнопке Далее. В следующем диалоговом окне удостоверьтесь, что выбран весь диапазон таблицы данных, и щелкните на кнопке Далее. В третьем диалоговом окне мастера сводных таблиц установите переключатель новый лист и щелкните на кнопке Готово. В рабочую книгу будет добавлен новый лист, содержащий пустую сводную таблицу (рис. 19.5).

Рис. 19.5. После завершения работы мастера сводных таблиц на новом рабочем листе отобразится пустой макет сводной таблицы

Рис. 19.6. Законченная сводная таблица
Перетащите из панели Сводные таблицы поле Год в область сводной таблицы, помеченную словами Перетащите сюда поля страниц. Перетащите поле Район в область, помеченную словами Перетащите сюда поля строк. Далее перетащите в область столбцов сводной таблицы поле Категория товара, а в область данных - поле Объем продаж. Законченная сводная таблица показана на рис. 19.6. Остановите запись макроса.
Прежде чем исследовать код макроса, поэкспериментируйте со сводной таблицей. В поле списка рядом с полем Год щелкните на кнопке со стрелкой, направленной вниз, в открывшемся списке выберите 1997 и щелкните на кнопке ОК. В сводной таблице отобразится информация, относящаяся только к 1997 году. Щелкните в поле Категория товара на кнопке со стрелкой, направленной вниз, и снимите флажки Бытовая электротехника и Средства автоматизации. Щелкните на кнопке ОК, теперь в сводной таблице будут представлены только данные по средствам связи. Проделав описанные операции в обратном порядке, восстановите первоначальный вид сводной таблицы.
Исследование кода макроса
Перейдите в редактор Visual Basic и в окне проектов найдите текущую книгу. Откройте папку Modules и затем Module1 - вы увидите код макроса в виде процедуры МояСводнаяТаблица (если такое имя вы дали своему макросу). Полный код этой процедуры приведен в листинге 19.1.
Листинг 19.1. Процедура МояСводнаяТаблица
l:Sub МояСводнаяТаблица()
2: ActiveWorkbook.PivotCaches.Add(SourceType:=xlDataBase, _
3: SourceData:= "Лист1!R1C1:R37C4").CreatePivotTable _
TableDestination:="", TableName:"= "СводнаяТаблица1"
4: ActiveSheet.PivotTableWizard _
5: TableDestination:=ActiveSheet.Cells(3,1)
6: ActiveSheet.Cells(3,1).Select
7: ActiveSheet.PivotTables("СводнаяТаблица1").SmallGrid = False
8: With ActiveSheet.PivotTables("СводнаяТаблица1"). _
PivotFields("Год")
9: .Orientation = xlPageField
10: .Position = 1
11: End With
12: With ActiveSheet.PivotTables("СводнаяТаблица1"). _
PivotFields("Район")
13: .Orientation = xlRowField
14: .Position = 1
15: End With
16: With ActiveSheet.PivotTables("СводнаяТаблица1"). _
PivotFields("Категория товара")
17: .Orientation = xlColumnField
18: .Position = 1
19: End With
20: With ActiveSheet.PivotTables("СводнаяТаблица1"]. _
PivotFields("Объем продаж")
21: .Orientation = xlDataField
22: .Position = 1
23: End With
24:End Sub
Первый оператор в этой процедуре выполняет метод Add (Добавить) применительно к коллекции PivotCaches (Основные кэши). На самом деле в этом операторе выполняются два метода. В дополнение к метолу Add, создающему элемент коллекции PivotCaches, исполняется еще метод CreatePivotTable (Создать сводную таблицу), название которого говорит само за себя:
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDataBase, SourceData:= _
"Лист1!R1C1:R37C4").CreatePivotTable TableDestination:="", _
TableName:= "СводнаяТаблица1"
Обратите внимание, что в методе CreatePivotTable аргумент TableDestination принимает значение пустой строки - для Excel это является указанием создать сводную таблицу на новом рабочем листе. После создания нового рабочего листа и сводной таблицы задается ряд свойств:
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet. _
Cells(3, 1)
ActiveSheet.Cells(3,1).Select
ActiveSheet.PivotTables("СводнаяТаблица1").SmallGrid = False
Остальные операторы процедуры назначают областям сводной таблицы соответствующие поля данных.
With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Год"]
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Район")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("СводнаяТаблица1"). _
PivotFields("Категория товара")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("СводнаяТаблица1"). _
PivotFields"Объем продаж")
.Orientation = xlDataField
.Position = 1
End With
Если сейчас вы попытаетесь выполнить макрос еще раз, то получите сообщение об ошибке, так как сводная таблица с тем именем, которое указано в аргументе TableName (Имя таблицы), уже создана. Чтобы сделать процедуру более гибкой, внесите в ее код изменения, показанные в листинге 19.2 (измененные и новые операторы выделены полужирным шрифтом).
Листинг 19.2. Измененная процедура МояСводнаяТаблица
1:Sub МояСводнаяТаблица()
2: Dim ptSales As PivotTable
3:
4: Set ptSales = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDataBase, SourceData:=
5: "Лист1!R1C1:R37C4").CreatePivotTable(TableDestination:="")
6: ActiveSheet.PivotTableWizard _
TableDestination:=ActiveSheet.Cells(3,1)
7: ActiveSheet.Cells(3,1).Select
8: ptSales.SmallGrid = False
9: With ptSales.PivotFields("Год")
10: .Orientation = xlPageField
11: .Position = 1
12: End With
13: With ptSales.PivotFields("Район")
14: .Orientation = xlRowField
15: .Position = 1
16: End With
17: With ptSales.PivotFields("Категория товара")
13: .Orientation = xlColumnField
19: .Position = 1
20: End With
21: With ptSales.PivotFields("Объем продаж")
22: .Orientation = xlDataField
23: .Position = 1
24: End With
25:End Sub
Теперь можно не беспокоиться об имени создаваемой сводной таблицы. Процедура будет выполняться столько раз, сколько необходимо.
Резюме
В этом часе вы познакомились со сводными таблицами, предназначенными для работы с большими массивами данных. Продолжая изучение языка VBA, мы сначала записали макрос, создающий сводные таблицы, а затем модифицировали его код.
