Excel. Трюки и эффекты - страница 43

Шрифт
Интервал


End Property

Property Get ObjectRef() As Object

' Возврат ссылки на хранимый объект

Set ObjectRef = objRef

End Property

Property Get ObjectType() As String

' Возврат имени типа хранимого объекта

ObjectType = TypeName(objRef)

End Property

Методы класса

Любая функция или процедура, описанная в модуле класса, является методом этого класса. Методы делятся на общие (описаны с использованием Public) и частные (описаны с использованием Private).

Ниже приведена реализация метода для созданного нами класса Class1, при обращении к которому на экран выводится сообщение со значениями атрибутов класса:

Sub ShowInfo()

' Отображение окна со значением свойства strTag и именем типа _

объекта, на который хранится ссылка

MsgBox "strTag = " & strTag & vbCrLf & _

"Object type = " & ObjectType

End Sub

Использование класса в программе

Как было сказано в начале главы, операции со всеми объектами VBA осуществляет только с использованием ссылок. Объявление ссылок на объекты было рассмотрено в разделе, посвященном переменным в VBA. Здесь будет рассмотрено лишь применение объекта созданного ранее класса Class1. Для создания ссылки на объект можно использовать следующее объявление:

Dim obj As Class1

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

Set obj = New Class1

Объявление переменной ссылки и создание объекта можно также совместить:

Dim obj As New Class1

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

obj.strTag = «Некоторый текст»

Set obj.ObjectRef = Nothing

MsgBox obj.ObjectType

obj.ShowInfo

Ниже приведен пример процедуры, которая использует реализованный класс

Class1:

Sub TestClass()

' Создание объекта

Dim obj As New Class1

' Установка свойств

Set obj.ObjectRef = New Collection

obj.strTag = "В этом объекте хранится ссылка на объект

Collection"

' Вызов метода

obj.ShowInfo

End Sub

В результате работы данной процедуры на экран будет выведено окно сообщения, показанное на рис. 1.4.

Рис. 1.4. Окно с информацией о свойствах объекта


Как можно заметить, в процедуре TestClass не происходит явного уничтожения ссылки на объект класса Class1. Дело в том, что ссылка obj – локальная переменная процедуры. А при выходе из процедуры данные всех локальных (не статических) переменных уничтожаются, в том числе удаляются и локальные ссылки на объекты.