Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 1....doc
Скачиваний:
60
Добавлен:
17.12.2018
Размер:
1.88 Mб
Скачать

Объекты, класс которых определен пользователем.

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

{Dim | Private | Public | Static }<имя переменной> As New <имя типа>

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

Public Sub MyCreateObject()

'Нельзя создавать объекты собственного класса, используя CreateObject

Dim Nemo As Личность

'Set Nemo = CreateObject("Личность")

'Можно их создавать, используя New

Set Nemo = New Личность

Nemo.InitPerson FN:="Prince", LN:="Dakar", DoB:=#1/23/1838#

Nemo.PrintPerson

End Sub

Только метод New позволяет создать новый объект для классов, определенных программистом. Для этой цели нельзя, например, использовать метод CreateObject. Но, заметьте, спецификатор New не является обязательным, его можно опускать при объявлении таких переменных класса, которые в дальнейшем получат значение, благодаря ссылке на другие, ранее созданные объекты. Задать ссылку на существующий объект нельзя обычным оператором присвоения - для этого в VBA есть специальный оператор Set:

Set <имя переменной - объекта> = {<объектное выражение>| Nothing }

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

Dim Q As Личность

Set Q = Nemo

Q.PrintPerson

В результате будет отпечатан следующий текст:

Prince Dakar родился 23.01.1838

Объекты "родного" приложения

Каждый VBA-проект погружен в "родное" приложение Office 97, объекты которого доступны в проекте. Для создания таких объектов не используется ни спецификатор New, ни метод CreateObject. Новые объекты, если и создаются, то специальными методами своего класса. Например, метод Add позволяет добавлять элементы в коллекции. При работе с объектами этой группы объявляются переменные соответствующего класса, затем они связываются с уже существующими объектами. Связывание выполняет оператор Set. Все примеры из первой лекции книги посвящены работе с объектами этой группы. Напомним тот, где участвует один из наиболее употребительных объектов - Range:

Public Sub FirstComment()

Dim myRange As Range

'Добавление комментария

With ActiveDocument

Set myRange =.Paragraphs(1).Range

.Comments.Add myRange, "Эта лекция рассказывает о классах объектов"

'Передвигается объект Range

myRange.Move Unit:=wdParagraph, Count:=2

End With

End Sub

Здесь вначале объявляется объект myRange класса Range, что обеспечивает раннее связывание. Объектное выражение в правой части оператора Set возвращает ссылку на существующий объект (первый параграф активного документа), и эта ссылка становится значением myRange. А затем с этим объектом можно работать, используя свойства и методы соответствующего класса, в данном случае - Range. Его можно использовать, например, в методе Add при работе с коллекцией комментариев или вызвать метод Move для изменения области, отведенной объекту.