- •Л.Н. Лядова, н.В. Фролова, в.В. Ланин, е.Б. Замятина, м.А. Плаксин, б.А. Ермолаев
- •Часть 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.2. Структуризация программ vba и правила записи кода процедур
Основной структурной единицей при написании программ на VBA является процедура.
Процедура представляет собой описание последовательности инструкций (команд, или операторов), задающих алгоритм решения задачи. Эта последовательность команд записывается всего один раз, но может выполняться там, где это необходимо. Описанные в процедуре операторы образуют код процедуры.
Любая инструкция VBA помещается в отдельной строке кода. Если запись команды оказывается слишком «длинной» и «не вписывается» в одну строку в окне программы, что затрудняет просмотр кода, ее можно разбить на несколько строк с помощью символов продолжения строки кода ‘ _’ (в конце строки, которая должна быть продолжена, ставятся пробел и символ подчеркивания). Если строка заканчивается на эти символы, следующая строка рассматривается как ее продолжение.
Для большей наглядности перед началом каждой инструкции ставятся пробелы (задается отступ с помощью табуляции). Отступы позволяют зрительно структурировать программу на экране, подчеркнуть вложенность команд в процедурах.
Инструкции и описания в процедурах сопровождаются комментариями. Комментарием считается текст, следующий за одиночным апострофом (символ ') до конца строки. Даже при записи макроса автоматически генерируется комментарий по информации, введенной в диалоговом окне «Запись макроса».
Самой «простой» инструкцией VBA является команда, имеющая вид:
ИмяПеременной = Выражение
или
Let ИмяПеременной = Выражение
Она осуществляет пересылку значения выражения, записанного в правой его части (после знака ‘=’), в переменную, имя которой указано в левой части оператора (перед знаком ‘=’). Тип значения выражения должен соответствовать типу переменной (если он задан явным описанием). В некоторых случаях автоматически выполняется преобразование типа. Полный синтаксис оператора предусматривает использование инструкции Let. Но инструкция Let необязательна и чаще всего опускается.
Для присвоения объекта переменной, описанной как объект, применяется инструкция Set. Ключевое слово Set обязательно. Инструкции, задающие значение свойства объекта, также являются инструкциями присвоения. Более детально объекты и их свойства рассматриваются ниже, так как набор объектов является специфичным для каждого приложения.
Более подробную информацию можно получить в справочной системе VBA (раздел «Инструкции присвоения»).
Другие инструкции, стандартные структуры управления (ветвления, циклы) описаны ниже.
Команды, включенные в процедуру, выполняются, когда к ней происходит обращение (вызов процедуры). Для идентификации процедуры при ее вызове ей присваивается имя, которое указывается в заголовке процедуры. Все имена в VBA состоят из одного слова – идентификатора, представляют собой последовательность букв и цифр, в имени не должно быть разделителей.
Процедура может вызываться в качестве макроса или функции из приложения Office.
5.2.3. Использование параметров
Для повышения гибкости использования процедур, обеспечения возможности их настройки на различные условия выполнения в описании процедуры могут быть заданы формальные параметры, которые являются фактически лишь обозначениями исходных данных, передаваемых в процедуру для обработки, и результатов ее выполнения. Список параметров задается в заголовке процедуры вслед за ее именем.
При вызове процедуры указывается ее имя и, если необходимо, список фактических параметров (аргументов), которые будут подставлены вместо описанных в процедуре формальных параметров и будут использованы при выполнении всех инструкций, включенных в код процедуры. Передаваемые в процедуру аргументы определяют реальные данные, задача обработки которых решается при обращении к процедуре.
Между формальными и фактическими параметрами при вызове процедуры должно быть установлено соответствие. По способу задания этого соответствия различают позиционные и именованные аргументы (параметры).
Позиционные аргументы при вызове процедуры задаются в строго определенном порядке (этот порядок соответствует порядку соответствующих формальных параметров, заданных в списке при описании процедуры), их значения разделяются запятыми. Если значение какого-либо аргумента при обращении к процедуре не задается (это допускается, когда аргумент является необязательным), вместо него ставится запятая, если только пропущенный параметр не является последним в списке. Например:
Answer = InputBox(“Введите имя:”, “Кто Вы?”, ,100, 100)
показывает обращение к стандартной процедуре InputBox, где используется передача позиционных аргументов. В середине списка при вызове процедуры пропущен необязательный аргумент, задающий значение, выводимое по умолчанию в качестве результата, а в конце списка пропущены необязательные параметры, задающие подсказки при работе с диалоговым окном. При этом сложно понять назначение каждого аргумента (можно обратиться за помощью к справочной системе).
Именованные аргументы позволяют указывать при вызове процедуры значения в произвольном порядке: соответствие между формальными и фактическими параметрами задается по имени. Ниже приведен пример обращения к процедуре Answer, где соответствие между формальными параметрами и передаваемыми в процедуру аргументами устанавливается по имени (символ подчеркивания в конце строки означает, что в следующей строке содержится продолжение оператора):
Answer = InputBox (Prompt := “Введите имя:”, _ Title := “Кто Вы?”, _ Xpos :=100, _ Ypos :=100)
Такой способ передачи аргумента является более информативным при чтении текста программы.
Для передачи аргументов в процедуру существует два способа: передача параметров по ссылке и по значению.
При передаче аргумента по значению создается копия исходного значения (значения фактического параметра) и это значение присваивается соответствующему формальному параметру. Изменения аргумента в процедуре не распространяются на значение переданного фактического параметра. Для того чтобы указать, что аргумент должен передаваться по значению, перед его именем в списке формальных параметров вставляется ключевое слово ByVal.
При передаче аргумента по ссылке копия исходного значения не создается. Соответствующий формальный параметр становится лишь обозначением фактического параметра при выполнении кода процедуры. Все выполняемые над ним действия выполняются над указанным фактическим параметром. Таким образом, в результате выполнения процедуры исходное значение аргумента может быть изменено. Данный способ передачи аргумента задается при описании процедуры с помощью ключевого слова ByRef, записываемого перед именем формального параметра в заголовке процедуры.
По умолчанию аргументы передаются в процедуры по ссылке. Это эффективно, так как все аргументы, передаваемые по ссылке, требуют одинакового времени для передачи и одинакового количества памяти (4 байта) для передачи ссылки (адреса), независимо от типа данных аргумента. При этом следует учитывать, что аргумент, передаваемый в процедуру по ссылке, должен быть того же типа, что и соответствующий формальный параметр.
Если включить ключевое слово ByVal в описание процедуры, то аргумент будет передан по значению. Аргументы, переданные по значению, занимают от 2 до 16 байт на процедуру, в зависимости от типа данных аргументов. Типы данных большего размера требуют на передачу немного больше времени. По этой причине обычно не следует передавать по значению, например, строки.
При описании параметров в процедуре может быть использовано ключевое слово Optional, которое применяется для обозначения тех аргументов, которые не являются обязательными. Если какой-либо параметр не является обязательным, то и все аргументы, следующие за ним в списке формальных параметров, также будут необязательными. Все необязательные параметры имеют тип Variant. Ключевое слово Optional записывается перед именем параметра и описанием способа его передачи.
Ключевое слово ParamArray используется для принятия в процедуре произвольного числа аргументов и упаковки их в массив переменных типа Variant. Такое описание можно использовать только для последнего параметра в списке. Более детальную информацию можно получить в справочном руководстве VBA.
В программах на языке VBA используется несколько видов процедур: подпрограммы, функции, свойства. Процедуры реализуют обработку событий. Более подробно средства создания и вызова процедур рассматриваются ниже.
