- •Что такое 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-му часу Тесты
- •Упражнение
Усовершенствованная процедура построения диаграмм
Теперь создадим процедуру, которая проверяла бы количество выделенных столбцов данных, и если выделено два столбца, то строила бы круговую диаграмму, а если выделено три столбца - гистограмму (столбчатую диаграмму). Для этого выполните следующие действия.
-
Измените заголовок столбца В - в ячейку В1 введите 1-й квартал.
-
Заполните шесть ячеек столбца С: в ячейку С1 введите 2-й квартал, в ячейку С2 введите число 1000, в ячейку C3 - 1150, в С4 - 875, в С5 - 1270 и в ячейку С6 - 1395.
-
Удалите из рабочего листа все диаграммы.
-
Выделите диапазон А1:С6 и выполните команду Сервис > Макрос > Начать запись. В диалоговом окне Запись макроса задайте имя макроса, например Гистограмма. Щелкните на кнопке ОК для начала записи макроса.
-
Щелкните на кнопке Мастер диаграмм стандартной панели инструментов. Появится первое окно мастера диаграмм.
-
Выберите тип диаграммы Гистограмма. Щелкните на кнопке Готово для создания диаграммы.
-
Остановите запись макроса.
Теперь у вас есть два макроса-процедуры для создания диаграмм: КруговаяДиаграмма и Гистограмма. Скомбинируем эти две процедуры в одну, которая бы строила диаграмму того или иного типа в зависимости от количества выделенных столбцов. Нажмите <Alt+F11> для перехода в редактор Visual Basic. Создайте новую процедуру с именем МояДиаграмма. Введите следующий код в эту процедуру:
Dim rCurrentRange As Range
Set rCurrentRange = Selection
If Selection.Columns.Count = 2 Then
Перейдите в процедуру КруговаяДиаграмма и скопируйте следующие строки кода:
Charts.Add
ActiveChart.ChartType = xlPie
ActiveChart.SetSourceData Source:= rCurrentRange, PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowPercent, _
LegendKey:=False, HasLeaderLines:=True
He забывайте, что в редакторе Visual Basic для копирования, вырезания и вставки кода можно использовать стандартные комбинации клавиш: <Ctrl+C>, <Ctrl+X> и <Ctrl+V> соответственно.
Вставьте скопированные строки в процедуру МояДиаграмма после оператора If. После вставленных строк в новой строке введите код
ElseIf Selection.Columns.Count > 2 Then
Перейдите в процедуру Гистограмма и скопируйте оттуда строки
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:C6")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
Вставьте эти строки в процедуру МояДиаграмма после оператора ElseIf. В операторе ActiveChart.SetSourceData замените Sheets("Лист1").Range("А1:С6") на rCurrentRange. Далее с новой строки введите следующее:
Else
MsgBox "Выделенный диапазон не подходит для построения диаграммы"
Exit Sub
End If
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Объемы продаж"
.ChartTitle.Select
End With
Из процедуры КруговаяДиаграмма скопируйте следующий код:
Selection.AutoScaleFont = True
With Selection.Font
.Name = "Arial"
.FontStyle = "полужирный курсив"
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.BackGround = xlAutomatic
End With
Вставьте этот код в процедуру МояДиаграмма после оператора End With. Полный код процедуры показан в листинге 18.2.
Листинг 18.2. Процедура МояДиаграмма
1: Sub МояДиаграмма()
2: Dim rCurrentRange As Range
3: Set rCurrentRange = Selection
4:
5: If Selection.Columns.Count = 2 Then
6: Charts.Add
7: ActiveChart.ChartType = xlPie
8: ActiveChart.SetSourceData Source:=rCurrentRange, _
9: PlotBy:=xlColumns
10: ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
11: ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowPercent, _
12: LegendKey:=False, HasLeaderLines:=True
13: ElseIf Selection.Columns.Count > 2 Then
14: Charts.Add
15: ActiveChart.ChartType = xlColumnClustered
16: ActiveChart.SetSourceData Source:=rCurrentRange
17: ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
16: Else
19: MsgBox "Выделенный диапазон не подходит для построения _
20: диаграммы"
21: Exit Sub
22: End If
23:
24: With ActiveChart
25: .HasTitle = True
26: .ChartTitle.Characters.Text = "Объемы продаж"
27: .ChartTitle.Select
28: End With
29:
30: Selection.AutoScaleFont = True
31: With Selection.Font
32: .Name = "Arial"
33: .FontStyle = "полужирный курсив"
34: .Size = 14
35: .Strikethrough = False
36: .Superscript = False
37: .Subscript = False
38: .OutlineFont = False
39: .Shadow = False
40: .Underline = xlUnderlineStyleNone
41: .ColorIndex = xlAutomatic
42: .Background = xlAutomatic
43: End With
44:
45: End Sub
При создании этой процедуры мы использовали в основном копирование и вставку кода из ранее созданных макросов. "Изюминкой" этой процедуры является применение оператора If. Этот оператор проверяет значение свойства Columns.Count, равное количеству столбцов в выделенном диапазоне ячеек. Если это значение равно 2, то строится круговая диаграмма, если больше двух - строится гистограмма, если выделен один столбец, то выводится соответствующее окно сообщения. Работу этого оператора можно представить в виде следующей схемы:
If Selection.Columns.Count = 2 Then
'код создания круговой диаграммы
Else IfSelection.Columns.Count > 2 Then
'код создания гистограммы
Else
MsgBox "Выделенный диапазон не подходит для построения диаграммы"
Exit Sub
End If
После создания диаграммы процедура добавляет заголовок диаграммы и форматирует его. Для тестирования созданной процедуры перейдите в рабочую книгу и удалите все ранее созданные диаграммы. Выделите диапазон А1:С6 и выполните процедуру МояДиаграмма. Результат показан на рис. 18.4.
Рис. 18.4. Так как выделенный диапазон содержит более двух столбцов, то процедура построила гистограмму
Удалите гистограмму и выделите диапазон А1:В5. Снова выполните процедуру МояДиаграмма. Теперь будет создана круговая диаграмма. Сохраните рабочую книгу с именем Час18.
Резюме
Этот час был посвящен построению диаграмм. Вы узнали о коллекции Charts (Диаграммы) и объектах Chart, а также об их свойствах и методах.
В этом часе мы написали очень мало кода: сначала записали пару макросов, а потом просто использовали код этих макросов. Такой подход сэкономил нам много времени, которое пришлось бы потратить на "добывание" сведений об объектах, их свойствах и методах, необходимых для построения диаграмм. Многие разработчики приложений VBA используют этот подход: сначала записывают необходимые макросы, которые по возможности выполняли бы задуманное разработчиком, а затем изменяют и используют код этих макросов.