
- •Л.Н. Лядова, н.В. Фролова, в.В. Ланин, е.Б. Замятина, м.А. Плаксин, б.А. Ермолаев
- •Часть 2. Основы офисного программирования
- •Оглавление
- •Глава 6. Использование Win32 api 113
- •Глава 7. Использование шаблонов и надстроек 118
- •Глава 8. Разработка приложений с помощью Excel 122
- •Глава 9. Разработка приложений с помощью Word 223
- •Глава 10. Использование Automation при интегрировании компонентов Microsoft Office 256
- •Глава 11. Организация доступа к внешним данным 279
- •Глава 12. Общие рекомендации по разработке приложений 297
- •Глава 13. Разработка справочной системы 298
- •Глава 14. Дополнительные рекомендации 301
- •Пояснительная записка
- •Уровень предварительной подготовки слушателей
- •Образовательные цели и задачи
- •Знания и навыки, получаемые в ходе изучения курса
- •Содержание занятий
- •Вопросы для самостоятельного изучения
- •Содержание лабораторных работ
- •Итоговые работы
- •Введение
- •Глава 1.Общая характеристика возможностей vba
- •Глава 2.Основные принципы разработки приложений
- •Глава 3.Основные правила разработки интерфейса
- •Глава 4.Visual Basic для приложений
- •Глава 5.Введение в язык и редактор Visual Basic
- •5.1.Окно Редактора Visual Basic
- •5.2.Основные правила записи программ на vba
- •5.2.1. Описания в программах на языке vba
- •5.2.2. Структуризация программ vba и правила записи кода процедур
- •5.2.3. Использование параметров
- •5.2.4. Типы данных vba
- •5.2.5. Описания переменных
- •5.2.6. Объекты в программах на vba и объектные переменные
- •5.2.7. Создание объектов пользователя
- •5.2.8. Описание и использование констант
- •5.2.9. Массивы в vba
- •5.2.10. Описание типов данных пользователя
- •5.2.11. Запись выражений на vba
- •5.2.12. Рекурсивные вычисления
- •5.2.13. Процедуры-подпрограммы
- •5.2.14. Процедуры-функции
- •5.2.15. Процедуры-свойства
- •5.2.16. Создание процедур
- •5.2.17. Управляющие структуры vba и события
- •5.3.Запуск программ
- •5.4.Отладка программ
- •5.5.Обработка ошибок
- •5.6.Преобразования типов
- •5.7.Функции для работы с датами и временем
- •5.8.Управление файлами
- •5.9.Функции проверки
- •5.10.Функции работы со строками
- •5.11.Взаимодействие с пользователем
- •5.12.Пользовательские формы и диалоговые окна
- •5.13.Создание пользовательских меню и панелей инструментов
- •5.14.Разработка контекстного меню
- •5.15.Открытие проектов, экспорт и импорт
- •Глава 6.Использование Win32 api
- •Глава 7.Использование шаблонов и надстроек
- •Глава 8.Разработка приложений с помощью Excel
- •8.1.Иерархия объектов Excel
- •8.2.Обзор основных объектов Excel
- •8.2.1. Объект Application
- •8.2.2. Объект Workbook
- •8.2.3. Объект WorkSheet
- •8.2.4. Объект Range
- •8.2.5. Графические объекты
- •8.2.6. Элементы управления и обработка событий
- •8.3.Представление данных и вычисления в таблицах Excel
- •8.3.1. Ссылки на ячейки рабочих листов Excel
- •8.3.2. Работа с формулами
- •8.3.3. Использование функций
- •8.3.4. Создание пользовательских функций рабочего листа
- •8.3.5. Массивы Excel
- •8.3.6. Определение связей между таблицами
- •8.3.7. Консолидация данных
- •8.3.8. Форматирование данных в таблицах
- •8.4.Анализ данных и подведение итогов
- •8.4.1. Создание сводных таблиц
- •8.4.2. Подведение промежуточных итогов
- •8.4.3. Определение частичных сумм
- •8.4.4. Создание диаграмм
- •8.4.5. Работа со структурой данных
- •8.5.Подбор параметров и поиск решения
- •8.6.Использование сценариев
- •8.7.Поиск и отбор данных в таблицах Excel
- •8.7.1. Использование автофильтра
- •8.7.2. Работа с расширенным фильтром
- •8.7.3. Поиск данных по подписям строк и столбцов
- •8.8.Упорядочение данных в таблицах
- •8.9.Защита приложений Excel
- •8.9.1. Защита от ошибок при вводе данных
- •8.9.2. Защита данных от несанкционированного доступа
- •Глава 9.Разработка приложений с помощью Word
- •9.1.Модель объектов Word
- •9.1.1. Объект Document
- •9.1.2. Другие дочерние объекты приложения Word
- •9.2.Работа с полями
- •9.3.Переменные документа
- •9.4.Использование формул в документах Word
- •9.5.Использование элементов управления в документах Word
- •9.6.Создание шаблонов документов на основе таблиц
- •9.7.Защита документов Word и кода
- •Глава 10.Использование Automation при интегрировании компонентов Microsoft Office
- •10.1.Технология ActiveX
- •10.2.Компонентная модель объектов, внедрение и связывание
- •10.3.Создание объектов Automation
- •10.4.Получение доступа к объекту
- •10.5.Пример вычислений в Access с помощью Excel
- •10.6.Управление связанными и внедренными объектами с помощью программного кода
- •Глава 11.Организация доступа к внешним данным
- •11.1.Доступ к данным из клиентских приложений
- •11.2.Интерфейс odbc
- •11.3.Использование dao для доступа к данным
- •11.3.1. Модель объектов dao
- •11.3.2. Создание рабочей области и открытие источника данных
- •11.3.3. Исследование структуры таблиц бд
- •11.3.4. Операции над данными
- •11.4.Интеграция данных и работа в сети
- •11.4.1. Доступ к данным Excel из субд Access
- •11.5.Выбор метода доступа к данным
- •Глава 12.Общие рекомендации по разработке приложений
- •Глава 13.Разработка справочной системы
- •13.1.Использование всплывающих подсказок
- •13.2.Контекстная справка «Что это такое?»
- •13.3.Подготовка файла справки
- •Глава 14.Дополнительные рекомендации Установка приложения
- •14.1.Повышение эффективности работы приложения
- •Приложение 1. Система автоматизации подготовки документов на основе пакета Microsoft Office
- •Требования к системе Office case
- •Интеллектуальность документа
- •Однократный ввод данных и их совместное использование
- •Дружественный интерфейс – «ориентация на человека»
- •Мобильность
- •Независимость от версии Microsoft Office
- •Поддержка языка разметки документов xml
- •Общий сценарий использования
- •Структура Office case
- •Структура скрытого раздела документа
- •В. Таблица ограничений
- •Подсистемы программного проекта документа Менеджер закладок
- •Менеджер классификаторов
- •Подсистема управления интерфейсом пользователя
- •Подсистема контроля данных
- •Подсистема информационного обмена
- •Дизайнер системы документов
- •Редактор классификаторов
- •Редактор правил
- •Редактор закладок
- •Редактор блоков данных
- •Пример применения Office case Постановка задачи
- •Реализация Документы «Подсистемы автоматизации подготовки отчетов»
- •Требования к квалификации пользователей
- •Установка приложения и подготовка к работе
- •Интерфейс первичных документов
- •Интерфейс сводных документов
- •Приложение 2. Автоматизированное рабочее место «Оператор автозаправочной станции»
- •Разработка структуры рабочей книги
- •Настройка пользовательского интерфейса
- •Разработка экранных форм
- •Приложение 3. Автоматизация заполнения бланка с помощью программы текстового процессора Word Постановка задачи
- •Разработка документа
- •Разработка экранной формы
- •Список литературы
5.2.8. Описание и использование констант
Кроме переменных в программах на VBA используются и константы, их значения являются постоянными и не изменяются в ходе выполнения программы.
В VBA существуют так называемые встроенные константы. Это константы, имена которых определены в самом языке. Все встроенные константы VBA (их более 250) имеют имена вида vbИмяКонстанты, встроенные константы Access имеют имена вида acИмяКонстанты, встроенные константы Excel – xlИмяКонстанты, Word – wdИмяКонстанты, PowerPoint – ppИмяКонстанты. Значения встроенных констант можно просмотреть в окне «Просмотр объектов», которое открывается при нажатии клавиши F2 в Редакторе Visual Basic. Для получения информации о конкретной константе можно, установив курсор на ее имени в окне программы, нажать клавишу F1.
При описании константы ей можно присвоить значащее имя. Инструкция Const используется для описания константы и определения ее значения. После описания константу нельзя модифицировать и нельзя присваивать ей новое значение.
Константы имеют те же три уровня областей действия, что и переменные, но способ описания констант каждого уровня отличается от способа описания переменных.
Константа описывается в процедуре или в начале модуля, в разделе описаний.
Константы уровня процедуры доступны только внутри процедуры, в которой они описаны.
Константы уровня модуля описываются в разделе описания модуля. Они доступны в любой процедуре модуля, где они описаны. Константы уровня модуля по умолчанию являются личными, поэтому ключевое слово Private в описании можно не использовать. При описании общих констант уровня проекта инструкции Const должно предшествовать ключевое слово Public. Такие константы можно использовать в любом месте проекта, в котором они описаны.
Дополнительные сведения содержатся в разделе «Область определения и видимость» справочника Visual Basic.
Константы могут быть описаны одним из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String, или Variant. Поскольку значение константы уже известно, можно задать тип данных в инструкции Const. Дополнительные сведения содержатся в разделе “Типы данных” справочника Visual Basic.
Допускается также описание нескольких констант в одной строке. В этом случае, чтобы задать тип данных, надо указать определенный тип для каждой константы. В следующем примере описываются две константы:
Const cAge As Integer = 34, cWage As Currency = 35000
5.2.9. Массивы в vba
Массивы являются мощным средством обработки больших объемов данных.
Массив – то индексированная группа значений одного и того же типа. Одномерный массив – это индексированный список значений. Двумерный массив можно представить как таблицу, а трехмерный – как группу таблиц, каждая из которых имеет одно и то же количество строк и столбцов. Массивы VBA могут иметь до 60 измерений.
Как и другие переменные, массивы описываются с помощью инструкций Dim, Static, Private или Public. Разница между скалярными переменными и массивами состоит в том, что для последних надо указывать размер массива. Массив с заданным размером называется массивом фиксированного размера. Массив с переменным размером называется динамическим.
Размерность массива фиксированного размера и количество элементов в нем указывается в круглых скобках сразу за именем массива в его описании. Каждому измерению соответствует одно число, задающее верхнюю границу соответствующего измерения. Начало индексации массива (с 0 или 1) определяется параметрами инструкции Option Base. Если не указано Option Base 1, нижняя граница индексов массива равняется нулю. В следующей строке программы массив фиксированного размера описывается как массив типа Integer, имеющий 11 строк и 11 столбцов:
Dim MyArray (10, 10) As Integer
Первый аргумент представляет строки, а второй – столбцы.
Можно задать индексацию массива с любого выбранного числа. Для этого при описании массива задаются и верхняя, и нижняя границы индекса:
Dim DataArray (5 to 10) As Byte
Dim RealMulti(1 To 5, 1 To 10) As Single
В этом примере массив DataArray – это одномерный массив, содержащий шесть элементов (чисел типа Byte), а RealMulti – двумерный массив вещественных чисел из 5 строк и 10 столбцов.
Как и при описании других переменных, если тип данных при описании массива не задается, подразумевается, что элементы массива имеют тип Variant.
Динамические массивы используются, когда известно, что размер элемента может меняться в ходе выполнения программы. Если массив описан как динамический, можно изменять его размер во время работы программы, соизмеряя его с текущими потребностями. Для описания динамического массива используются инструкции Dim, Static, Private или Public с пустыми скобками, как показано в следующем примере:
Dim DynArray() As Single
Для переопределения массива используется оператор ReDim. После этого массиву выделяется необходимая для его размещения память. Инструкция ReDim используется в процедуре внутри области определения массива для изменения числа размерностей, определения числа элементов и задания верхних и нижних границ индексов для каждой размерности. Инструкцию ReDim можно применять для изменения динамического массива столько раз, сколько потребуется. Однако при каждом применении данные, содержащиеся в массиве, теряются. Инструкция ReDim Preserve увеличивает размер массива, сохраняя при этом его содержимое. В следующем примере показывается, как можно увеличить массив varArray на 10 элементов без уничтожения текущих значений элементов массива:
ReDim Preserve VarArray(UBound(VarArray) + 10)
Использование ключевого слова Preserve вместе с динамическим массивом позволяет изменить только верхнюю границу последней размерности массива, изменение числа размерностей невозможно.
Размер массива можно и уменьшить. Если уменьшить размер массива, данные из удаленных элементов будут потеряны.
При передаче массива в процедуру по ссылке нельзя изменять размеры массива в процедуре.
При необходимости сослаться на все элементы массива можно ссылаться на массив как целое. Возможны также ссылки на его отдельные элементы. Чтобы задать значение отдельного элемента массива, надо указать в круглых скобках за именем массива индекс нужного элемента.
Для работы с массивами чаще всего используются функции Array, Erase, IsArray, Lbound, Ubound. Функция Array позволяет создавать массивы во время выполнения программы. Функция Erase используется для очистки массива. Erase повторно инициализирует элементы массивов фиксированной длины и освобождает память, отведенную для динамического массива, поэтому для работы с динамическим массивом его нужно переопределить с помощью ReDim. Встроенная функция IsArray проверяет, является ли переменная массивом. Функции Lbound и Ubound позволяют определить верхнюю и нижнюю границы индексов.
При использовании типа Variant элементы массива могут иметь различный тип, например:
Dim VarData(3) As Variant
varData(0) = "Мария Петрова"
varData(1) = "Зеленая, 19"
varData(2) = 38
varData(3) = Format ("06-09-1952", "General Date")
Тот же результат может быть получен при использовании функции Array:
Dim VarData As Variant
VarData = Array ("Иван Петров", "Зеленая, 19", 38, _
Format("06-09-1952", "General Date"))
Независимо от способа создания массива значений Variant его элементы нумеруются индексами. Например, следующая инструкция может быть добавлена к любому из предыдущих примеров.
MsgBox "Записаны данные для " & varData(0) & "."
В справочной системе VBA можно получить более подробную информацию о работе с массивами.