Написание кода

Описание и создание экземпляров объектов. Чтобы работать с объектами, требуется описать их. Как уже отмечалось ранее, для описания переменных используется инструкция Dim. Экземпляр класса описывается точно так же:

Dim объект as класс

Например, чтобы использовать экземпляр класса Datafile с именем WorkFile, требуется задать следующую инструкцию:

Dim WorkFile as Datafile

Рассмотрим описание экземпляра объекта презентации PowerPoint:

Dim BudgetPresentation as Presentation

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

Dim BudgetPresentation as ObjectDim BudgetPresentation as VariantDim BudgetPresentationDim WorkingFile as ObjectDim WorkingFile as VariantDim WorkingFile

Кроме того, при явном описании нового объекта можно также использовать ключевые слова Private, Public или Static.

Однако явное описание типа указывает только на то, что объект WorkingFile имеет тип DataFile. Чтобы действительно создать экземпляр класса Datafile, необходимо использовать инструкцию Set:

Set объект = New класс

Например, чтобы явно описать объект WorkingEile, а затем создать экземпляр класса Datafile:

Dim WorkFile as Datafile

Set WorkingFile = New Datafile

Чтобы явно описать объект BudgetPresentation, а затем создать экземпляр

презентации PowerPoint:

Dim BudgetPresentation as Presentation

Set BudgetPresentation = New Presentation

В данном примере ключевое слово New используется для создания экземпляра объекта Presentation с именем BudgetPresentation.

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

Set ObjectVariable = SomeObject

Например, чтобы присвоить переменной MyNewTemplate ссылку на объект шаблона Microsoft Word, используйте следующую инструкцию:

Set MyNewTenvplate = Template

Кроме того, некоторые методы возвращают ссылки на объекты. В этом случае также требуется использовать инструкцию Set. Например, метод New класса Microsoft Excel Workbook возвращает ссылку на объект рабочего листа:

Set MyNewWorksheet = ThisWorkbook.new

Удаление объектов. В некоторых случаях требуется удалить как сам экземпляр класса, так и все относящиеся к нему данные. Для этого используется инструкция Set и ключевое слово Nothing:

Set объект = Nothing

Например, чтобы удалить объект WorkingFile, введите следующую инструкцию:

Set WorkingFile = Nothing

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

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

Разработка объектов

Объектно-ориентированное программирование требует от программиста принципиально другого способа мышления, чем при использовании процедурных языков. При разработке структуры объектов необходимо предварительно провести тщательное планирование, т. к. без детального анализа создать класс чрезвычайно трудно, а иногда и весьма долго. Для создания модели объекта можно использовать следующие программы: Rational Rose, Logic Works OOwin/CRT, OMT. Такие же возможности имеет программа Visual Modeler фирмы.Rational Rose, входящая в пакет Visual Studio 6.0

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

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

Получение текущего значения свойства.

Установка значения свойства.

Эти две операции выполняются с помощью двух взаимодополняющих друг друга процедур Property Let и Property Get, которые необходимо написать программисту.

Процедура Property Let. Процедура Property Let используется для установки значения свойства, например, для примера с объектом WorkingFile:

WorkingFile.delimiter = "@"

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

Устанавливаемое значение всегда является в инструкции Property Let пoследним параметром. В следующем примере переменная vNewValue передает значение, которое присваивается свойству Description:I

Public Property Let Description(ByVal vNewValue As Variant)

Description = vNewValue

End Property

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

Public Property Let Delimiter(ByVal vNewValue As Variant)Dim AscChar as integerAscChar = Asc(ucase(str$(vNewValue)))If (IsNumeric(vNewValue)) Or (vNewValue = ".") _[Or ((AscChar > 64) And (AscChar < 91)) ThenErr.Raise 5, "Datafile object: Delimiter Property", "Invalid value"ElseDelimiter = vNewValueEnd IfEnd Property

Процедура Property Get. Процедура Property Get используется для получения значения свойства, например, для примера с объектом WorkingFile:

MyFilename = WorkingFile.name

Текущее значение свойства обычно хранится в переменной уровня модуля, поэтому процедура Property Get должна присвоить требуемому свойству значение, равное значению этой переменной.

Предположим, что текущее значение свойства Filename хранится в переменной уровня модуля m_filename, поэтому она доступна в любой процедуре класса. Процедура Property Get просто присваивает свойству значение переменной m_filename:

Public Property Get Filename() As Variant

Filename = m_filename

End Property

Процедуру Property Get, как и любую другую подпрограмму, можно описать с помощью ключевых слов Public, Private или Static.

Автоматическое создание свойств

С помощью диалогового окна Вставка процедуры (Add Procedure), редактор VBA автоматически создает первую и последнюю инструкции процедур Property Let и Property Get. Затем требуется самостоятельно написать код для установки и получения значений свойства.

Чтобы создать свойство объекта:

1. Откройте окно требуемого модуля класса.

2. Выберите команду Вставка\Процедура (Insert\Procedure). Появляется диалоговое окно Вставка процедуры.

3. Введите имя свойства в поле Имя (Name).

4. Выберите переключатель Свойство (Property).

5. Если свойство имеет общую область определения, т. е. доступно программисту, использующему объект, выберите переключатель Общая (Public). Если же свойство предполагается использовать только в модуле класса, выберите переключатель Личная (Private).

Примечание

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

6. Нажмите кнопку ОК. В модуле класса создается описание процедур

Property Let и Property Get, например, для свойства Inuse:

Public roperty Get Inuse() As VariantEnd PropertyPublic Property Let Inuse(ByVal vNewValue As Variant)End PropertyСоздание методов

Создание методов объектов осуществляется просто. Если метод возвращает данные, то необходимо написать функцию. В обратном случае, требуется подпрограмма. Так или иначе, эти функции или подпрограммы ничем не отличаются от процедур в модулях формы или в простых модулях. Покажем реализацию метода Delete для объекта Datafile. Обратите внимание, что в подпрограмме используется переменная уровня модуля для хранения имени файла. Кроме того, процедура проверяет, используется ли файл другим пользователем или нет.

Public Sub Delete()If Not (Inuse(m_filename)) ThenKill m_filenameEnd IfEnd Sub

Пример создания объекта

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

Для создания объекта pedometer:

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

2. Нажмите клавишу <F4> и введите имя класса в окне свойств.

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

Например:

Dim m_steps As Long Dim m_size As Single Dim m_system As Integer

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

Const METRIC =1

Const USE = 2

5. Создайте процедуры Property Let и Property Get для свойства Steps (число шагов). В процедурах требуется проверить, что заданный параметр является числом, и, если так, то он больше или равен 0:

Public Property Get Steps() As IntegerSteps = vNewStepsEnd PropertyPublic Property Let Steps(ByVal vNewSteps As Integer)If IsNumeric(vNewSteps) ThenIf vNewSteps > -1 Thenm_steps = vNewStepsElseErr.Raise 5, "Pedometer: свойство Steps","Значение должно быть больше или равно 0" ElseErr.Raise 5, "Pedometer: свойство Steps", "Параметр не является числом"End IfEnd Property

6. Создайте процедуры Property Let и Property Get для свойства Size (величина шага). В процедурах требуется проверить, что заданный параметр является числом:

Public Property Get Size () As VariantSize = m_sizeEnd PropertyPublic Property Let Size(ByVal vNewValue As Variant)If Not (IsNumeric (vNewValue)) ThenErr.Raise 5, "Pedometer: свойство Size ", "Параметр не является числом"Exit PropertyEnd Ifm_size = vNewValueEnd Property

7. Создайте процедуры Property Let и Property Get для свойства System (система мер). В процедурах требуется проверить, что заданный параметр имеет допустимое значение:

Public Property Get System () As Variant System = m_systemEnd PropertyPublic Property Let System(ByVal vNewSystem As Variant)If vNewSystem <> METRIC And vNewSystem <> USE Then Err.Raise 5, "Pedometer: свойство System", "Недопустимое значение" Exit Property End Ifm_system = vNewSystem End Property

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

Public Function CalculateDistance() As Single If m_system = USE ThenCalculateDistance = ((m_steps * m_size) * 3) / 1760 ElseCalculateDistance = (m_steps * m_size) / 1000 End If End Function

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: