Листинг 1. Объявление пользовательского типа

Создание модулей класса

Проекты и модули

Вспомним, что под проектом мы понимаем набор всех программных составляющих документа.

В основе реализации проекта в среде VBA лежит понятие модуля.

В VBA вся программа состоит из модулей.

Модуль – это набор описаний и процедур на языке VBA, собранных в одну программную единицу.

В VBA существуют два основных типа модулей:

· модули класса;

· стандартные модули.

К модулям класса относятся модули форм, которые связанны с определенной формой. В процессе создания формы мы создаем класс, который является наследником класса UserForm. Модули форм и отчетов обычно содержат процедуры обработки событий, включающих вызовы процедур, добавленных в стандартные модули. Для создания модуля класса достаточно выполнить в редакторе VB команду "Insert" – "Class Module" ("Вставка" – "Модуль класса").

Стандартным называется модуль, не связанный ни с одним объектом (например, формой или отчетом). Обычно в стандартных модулях содержатся часто используемые процедуры, функции.

Таким образом, можно сделать следующий вывод. Процедуры и функции являются основными компонентами программы на VBA. Программа может состоять (и обычно состоит) из многих процедур и функций, которые располагаются в одном или нескольких модулях. Модули группируются в проекты, при этом в одном проекте может содержаться несколько различных программ, использующих общие модули или процедуры.

Ранее были определены основные термины и понятия объектно-ориентированного программирования, такие как объект, свойство, метод, событие и т.д. (см. "Введение в VBA"). Теперь подробнее остановимся на рассмотрении понятия класс.

В предыдущем разделе шла речь о возможности определения в VBA пользовательских типов (см. "Массивы и пользовательские типы данных"). Прямой доступ к полям записи позволяет программисту свободно работать с данными этого типа.

Определим пользовательский тип Person (см. листинг 1 (см. здесь)).

Type Fam firstName As String lastName As StringEnd Type Type Person Fio As Fam Birthdate As DateEnd Type

Теперь при необходимости можно определить операции для более удобной работы с данными. Вот, например, какие операции можно определить для типа Person:

· InitPerson – инициализация полей записи;

· PrintPerson – печать полей записи;

· CopyPerson (Source As Person) – копирование источника (записи Source) – аналог оператора присвоения.

Естественно, собрать определение типа и операций над ним необходимо в одном месте. Такое объединение представляет уже полное, "настоящее" определение типа – класс.

Класс (class) можно определить как описание совокупности сходных между собой объектов. Класс задает свойства и поведение объектов класса. Синтаксически классы в VBA оформляются в виде модуля класса. Пользовательские классы конструируются в модулях классов, которые создаются в редакторе Visual Basic командой "Вставка" – "Модуль класса" ("Insert" – "Class Module"). При создании класса необходимо предусмотреть его инициализацию, описание свойств и методов, которыми будет наделен объект.

Процесс создания класса можно описать в виде следующей последовательности шагов:

1. Выберите команду "Вставка" – "Модуль класса" ("Insert" – "Class Module"). Откроется окно нового модуля класса.

2. Нажмите клавишу F4 и присвойте в появившемся окне свойству Name имя класса. Имя модуля класса является именем класса объектов.

3. В разделе описания модуля объявите переменные уровня модуля, которые используются как "значения свойств".

4. Инициализируйте класс при помощи процедуры Private Sub Class_Initialize. В этой процедуре надо указать значения, принимаемые по умолчанию переменными уровня модуля, описывающими "значения свойств".

5. При помощи процедур Property Let объявите имена свойств, значениями которых являются числовые данные, а при помощи процедур Property Set объявите имена свойств, значениями которых являются объекты. Если какое-то свойство – только для чтения, то для него не надо составлять процедуру Property Let.

6. При помощи процедур Property Get установите возможность считывания значения свойств.

7. Создайте методы класса. Методы создаются при помощи обычных процедур и функций. Если метод возвращает число, то для его конструирования используется функция, а в остальных случаях – процедура.

8. Допустимо также создание процедуры Private Sub Class_Terminate для удаления объекта из памяти по завершении работы с ним.