- •Л.Н. Лядова, н.В. Фролова, в.В. Ланин, е.Б. Замятина, м.А. Плаксин, б.А. Ермолаев
- •Часть 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.7. Создание объектов пользователя
В VBA у пользователя имеется возможность создавать собственные объекты. Модули класса содержат информацию о создаваемых пользователем объектах. Модуль класса содержит код, используемый для создания объектов, задания их свойств, код методов объектов. Имя соответствующего объекта (точнее класса объектов) используется в качестве имени модуля класса.
При описании свойств и методов нового объекта используется специальный синтаксис.
В объектно-ориентированном программировании используется понятие абстракции. Абстракция – выделение только тех свойств, которые существенны, интересны на определенном уровне рассмотрения. Классы определяют информацию об объекте, действия, выполняемые объектом и над объектом. Класс – это «проект» объектов. Объекты, созданные на основе одного и того же класса, обладают одинаковым набором свойств и методов, но значения свойств могут быть разными, они задаются при порождении экземпляра объекта определенного класса. Экземпляром класса называется объект, созданный на основе класса. На основе одного и того же класса можно создать произвольное количество экземпляров.
Для создания собственного класса необходимо выполнить команду Вставка Модуль класса. После выполнения этой команды в окне проекта у текущего проекта появляется ветвь, представляющая новый класс, и открывается окно модуля этого класса. Для ввода имени нового класса вместо присвоенного ему при создании стандартного имени нужно открыть окно свойств этого компонента и изменить соответствующее свойство (Name). Других свойств у класса пока нет.
При создании свойств класса требуется предусмотреть возможность выполнения двух операций: получения текущего значения свойства и установки значения свойства. Эти операции выполняются с помощью процедур Property Get и Property Let. В заголовках этих процедур указывается имя соответствующего свойства.
Процедура Property Let используется для установки значения свойства. Основной функцией этой процедуры является проверка того, является ли устанавливаемое значение допустимым. Устанавливаемое значение всегда задается в инструкции Property Let (заголовке процедуры) последним параметром. Переданное при обращении к процедуре значение аргумента, если оно соответствует условию допустимости, становится текущим значением свойства и запоминается в переменной уровня модуля, доступной в любой процедуре модуля класса.
Процедура Property Get используется для получения текущего значения свойства. Данная процедура просто должна присвоить значение соответствующей переменной уровня модуля свойству (т.е. эта процедура должна содержать оператор присваивания, в левой части которого указывается имя свойства).
Свойства можно создать автоматически с помощью диалогового окна команды Вставка Процедура. В поле «Имя» диалогового окна «Вставка процедуры» задается имя свойства. Переключатель группы «Тип» устанавливается в позиции «Свойство». Если свойство имеет общую область определения, т.е. доступно для просмотра и изменения программисту, использующему объект, то следует установить в группе «Область определения» переключатель «Общая», если же свойство можно использовать только в модуле класса, то выбирается переключатель «Личная». Скрытые, недоступные для использования программистом компоненты можно просмотреть с помощью команды Показать скрытые компоненты контекстного меню окна просмотра объектов.
В результате выполнения программы в модуль класса вставляются «заготовки» процедур. Например, если с объектом связан файл, имя этого файла является свойством этого объекта. Описания переменной для хранения этого свойства при работе с объектом и процедур установки/получения значения свойства могут быть следующими:
Dim Pic_File As String ‘ Имя файла объекта
Public Property Get Файл() As String
' Свойство, указывающее файл, в котором хранится объект
' Файл = Pic_File
End Property
Public Property Let Файл(ByVal vNewValue As String)
' Установка свойства - файла, в котором хранится объект.
' Файл может размещаться только на диске C
If (vNewValue <> "") And _
(Left(vNewValue, 3) = "C:\") And _
(Len(vNewValue) > 3) Then
Pic_File = vNewValue
Else
x = MsgBox("Недопустимое имя файла!", _ vbCritical, "Ошибка в свойстве")
End If
End Property
Для создания и работы с экземплярами объектов класса нужно описать объектные переменные соответствующих типов инструкциями вида
Dim ОбъектнаяПеременная As Класс
и присвоить им значения с помощью инструкции
Set ОбъектнаяПеременная = New Класс
Предположим, что в проекте создан модуль класса «МойКласс», в который включены приведенные выше инструкции. Свойство «Файл» доступно программно, в приведенной ниже процедуре создается объект, принадлежащий классу «МойКласс», устанавливается его свойство «Файл» и значение свойства выводится на экран:
Public Sub СозданиеОбъектаПользователя()
Dim A As МойКласс
Set A = New МойКласс
MsgBox A.Файл
A.Файл = "C:\Объект"
MsgBox A.Файл
End Sub
Код процедур установки и получения свойства можно ввести вручную в окне программы модуля класса.
Методы используются для реализации операций над объектом, изменения его свойств в соответствии с определенными правилами. Создание методов класса – это написание процедур. Если метод вычисляет и возвращает некоторое значение, то необходимо написать функцию. Если метод выполняет определенные действия, но не возвращает результат, пишется подпрограмма.
Если в окне модуля класса выбрать из списка объектов строку «Class», в списке «Процедура» появляются два элемента. С их помощью можно создать процедуру инициализации (Initialize) и уничтожения (Terminate) для объектов этого класса. В процедуре инициализации можно записать код для присваивания начальных значений свойствам создаваемого объекта. А в процедуре уничтожения выполнить действия, связанные с удалением этого объекта. Например, в модуль класса «МойКласс» можно вставить код инициализации объекта:
Private Sub Class_Initialize()
Pic_File = "C:\Temp\ObjFile"
File_Number = FreeFile
Open Pic_File For Random As File_Number
End Sub
где переменная File_Number описана на уровне модуля:
Dim File_Number As Integer ' Номер файла
При создании экземпляра объекта данного класса открывается или создается файл
Если при работе с объектом используются, например, какие-либо временные файлы, то при уничтожении объекта можно удалить эти файлы:
Private Sub Class_Terminate()
MsgBox "Уничтожение!"
Close File_Number
Kill (Pic_File)
End Sub
При уничтожении объекта, если выполнить приведенную выше процедуру СозданиеОбъектаПользователя, произойдет ошибка, так как в ней изменено свойство, определяющее имя файла.
В модуле класса можно описать специальный метод создания объектов с определенными свойствами, задаваемыми параметрами метода.
