Основы офисного программирования и язык VBA

       

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


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

{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



Содержание раздела