4272

Создание объектов с помощью модуля классов

Контрольная

Информатика, кибернетика и программирование

Создание объектов с помощью модуля классов. Создание объектов — один из самых эффективных способов программирования и управления приложениями. Перед рассмотрением преимуществ использования объектов необходимо разобраться с определениями. Объект...

Русский

2012-11-15

231.5 KB

13 чел.

Создание объектов с помощью модуля классов.

Создание объектов — один из самых эффективных способов программирования и управления приложениями. Перед рассмотрением преимуществ использования объектов необходимо разобраться с определениями.

Объекты представляют собой различные сущности. Люди, машины и здания — все это разные виды объектов. В программировании слово объект используется для описания одного специфического элемента, например, формы или элемента управления. Вне всяких сомнений, у любого разработчика имеется определенный опыт работы с этими типами встроенных объектов.

Microsoft Access приобретает все более объектно-ориентированный характер, позволяя создавать собственные объекты и добавлять к-ним свойства и методы. Примеры пользовательских объектов могут включать объект клиента, объект счета, объект пользователя, объект подключения данных и звуковой объект. Код данной статьи описывает многочисленные пользовательские объекты (см. базу данных "Creating Objects with Class Modules.mdb", показанную на рис. 1).

РИСУНОК 1. Примеры пользовательских объектов, программный код которых содержится на прилагаемом к книге CD-ROM

Объекты создаются с помощью модулей классов. Модуль класса — это мобильная, самодостаточная единица программного кода, разработанная для специальных целей. Класс указывает свойства и методы для каждого объекта в данном классе.

Разработчики часто путают термины "класс" и "объект". Класс представляет собой описание или шаблон свойств и методов объекта. Сам по себе он не может существовать. Если разработчику нужно использовать код в модуле класса, создается экземпляр класса. Этот экземпляр и представляет собой объект.

Таким образом, нельзя говорить о создании экземпляра объекта. Объект — это и есть экземпляр! Отдельный объект определяется как экземпляр класса. Из одного класса можно создать множество объектов, каждый с разными значениями свойств.

СОВЕТ

В данной статье описывается создание объектов с помощью модулей класса. Следует помнить, что модули формы представляют собой модули класса. Можно добавлять свойства и методы к формам таким же способом, что и к пользовательским объектам.

Преимущества использования объектов

Существует много преимуществ использования объектов, среди которых возможность создания сложного программного кода, использования IntelliSense, упрощенное создание и поддержка программного кода и т.д.

Сокрытие сложного программного кода

Возможность сокрытия сложного программного кода является одним из преимуществ использования объектов. Опытный разработчик может создавать сложные программы, такие как процедуры Windows API, процедуры доступа к данным, обработки строк и т.д. Менее опытные разработчики могут воспользоваться преимуществами объекта, используя вызов его свойств и методов. При этом нет необходимости разбираться в рабочем коде объекта.

Использование технологии Microsoft IntelliSense

Для использования объекта разработчику достаточно выбрать данный объект и его свойства или метод с помощью технологии IntelliSense (рис. 2). Например, один из объектов, рассматриваемый в данной статье, представляет собой объект обработчика ошибок, который можно использовать в приложениях Access. Поскольку весь код обработчика ошибок включен в состав объекта сЕггог, разработчику достаточно указать объект и выбрать необходимые свойства или метод. Например, если разработчику нужно, чтобы при возникновении ошибки в приложении было отправлено почтовое сообщение, достаточно вызвать метод "email":

cError.email

РИСУНОК 2. При работе с объектами можно использовать технологию Microsoft IntelliSense.

Обратите внимание на то, как легко использовать объекты. С помощью технологии Microsoft IntelliSense достаточно просто ввести имя объекта (сЕггог) и добавить точку — при этом отображаются все свойства и методы данного объекта. Это сильно упрощает и ускоряет написание программного кода.

Организация кода

Создание классов помогает структурировать программный код, улучшая его восприятие и упрощая работу с ним. Весь программный код, выполняющий ту или иную задачу, содержится в классе. Упаковка кода в одну компактную группу со свойствами и методами, характеризующими объект, называется инкапсуляцией.

Просмотр объектов в браузере объектов

Упаковка кода в классы позволяет разработчикам использовать Object Browser (Браузер объектов) для просмотра свойств, методов и другой информации. Далее в данной статье будет представлен пользовательский объект, просматриваемый с помощью браузера объектов.

Создание экземпляров объекта

Рассмотрим повторно используемый в приложении программный код. Фактически его можно использовать одновременно в нескольких экземплярах объекта. Примером может служить код подключения к данным. Каждый раз, когда пользователь осуществляет поиск покупателя, открывает форму или получает доступ к полю со списком, с сервера должны быть получены данные. Вместо того чтобы дублировать код для каждой из данных процедур, лучше создать объект Data Connection, позволяющий получить данные с сервера.

Упрощение кода в целях последующей поддержки и обновления

С помощью классов единственный фрагмент кода можно использовать в приложении множество раз без повтора кода. Если, например, код доступа к данным один и тот же в нескольких процедурах, необходимо найти все места, где появляется данный блок кода, и проверить, не нужно ли внести изменения. Такой подход занимает очень много времени и совершенно неэффективен. С другой стороны, если используется объект Data Connection, все обновления или изменения кода доступа к данным необходимо внести лишь в одном месте — модуле класса.

Ограничение доступа к коду

Классы позволяют контролировать, кто получает доступ к программному коду и при каких обстоятельствах. С помощью классов можно защитить свойства и методы, управляя их отображением вне класса.

Переносимость кода

Поскольку модуль класса является автономной единицей кода, его с легкостью можно использовать в разных приложениях Access.

Объекты, свойства и методы

Перед рассмотрением процесса создания объектов необходимо вспомнить основы. Важно понимать суть терминов объект, свойства и методы, иначе оставшаяся часть статьи будет весьма трудной для восприятия.

Объект — это элемент, которым можно управлять, манипулировать и который можно программировать. В Access объектами являются формы, текстовые поля, командные кнопки и многое другое. В данной статье рассматриваются примеры создания пользовательских объектов.

Свойство — это характеристика объекта. Свойство можно рассматривать и как описание чего-либо, поскольку оно описывает или характеризует объект. В Access свойства текстового поля включают Name, Visible, Forecolor и др. Большинство свойств объекта можно как считывать, так и устанавливать. В данной статье приведены примеры создания пользовательских свойств и описаны способы управления ими.

Метод представляет собой действие, которое можно выполнить над объектом. Метод можно рассматривать как действие. Например, одним из методов формы Access является метод Close. В данной статье приведены примеры создания пользовательских методов.

Создание классов

Для создания классов используются модули класса. Класс определяет свойства, методы и события, обеспечивая четко определенный и полностью документированный пользовательский интерфейс.

Вставка модуля класса

Создание класса не вызывает никаких сложностей. Добавление свойств и методов к объекту требует несколько больших усилий.

Для создания класса необходимо вставить модуль класса в приложение Access и присвоить ему имя. Имя модуля класса является именем объекта.

Чтобы вставить модуль класса, необходимо в меню выбрать пункты Insert | Class Module (Вставка | Модуль класса). После этого откроется окно редактора Visual Basic. В окне кода можно определять любые свойства, методы и события для данного объекта. Перед тем как продвигаться дальше, необходимо присвоить имя модулю класса (рис. 3).

РИСУНОК 3. Присваивание имени модулю класса.

СОВЕТ

Присваивать имя модулю класса следует осторожно, поскольку данное имя будет именем объекта. С помощью это- го имени разработчики как раз и получают доступ к коду, пользуясь технологией IntelliSense. Кроме того, полезно перед именем объекта указать сокращенное название компании, чтобы всегда можно было увидеть, какие пользовательские объекты были созданы в данной компании.

Создание свойств

Существует два способа создания свойств класса: глобальные переменные либо процедуры свойств.

СОВЕТ

Программный код данной статьи включает многочисленные примеры объектов. На следующих нескольких страницах в иллюстративных целях используется простейший пример — объект cUser. Объект cUser содержит информацию о текущем зарегистрированном пользователе, включая его имя. Данный объект можно использовать в случаях, когда в приложении необходимо узнать имя пользователя, например, при обработке ошибок либо при записи имени автора примечаний или документов. В приведенном примере объект cUser используется для отображения приветствия пользователю при регистрации.

Использование общедоступных переменных

Свойство можно создать с помощью объявления общедоступной переменной в разделе объявлений модуля класса. В приведенном ниже примере создается свойство UserType объекта cUser:

Public Name as String

Public UserType as String

После этого несложного объявления пользователи могут устанавливать и получать значения свойства. Для установки значения свойства применяется следующий программный код:

cUser.Name = "Steve"

cUser.UserType = "Management"

Для выборки значения свойства используется следующий программный код (рис. 4);

MagBox cUser.Name

Использование процедур свойств

Кроме того, свойства можно добавлять к объектам с помощью специальной процедуры VBA, называемой процедурой свойства. Существует три типа процедур свойств: Property Let для получения значения свойства. Property Get — для установки значения свойства и Property Set — для передачи объекта в качестве свойства.

Процедуры свойств позволяют ограничить доступ к значениям свойств. Ключом к пониманию действия процедур свойств является тот факт, что значение свойства хранится в приватной переменной на уровне модуля. Таким образом, первым шагом будет создание приватной переменной на уровне модуля, а затем — создание выражений Property Let и Property Get.

СОВЕТ

Процедуры свойств могут быть общедоступными или приватными, как и любые другие процедуры. Общедоступные процедуры свойств доступны всем другим процедурам во всех модулях; приватные процедуры свойств доступны только процедурам того модуля, в котором они были объявлены,

Создание приватной переменной модуля

При использовании процедур свойств значение свойства хранится в приватной переменной модуля. Создатель класса определяет, отображается ли данное свойство вне модуля.

Ниже приведен пример создания приватной переменной на уровне модуля для свойств Name и Type объекта cUser.

Option Explicit

' Создание приватной переменной в разделе объявлений.

Private mstrName as String

Private mUserType as String

РИСУНОК 4. Установка и получение значений свойств объекта с помощью IntelliSense.

Процедура Property Let

Процедура Property Let используется для установки значения свойства. Если не нужно, чтобы другие пользователи устанавливали значение свойства, не следует включать процедуру Property Let. Ниже приведен пример создания процедуры Property Let для свойства Name объекта cUser:

Public Property Let Name (UserName as String)

' Принимается значение, передаваемое в UserName, и сохраняется

' в приватной переменной (mstxName).

mstrName = UserName

End Property

Рассмотрим данную процедуру подробнее. Во-первых, поскольку существует процедура Property Let, можно устанавливать свойство Name, так как данное свойство отображается вне модуля. Разработчик мог бы присвоить этому свойству следующее значение:

cUser.Name = "James"

Значение James, передаваемое в процедуру свойства, сохраняется в переменной UserName. Процедура Property Let принимает значение переменной UserName (James) и записывает его в приватной переменной модуля mstrName. Рассматриваемая процедура передает один параметр, хотя на самом деле процедуры свойств могут передавать много параметров. Значение свойства может быть получено только в том случае, когда существует процедура Property Get.

Процедура Property Get

Процедура Property Get позволяет получить значение свойства. Если не нужно, чтобы другие пользователи могли получить значение свойства, не следует включать оператор Property Get. Оператор Property Get получает значение, хранящееся в приватной переменной, и возвращает его в качестве значения свойства. Приведенный ниже пример представляет собой оператор Property Get для свойства Name объекта cUser:

Public Property Get Name () as String

' Получение значения, записанного в приватной переменной (mstrName),

' и запись его в значение свойства.

Name = mstrName

End Property

Пользователь легко может получить значение свойства (если существует выражение Property Get), воспользовавшись следующим кодом:

MsgBox cUser.Name

СОВЕТ

Тип данных процедуры Property Let должен быть таким же, как и для процедуры Property Get. Например, Property Let для свойства Name принимает строковый аргумент. Таким образом, процедура Property Get также должна воз- вращать строковый тип данных. 

Процедура Property Set

Процедура Property Set позволяет создать процедуру свойства, в ходе которой устанавливается ссылка на объект. При присваивании объекта в процедуре Property Set используется ключевое слово Set.

В данном примере используется объект cForm. Объект cForm содержит свойство Form, которое должно быть передано как объект Form. Код в модуле класса cForm приведен ниже:

Option Compare Database

' Объявление приватной переменной на уровне модуля.

Private mobjForm As Form

Public Property Get Form() As Variant

' Получение объекта, скрытого в приватной переменной (mobjForm) ,

' и запись его в значение свойства.

Set Form = mobjForm

End Property

Public Property Set Form(FormObject)

' Получение переданного объекта (FonnObject)

' и запись его в приватную переменную (mobjForm).

Set mobjForm = FormObject

End Property

При загрузке frmPropertySet форма передается в свойство Form. Поскольку это объект, используется ключевое слово Set. Затем можно получить имя объекта формы для окна сообщений. Ниже приведен код для формы frmPropertySet:

' В данном примере используется объект "cForm" . Об"ьект "cForm"

' содержит свойство "Form". При загрузке этой формы (frmPropertySet) она

' передается как объект в свойство "Form". При щелчке на кнопке

' "Property Set" считывается имя формы.

Private mobjForm As cForm Private Sub cmdClose_Click()

DoCmd.Close acForm, "frmPropertySet", acSaveNo

End Sub

Private Sub cmdPropertySet_Cliclt()

MsgBox "The form object (in the 'Form' property) has a name of: " _

mobjForm.Form.Name, vblnfonnation, "Property Set Example"

End Sub

Private Sub Form_Load()

Set mobjForm = New cForm

Set mobjForm.Form = Forms!frmPropertySet End Sub

Private Sub Form_Unload(Cancel As Integer)

Set mobjForm = Nothing

End Sub

Общедоступная переменная и процедуры свойств

Простейший способ создания свойств класса заключается в использовании общедоступных переменных. Однако данный подход имеет некоторые недостатки. Общедоступные переменные всегда отображаются вне модуля. Таким образом, невозможно контролировать доступ к значениям свойств. Если кто-либо меняет значения свойств без ведома других пользователей, это может вызвать нежелательные проблемы.

Еще одно преимущество процедур свойств заключается в том, что можно создать свойства "только для чтения" или "только для записи". Например, если нужно создать свойство Password, можно разрешить пользователям устанавливать пароль, но не получать его (только для записи). Для создания свойства "только для записи" необходимо включить выражение Property Let, но не включать выражение Property Get.

Кроме того, с помощью процедур свойств можно выполнять действия в коде в зависимости от того, установлено свойство или получено.

Создание перечисляемых типов данных

Перечисляемый тип — это значение свойства, которое может быть передано разработчику при использовании объекта. Например, при установке свойства Visible для формы после ввода знака равенства можно заметить, что возможен выбор значений True и False в раскрывающемся списке (рис. 5).

 

РИСУНОК 5. Выбор True или False в раскрывающемся списке.

Точно так же можно передать эти значения, создав перечисляемые типы.

В разделе объявлений модуля класса для указания значений свойств необходимо воспользоваться ключевым словом Enum. Например, если для свойства Type объекта cUser необходимо создать раскрывающийся список со значениями Manager, Staff или Unknown, в разделе объявлений можно использовать следующий код:

Public Enum UserList

Manager

Staff

Unknown

End Enum

Следующий шаг — использование перечисляемого типа данных (UserList) в качестве типа данных свойства Type класса cUser. Приведенный ниже пример иллюстрирует, как это сделать. В данном случае свойство было создано как общедоступная переменная.

Пример 1. Свойство объявляется как строковая переменная.

Public UserType as String

Пример 2. Свойство объявляется как перечисляемый тип данных.

Public UserType as UserList

Значения свойств можно установить с помощью раскрывающегося списка, предусмотренного технологией IntelliSense (рис. 6).

РИСУНОК 6. Пример перечисляемого типа данных

Чтобы показать, что значение свойства было выбрано из перечисляемых типов данных, каждый тип данных пронумерован, начиная с нуля, по возрастанию.

СОВЕТ

Используемые значения свойств не ограничиваются перечисляемыми типами данных. В предыдущем примере перечисляемый тип данных включает три члена: Manager, Staff и Unknown. VBA не препятствует разработчику проигнорировать значения в списке и ввести другое значение (например, FullTime). Чтобы ограничить выбор пунктами в списке, необходимо воспользоваться числовыми значениями перечисляемых пунктов. Например, если в списке имеется три пункта (и нумерация начинается с нуля), можно запретить использование любых элементов, значения которых меньше нуля и больше двух.

Создание методов

Метод — это действие, которое может быть выполнено над объектом. Чтобы создать метод для класса, достаточно создать общедоступную подпрограмму или функцию. Предположим, что нужно отслеживать дату и время каждой регистрации пользователя. Приведенный ниже код создает метод Login, который вводит в таблицу дату и время регистрации пользователя.

Public Sub Login()

' Создание объектной переменной для набора записей.

Dim rst As ADODB.Recordset

' Создание строковой переменной.

Dim strSQL As String

' SQL-оператор для tbIUsers.

StrSQL = "SELECT * FROM tbIUsers"

' Создание набора записей ADO.

Set rst = New ADODB.Recordset

' Открытие набора записей.

rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

' Добавление новой записи.

rstAddNew

' Запись даты и времени регистрации пользователя.

With rst

!Name = Me.Name

!Date = Date

!Time = Time End With

' Сохранение новой записи.

rst.Update

' Закрытие набора записей.

rst.Close

' Уничтожение объектной переменной.

Set rst = Nothing

End Sub

Использование методов

Для использования данного метода при запуске приложения необходимо ввести код:

cUser.login

Обратите внимание, что пользователям, которым необходимо обновить значение в базе данных, не обязательно разбираться в коде ADO. Они просто используют доступные свойства и методы объекта, которые отображаются с помощью технологии IntelliSense.

Создание событий

Объекты Access включают события. Например, объект формы содержит событие Load, а командная кнопка — событие Click.

Можно создавать события для пользовательских объектов. Для этого в разделе объявлений необходимо воспользоваться ключевым словом Event и указать имя события. Например, можно добавить событие Welcome, которое выполняется при запуске приложения пользователем. Для создания данного события в разделе объявлений модуля класса необходимо ввести следующий код:

Event Welcome()

Чтобы воспользоваться событием, его необходимо сформировать с помощью инструкции Raise в методе объекта. Событие Welcome можно сформировать в методе Login объекта cUser.

Когда пользователь запускает приложение, вызывается метод Login. Благодаря этому вызывается событие Welcome, которое отображает всплывающий экран с персональным приветствием данному пользователю. Используется следующий программный код:

Public Sub Login()

RaiseEvent Welcome

End Sub

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

Использование событий

Чтобы воспользоваться событием Welcome в модуле формы, необходимо объявить объектную переменную для cUser в разделе объявлений модуля и использовать ключевое слово WithEvents. Зарезервированное слово WithEvents применяется для отображения и использования событий объекта cUser. Соответствующий код приведен ниже:

' Данное выражение следует поместить в раздел объявлений модуля.

Private WithEvents objUser As cUser

СОВЕТ

Событие WithEvents можно использовать только в модулях класса (модули форм являются модулями класса). В стандартных модулях WithEvents использовать нельзя.

После объявления переменной на уровне модуля с помощью ключевого слова WithEvents необходимо в левом поле со списком в верхней части окна модуля выбрать объект cUser. В правом поле со списком будут отображены события объекта cUser. Выберите событие Welcome, и в окне кода появится процедура, в которой можно записать соответствующий код для ответа на событие.

На рис. 7 приведен код, отвечающий на событие Welcome.

РИСУНОК 7. Процедура, использующая событие Welcome объекта cUser.

В результате пользователь при каждом запуске приложения увидит всплывающий экран с приветствием (рис. 8).

 

РИСУНОК 8. Всплывающий экран с приветствием

Вызов событий Initialize и Terminate

Модули класса автоматически включают события инициализации и завершения. Для использования данных событий необходимо выбрать событие в поле со списком в верхней части окна кода.

Событие инициализации вызывается при создании объекта. Например, если нужно, чтобы выполнялся определенный код при создании объекта cUser, данный код можно поместить в событие Initialize.

Событие завершения происходит при разрушении объекта. Здесь удобно записывать код очистки, выполняющийся при закрытии подключений к базам данных, освобождении объектных переменных и т.д.

Использование объектов

На данном этапе существует объект cUser со своими свойствами и методами. Чтобы использовать его в модуле класса, достаточно ввести имя объекта и добавить в конце точку. IntelliSense отобразит список свойств и методов объекта.

Для использования объекта в классе, который создает объект, употребляется ключевое слово Me. Например, чтобы присвоить имя пользователя, необходимо ввести:

Me.User = "Steve"

Использование объекта вне модуля класса cUser (в формах либо стандартных модулях) разбивается на два этапа. Во-первых, необходимо определить объектную переменную для использования в качестве ссылки на объект. Во-вторых, используется ключевое слово Set для создания ссылки из объектной переменной

на объект.

Создание объектной переменной

Переменная — это участок памяти, отведенный для хранения или использующийся при считывании информации. Вне всяких сомнений, у разработчиков имеется громадный опыт работы с простыми переменными, такими как строковые и целочисленные переменные. Ниже приведены примеры объявления и использования двух простых переменных:

Dim sfcrNaor aa String

Dim I as integer

strNama = "James"

I = 10

В этих примерах переменные включают специфический тип данных, и информация может храниться и считываться по необходимости.

Переменная Object объявляется с помощью выражения Dim, как и простые переменные:

Dim objUser as cUser

Присваивание объектной переменной объекту

Для установки ссылки объектной переменной на объект используется ключевое слово Set. Например:

Set objUser = New cUser

ПРЕДОСТЕРЕЖЕНИЕ

Рекомендуется всегда объявлять операторы Dim и Set в отдельных строках. Не следует комбинировать данные операторы в одной строке, как, например, Dim objUser = New cUser. При этом код выполняется медленнее и момент и, образования объекта (записи в память) определить невозможно.

Использование объекта

После создания и установки объектной переменной доступ к свойствам и методам объекта можно получить с помощью технологии IntclliSense. Используя точечную нотацию, можно установить и считать значение свойства, а также выполнить метод.

Установка значения свойства: Object.Property = Value

Получение значения свойства: MsgBox Object.Property

СОВЕТ

Если при попытке использования объекта обнаружилось, что IntelliSense не отображает свойств и методов объекта, возможно, это свидетельствует о том, что не создана либо не установлена объектная переменная. Однако иногда IntelliSense не отображает элементы даже в том случае, когда код правилен. В данном случае следует предположить, что код правилен, и проверить его. Компания Microsoft не предусматривала работу IntelliSense со всеми элементами кода.

Освобождение объекта

Закончив работу с объектной переменной, ее необходимо освободить, установив значение объекта равным Nothing. Таким образом можно высвободить ценные ресурсы. Соответствующий синтаксис приведен ниже:

' Освобождение объектной переменной.

Set objUser = Nothing

СОВЕТ

При создании объектной переменной рекомендуется сразу перейти в конец процедуры и установить значение объектной переменной, равное Nothing. Это позволит не забыть освободить объектную переменную после создания большой процедуры.

Создание нескольких экземпляров объекта

Класс содержит определенный набор свойств и методов. Этим он напоминает шаблон или каркас. Для иллюстрации рассмотрим открытие нового документа в Microsoft Word. При создании нового документа

Word можно воспользоваться шаблоном, например. Contemporary Letter (Современное письмо). После выбора шаблона в документ можно внести изменения. Данные изменения вносятся в новый документ, а не в шаблон. Тот же самый принцип действует в случае с классами.

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

Одно из преимуществ модулей класса заключается в том, что можно создать много экземпляров класса. Каждый экземпляр создастся с базовым набором свойств и методов, но после создания каждый из них может быть изменен различным образом. Например, предположим, создано пять объектов cUser. Вес пять объектов могут иметь разные значения свойств и разные методы. Например, значение свойства Name в одном объекте может быть James, а в другом — Steve.

Для создания нескольких экземпляров объекта достаточно создать дополнительные объектные переменные и присвоить каждую объектную переменную новому объекту. Соответствующий код приведен ниже.

Public Sub ManyUsersO

Dim objUser1 as cUser

Dim objUser2 as cUser

Set objUser1 = New cUser

Set objUser2 = New cUser

ObjUser1.Name = "James"

ObjUser2.Name = "Steve"

MsgBox "Current users are: " & objUser1.Name & " and " objUser2.Name

Set objUser1 = Nothing

Set objUser2 = Nothing

End Sub

Дополнительные примеры объектов

В данной статье приведены многочисленные примеры классов для последующего использования (см. базу данных "Creating Objects with Class Modules.mdb" в сопровождающих статью примерах). Ниже кратко описан каждый из этих объектов.

Объект TextFile

В статье приводится код объекта TextFile, который можно использовать для считывания и записи информации в текстовый файл (рис. 9). Модуль класса включает следующий код:

РИСУНОК 9. Пример объекта TextFile.

Private pintFreeFile As Integer

Private pvarlnfo As Variant

Public Function ReadLineText(strFileName Aa String) As String

pintFreeFile = FreeFile

Open StrFileName For Input As pintFreeFile

Line Input #pintFreeFile, pvarlnfo

ReadLineText = pvarlnfo

Close XpintFreeFile

End Function

Public Function ReadAllText(strFileName As String) As String

pintFreeFile = FreeFile

Open strFileName For Input Aa pintFreeFile

Do Until VBA.EOF(pintFreeFile)

Line Input #pintFreeFile, pvarlnfo

ReadAllText = ReadAllText & vbCrLf & pvarlnfo

Loop

Close #pintFreeFile

End Function

Public Sub WriteLineText(strFileName As String, strText Aa String)

pintFreeFile = FreeFile

Open strFileName For Append As pintFreeFile

Write #pintFreeFile, strText

Close #pintFreeFile

End Sub

Объект Timer

В статье приводится код модуля класса cTimer. Данный модуль класса используется, во-первых, как секундомер для учета времени, а во-вторых, для создания "состояния ожидания", чтобы приостановить выполнение кода на заданное число секунд. Код модуля класса cTimer приведен ниже:

Option Explicit

Private msngStart As Single

Public Sub Wait(lngSeconds As Long)

Do Until Timer > msngStart + IngSeconds

DoEvents Loop

End Sub

Public Sub StartTimerO

BsngStart = Timer

End Sub

Public Function ElapsedTime() As Long

Dim sngTimerStop As Single

sngTimerStop = Timer

ElapsedTime = sngTimerStop - asngStart

msngStart = 0 sngTimerStop = 0

End Function

Объект frmTimer в базе данных "Creating Objects with Class Modules, mdb" иллюстрирует использование таймера для определения промежутка времени и создания "состояния ожидания" (рис. 10).

РИСУНОК 10. Использование таймера для оценки прошедшего времени и создания состояния ожидания

Объект Sound

В статье содержится модуль класса cSound, предназначенный для воспроизведения звуков в приложении Access. Модуль класса cSound содержит только один метод (PIaySound), который передает звуковой файл на обработку вызову Windows API:

' Вызов Windows API.

Private Declare Function sndPlaySound Lib "winmm.dll" Alias _

"sndPlaySoundA" (ByVal IpszSoundName As String, ByVal uFlags As Long) As Long

Public Sub PIaySound(SoundFile As String)

' Воспроизведение звукового файла.

sndPlaySound SoundFile, 1

End Sub

Следующий код инициализирует и обрабатывает объект objSound (рис. 11):

Dim objSound As cSound

Set objSound = New Sound

' При использовании Windows NT необходимо указывать путь "C:\WINMT".

objSound.PIaySound "C:\Windows\chimes.wav"

Set objSound = Nothing

РИСУНОК 11. Пример объекта Sound.

Объект Letter

В код статьи включен модуль класса cLetter, использующийся для создания писем в Microsoft Word. Письмо составляется автоматически. Для этого используется шаблон Microsoft Word, а данные для письма получает SQL-оператор. Метод ShowWord (Boolean) определяет, отображается ли Word для данного пользователя. Иногда требуется отправлять письма непосредственно на принтер без редактирования.

Код модуля класса cSound приведен ниже;

Option Explicit Private objWord As Word.Application

' Локальные переменные для хранения значений свойств. Private mvarTemplate As String ' локальная копия 

Private mvarSQLStatement As String ' локальная копия

Public Property Let SQLStatement(ByVal vData As String)

mvarSQLStatement = vData

End Property

Public Property Get SQLStatement() As String

SQLStatement = mvarSQLStatement

End Property

Public Property Let Template(ByVal vData As String)

mvarTemplate = vData

End Property

Public Property Get Template() As String

Template = mvarTemplate

End Property

Public Sub CreateLetter(DatabasePath As String, ShowWord As Boolean)

' Запись данных о покупателях во временный файл для использования

' почтового слияния. Это быстрее, чем получение данных непосредственно

' из Access.

DoCmd.OutputTo acOutputQuery, "qryCustomers", AcFormatRTF, "С:\Temp.rtf", False

objWord.Documents.Add (Me.Template)

' Запуск почтового слияния.

With objWord.ActiveDocument.MailMerge

.MainDocumentType = wdFormLetters

.OpenDataSource Name:="C:\ Temp.rtf"

.Destination = wdSendToNewDocument

.Execute End With

It ShowWord Then

Me.ShowWord

End If

End Sub

Friend Sub ShowWord()

' Отображение экрана приложения Word для пользователя.

objWord.Visible = True

End Sub

Private Sub Class_Initialize()

1 Переход к следующей строке после оиибки.

On Error Resume Next

' Попытка использовать приложение Word, окно которого уже открыто. Set objWord = Get0bject(, "Word.Application")

' Если истинно. Word не открыт.

If objWord Is Nothing Then

' Запуск новой копии приложения Word.

Set objWord = New Word.Application

' Если истинно, MS Word не установлен.

If objWord Is Nothing Then

MsgBox "MS Word is not installed on your computer"

End If

End If

End Sub

Private Sub Class Terminate()

Set objWord = Nothing

End Sub

Приведенный далее код инициализирует объект objLetter и использует его свойства и методы:

' Переменные Dimension.

Dim objLetter As cLetter

Dim strPath As String

strPath = CurrentProject.Path

' Присваивание объектных переменных объекту cLetter.

Set objLetter = New cLetter

' Шаблон Word для использования в данном документе.

objLetter.Template = strPath & "\Business Services Letter.dot"

' SQL-оператор, использующийся для получения данных для формы.

ObjLetter.SQLStatement = "SELECT * FROM tbICustomers"

' Вызов метода "CreateLetter" для создания письма.

objLetter.CreateLetter strPath С "\0bjects.mdb", True

' Разрушение объектной переменной.

Set objLetter = Nothing

Объект Outlook

В статье приводится код модуля класса cOutlook, используемый для отображения формы Outlook New Message (Новое сообщение) (рис. 12). Если необходимо предоставить пользователям возможность создавать сообщения Outlook из приложения Access, можно воспользоваться методом NewEmailMessage.

РИСУНОК 12. Отображение формы Outlook New Message в приложениях Access

Ниже приводится код модуля класса cOutlook:

Option Explicit

Private mobjOutlook As Outlook.Application

Private mMyItem As Object

Public sub NewEmailMessage(EmailAddress As String)

' Создание нового почтового сообщения Outlook.

Set mMyItem = mobjOutlook.CreateItem(olMailItem)

mMyItem.To = EmailAddress

mMyItem.Display

End Sub

Private Sub Class_Initialize()

' Нет никаких причин для использования "GetObject", чтобы

' автоматизировать Outlook. Outlook всегда будет открывать одну копив

' приложения. Используется ключевое слово "New".

' Установка объектной переменной к приложению Outlook.

Set mobjOutlook = New Outlook.Application

' Если истинно, MS Outlook не установлен.

If mobjOutlook Is Nothing Then

MagBox "MS Outlook is not installed on your computer"

End If

End Sub

Private Sub Class_Terminate()

' Освобождение объектной переменной.

Set mobjOutlook = Nothing

End Sub

Приведенный ниже код инициализирует объект objOutlook и вызывает метод NewEMailMessage:

' Объектные переменные Dimension.

Dim objOutlook As cOutlook

' Присваивание объектных переменных объекту cOutlook.

Set objOutlook = New cOutlook

' Вызов метода "NewEMailMessage".

objOutlook.NewEmailMessage nancy@northwind.com

' Разрушение объектной переменной.

Set objOutlook = Nothing

Применение объекта обработчика ошибок

Рассмотрим пример кода из статьи «Профессиональная обработка ошибок.». Модуль класса обеспечивает обширную обработку ошибок, включая:

• Регистрацию ошибок в таблице Access

• Регистрация ошибок в текстовом файле

• Обработку ошибок электронной почты

• Обработку ошибок записей в календаре Outlook

Рассмотрим объект сЕггог в браузере объектов, как показано на рис. 13.

РИСУНОК 13. Объект сЕггог и браузере объектов

Использование объектов с коллекциями VBA

Коллекции VBA позволяют работать с пользовательскими объектами как с группой. Например, если существует пять объектов cUser и необходимо выполнить действие над каждым из них, проще и намного эффективнее обрабатывать пять объектов как группу, а не как отдельные объекты.

Вероятно, разработчик уже знаком со встроенными коллекциями, такими как коллекции форм и элементов управления. Кроме того, VBA содержит объект коллекции. Коллекция — это способ обращения с группой объектов как с одним элементом. В повседневной жизни люди постоянно имеют дело с коллекциями. Дирижер оркестра может сказать: "Все исполнители, играющие на духовых инструментах, встаньте". Это гораздо удобнее и эффективное, чем перечислять: "Мэри, Джим, Джон, Джо, Салли, встаньте". Точно так же можно работать с объектами, составляющими один элемент или коллекцию.

Основная концепция этого подхода заключается в том, что коллекция представляет собой объект со своими собственными свойствами и методами. Коллекция обладает следующими характеристиками:

• Имеет свойства и методы.

• Может быть расширена за счет добавления различных типов объектов.

• Величина коллекции является переменной, а это значит, что коллекция может расширяться и сокращаться при добавлении и удалении элементов.

• . Элементы в выделенной области не могут быть отсортированы.

• Элементы множества являются индексированными (отсчет начинается с цифры "1").

Создание коллекции VBA

Поскольку коллекции представляют собой объекты, коллекции создаются тем же способом, что и объекты. Во-первых, необходимо объявить объектную переменную для использования в качестве ссылки на коллекцию. Во-вторых, нужно воспользоваться ключевым словом Set для создания ссылки из объектной переменной на коллекцию. Следующий код создает коллекцию пользователей:

Dim Users as Collection

Set Users = New Collection

СОВЕТ

Полезно присваивать коллекции имя, представляющее собой множественное число от имен объектов, содержащихся в данной коллекции. В данном примере в коллекцию добавляется объект User. Таким образом, коллекции следу-вд. ет присвоить имя Users.

Свойства и методы коллекции VBA

Объект коллекции имеет очень простую структуру и содержит только одно свойство и три метода, как показано в табл. 1.

Таблица 1. Свойства и методы объекта множества.

Имя

Тип

Описание

Count

Свойство

Указывает, сколько элементов содержится в коллекции.

Add

Метод

Используется для добавления элементов в коллекцию.

Remove

Метод

Используется для удаления элементов из коллекции.

Item

Метод

Используется для ссылки на элементы в коллекции. Данный метод действует по умолчанию.

Добавление элементов в коллекцию

Чтобы добавить элементы в коллекцию, необходимо воспользоваться методом Add объекта коллекции.

 Collection.Add Item [, Key][, Before];, After]

Затем нужно передать объектную переменную для каждого объекта, добавленного к множеству. Например, чтобы добавить в коллекцию двух пользователей, следует воспользоваться объектной переменной для каждого пользователя: objUser1 и objUserZ. Следующий параметр — значение Key (удобочитаемое имя), использующееся для ссылки на объект. Если ключевое значение не указано, ссылка на каждый пункт в коллекции осуществляется по номеру индекса.

СОВЕТ

Настоятельно рекомендуется указывать ключевое значение. Ключевые значения упрощают написание кода и более ,j надежны, чем номера индекса. Номера индекса могут измениться при удалении элементов из коллекции или при '3 вставке в указанные места коллекции с помощью параметров метода Add.

В приведенном ниже примере в коллекцию Users будут добавлены два пользователя:

Dim User1 as cUser

Dim User2 as cUser

Dim Users as Collection

Set User1 = New cUser

Set User2 = New cUser

Set Users = New Collection

User1.Name = "James"

User2.Name = "Steve"

Users.Add User1, User1.Name

Users.Add User2, User2.Name

Set User1 = Nothing

Set User2 = Nothing

Set Users = Nothing

Данный код добавляет в коллекцию объект User1. С помощью свойства Name объекта указано ключевое значение. Точно так же добавляется объект User2.

Обратите внимание, что метод Add коллекции содержит аргументы "до" и "после" для определения порядка объектов в коллекции.

Ссылка на специфический объект

К объектам в коллекции можно обращаться либо по номеру, либо по ключевому значению. При ссылке на элементы в коллекции по номеру необходимо помнить, что все элементы индексированы, а это означает, что отсчет начинается с 1. Проще обращаться к объекту в коллекции по ключевому значению. Приведенный ниже код иллюстрирует ссылку на специфический объект User2 с помощью обоих методов. Хотя указывать метод Item не обязательно (он действует по умолчанию), явное обращение способствует повышению восприимчивости кода.

' Обращение к объекту в коллекции по номеру индекса.

MsgBox Users.Item(2).Type

' Обращение к объекту в коллекции по ключевому значении.

MsgBox Users.Item("Steve").Type

Организация циклов по элементам коллекции

Простейший и наиболее эффективный способ организации цикла по объектам в коллекции — использование цикла For Each. Кроме того, можно воспользоваться циклом For Next, но он выполняется медленнее.

Чтобы применить цикл For Each, необходимо указать объект для рассмотрения в коллекции. Ниже приведен соответствующий код:

' Необходимо объявить объектную переменную.

Dim User as User

For Each User in Users

MsgBox User.Type
Next User

СОВЕТ

В приведенном примере проверяется каждый пользователь в коллекции. Обратите внимание, что отдельным пользователям соответствуют отдельные объектные переменные Useri и User2. Чтобы воспользоваться циклом For Each, необходимо указать общую объектную переменную под именем User. Данную объектную переменную не обязательно присваивать с помощью ключевого слова Set. Ее единственное назначение — использование в цикле For Each.

Удаление отдельных объектов

Чтобы удалить отдельные объекты из множества, необходимо воспользоваться номером индекса объекта либо ключевым значением.

' Удаление объекта по номеру индекса.

Users.Remove 2

' Удаление объекта по ключевому значению.

Users.Remove "Steve"

Удаление всех объектов

Чтобы удалить все объекты из коллекции, не обязательно создавать цикл по всем элементам множества и вызывать метод удаления. Гораздо проще переназначить объект коллекции в новую коллекцию.

' Удаление всех объектов из коллекции.

Set Users = New Collection

Освобождение объектной переменной

Поскольку коллекции — это объекты, не следует забывать об освобождении объектной переменной, устанавливая ее значение равным Nothing.

' Освобождение объектной переменной.

Set Users = Nothing

Резюме

Создание объектов представляет собой эффективный способ написания и работы с приложениями. Это значительно улучшает организацию кода, упрощает его написание и использование, в том числе с помощью технологии IntelliSense, а также делает код переносимым. Кроме того, можно скрыть сложную "начинку" от разработчиков, использующих объект. Разработчики могут создавать многочисленные экземпляры данного объекта.


 

А также другие работы, которые могут Вас заинтересовать

77841. Порядок маркировки шасси и двигателя авто ЗИЛ-131, УРАЛ-4320, УАЗ-3151, КАМАЗ-4310, МТ-ЛБ, прицепы: 2ПН-4, 2ПН-2 1.51 MB
  Имеют маркировку и основные составные части изделия: корпус, двигатель, главная передача, промежуточный редуктор, бортовые передачи, торсионные валы, переговорное устройство, фильтр ФПТ-200М, подогреватель, отопитель, дифманометр-тягонапоромер, аккумуляторные батареи, реле-регулятор...
77842. Особенности празднования Масленицы 159 KB
  Масленицу повсюду ожидали с большим нетерпением. Это самый веселый, самый разгульный и поистине всеобщий праздник. В некоторых местах о подобающей встрече и должном проведении всей масленицы заботились еще с субботы предшествующей недели.
77843. Средства и методы развития координационных способностей в спортивной тренировке 44.68 KB
  Основными специфическими средствами спортивной тренировки в видах спорта, характеризующихся активной двигательной деятельностью, являются физические упражнения. Состав этих упражнений в той или иной мере специализируется применительно к особенностям спортивной дисциплины...
77845. Назначение и устройство КПП автомобиля КАМАЗ. Восстановление корпуса КПП. Сборка КПП. Техника безопасности при восстановлении и сборке. Пожарная безопасность на АЗС. Площадка слива автоцистерн 271.63 KB
  Коробка передач является конструктивным элементом трансмиссии автомобиля. Коробка передач предназначена для изменения крутящего момента скорости и направления движения автомобиля.
77846. Феноменология Гуссерля Эдмунда 58.5 KB
  Гуссерль предполагал что сознание всегда к чему-либо направлено и оно несет в себе идеал. Но речь то идет о нашем сознании о том знаем ли мы что такое наше сознание можем ли мы понять другого человека наделенного таким же сознанием или не таким...
77847. Социально-философский смысл евразийства 191.5 KB
  Славянофилы ставшие основоположниками теории локальных цивилизаций в России старались возродить религиозную философию истории и на ее теоретической основе создать образ России единственной после Византии цивилизации усвоившей высшую религию –- христианство в наиболее...
77848. Тепловые машины 148.5 KB
  Настоящая история паровых машин начинается лишь в 17 веке. Одним из первых, кто создал действующий прообраз паровой машины, был Дени Папен. Паровая машина Папена, была фактически лишь набросками, моделью. Он так и не сумел создать настоящую паровую машину, которая могла бы использоваться на производстве.
77849. Смоляне – защитники Отечества 132 KB
  В этом реферате будет говориться только о смолянах. Моя цель работы - рассказать вам все про смолян. Как они защищали нашу Родину, как они боролись, как они достойно погибали... И про то, как мы их не забудем никогда!