- •Что такое 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-му часу Тесты
- •Упражнение
Объекты доступа к базам данных
Как следует из названия ActiveX Data Objects (Объекты данных ActiveX), ADO предлагает объектную модель, т.е. совокупность объектов, посредством которых можно получить доступ к внешним данным и манипулировать ими. Вот несколько основных объектов этой модели.
-
Объект Connection (Соединение) - отвечает за соединение.(связь) с источником данных.
-
Объект Command (Команда) - представляет совокупность команд, таких как организация запросов или манипулирования данными.
-
Объект Parameter (Параметр) - работает в паре с объектом Command, так как содержит параметры этого объекта.
-
Объект Recordset (Набор записей) - центральный объект объектной модели ADO. Представляет совокупность записей из внешнего источника данных.
-
Объект Field (Поле) - описывает поля (столбцы) множества записей объекта Recordset.
-
Объект Error (Ошибка) - представляет ошибки, возвращаемые из источника данных. Любой оператор, включающий в себя объекты ADO, может генерировать ошибки. Каждая такая ошибка рассматривается как объект Error из коллекции Errors (Ошибки) объекта Connection.
Использование ado
Основная цель разработчиков приложений при использовании ADO - импортировать данные из внешней базы данных в рабочую книгу Excel. Для достижения этой цели необходимо выполнить следующее.
-
Установить соединение с источником данных.
-
Получить доступ к данным.
-
Извлечь определенные записи из всего множества данных.
-
Закрыть соединение с источником данных.
Создание ссылки на библиотеку ado
Прежде чем писать программы с использованием объектов ADO, необходимо создать ссылку на библиотеку ADO. Для этого сделайте следующее.
-
В окне редактора Visual Basic выполните команду Tools > References (Сервис > Ссылки). Откроется диалоговое окно References (Ссылки).
-
В списке Available References (Возможные ссылки) выберите пункт Microsoft ActiveX Data Objects 2.0 Library (Библиотека Microsoft ActiveX Data Objects 2.0), установив флажок рядом с этим пунктом.
-
Щелкните на кнопке ОК. Ссылка на библиотеку будет установлена.
(Ссылка на библиотеку ADO устанавливается только для открытой рабочей книги. Поэтому создавайте ссылку после того, как будет отрыта та книга, в которой будет находиться процедура, использующая ADO. - Прим. ред.)
Создадим процедуру, которая с помощью ADO будет извлекать данные из базы данных Access Борей и помешать их в рабочий лист. Откройте новую рабочую книгу и создайте процедуру ИмпортДанных, код которой приведен в листинге 21.1.
Листинг 21.1. Процедура ИмпортДанных
l:Sub ИмпортДанных()
2: Dim rsProducts As ADODB.Recordset
3: Set rsProducts = New ADODB.Recordset
4: rsProducts.Open Source:="Товары", _
5: activeconnection:="Provider=Microsoft.Jet.OLEDB.4.0; _
6: Data Source=C:\Program Files\Microsoft _
7: Office\Office\Samples\Борей.mdb", _
8: CursorType:=adOpenStatic, _
9: LockType:=adLockOptimistic, _
10: Options:=adCmdTable
11: With Worksheets("Лист1")
12: .Range("A1").CurrentRegion.Clear
13: Application.Intersect(.Range(.Rows(l), _
.Rows(rsProducts.RecordCount)),
.Range(.Columns(1), .Columns(rsProducts.Fields.Count))). _
Value = Поворот(rsProducts.GetRows _
(rsProducts.RecordCount))
14: End With
15: rsProducts.Close
16:End Sub
В начале своего выполнения процедура работает с объектом Recordset. Обратите внимание на метол Open (Открыть) этого объекта. Аргумент Source (Источник) метода Open задает имя таблицы в базе данных (в данном случае процедура будет работать с таблицей Товары). Аргумент activeconnection (активное соединение) содержит всю информацию, необходимую для соединения с базой данных:
Dim rsProducts As ADODB.Recordset
Set rsProducts = New ADODB.Recordset
rsProducts.Open Source:="Товары", _
activeconnection:="Provider=Microsoft.Jet.OLEDB.4.0; _
Data Source=C:\Program Files\Microsoft _
Office\Office\Samlples\Борей.mdb", _
CursorType:=adOpenStatic, _
LockType:=adLockOptimistic, _
Options:=adCmdTable
После установления соединения с базой данных, все готово для импортирования ее, данных в рабочую книгу. Но здесь вас подстерегает небольшая проблема. Массив данных, извлекаемый из базы данных с помощью ADO, организован в виде двумерной таблицы, где каждый столбец соответствует одной записи данных, а строка соответствует полю, т.е. данные представлены совсем не в том виде, к какому мы привыкли.
Поэтому, прежде чем помешать данные в рабочий лист, весь массив данных надо транспонировать (повернуть) так, чтобы столбцы стали строками, а строки - столбцами. Если вы опытный пользователь Excel, то можете предположить, что для этого можно воспользоваться функцией Excel ТРАНСП (транспонирование). Но дело осложняется тем, что массивы импортируемых данных, как правило, очень велики и функция ТРАНСП с ними не всегда справляется. Поэтому надо создать собственную функцию транспонирования (код такой функции с названием Поворот приведен ниже в листинге 21.2). В процедуре ИмпортДанных в строках кода
With Worksheets("Лист1")
.Range("A1").CurrentRegion.Clear
Application.Intersect(.Range(.Rows(1), _
.Rows(rsProducts.RecordCount)), _
.Range(.Columns(1), .Columns(rsProducts.Fields.Count))). _
Value = Поворот(rsProducts.GetRows _
(rsProducts.RecordCount))
End With
сначала очищается текущая активная область рабочего листа, начиная с ячейки А1, а затем используется метод Intersect (Пересечь) В сочетании с функцией транспонирования Поворот. Метод Intersect возвращает объект Range (Диапазон), состоящий из прямоугольной области пересечения двух и более диапазонов ячеек. В данном случае создается пересечение диапазона импортируемых данных и ячеек всего рабочего листа.
Последний оператор rsProducts.Close закрывает соединение с базой данных.
Теперь приведем код функции транспонирования Поворот.
Листинг 21.2. Функция Поворот
1: Function Поворот(ByRef ArrayOriginal As Variant) As Variant
2: Dim x As Integer
3: Dim у As Integer
4: Dim i As Integer
5: Dim j As Integer
6: Dim ArrayTranspose() As Variant
7:
8: x = Ubound(ArrayOriginal, 1)
9: y = Ubound(ArrayOriginal, 2)
10:
11: ReDim ArrayTranspose(y, x)
12:
13: For i = 0 To x
14: For j = 0 To у
15: ArrayTranspose(j, i) = ArrayOriginal(i, j)
16: Next
17: Next
18:
19: Поворот = ArrayTranspose
20:
21: End Function
Теперь все готово для выполнения процедуры ИмпортДанных. Перейдите в рабочую книгу и выполните процедуру. Через несколько мгновений в рабочем листе появятся импортированные данные (рис. 21.1).
Рис. 21.1. Данные, импортированные с помощью ADO
Резюме
В этом часе был сделан небольшой обзор возможностей и основных понятий ADO. Мы также создали процедуру, импортирующие данные из внешнего источника в рабочую книгу.
В следующем часе мы продолжим изучение технологии ADO и создадим экранную форму, которая позволит пользователю выбирать и редактировать данные.