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


Оператор Set


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

Set ОбПеременная = {[New] ОбВыражение| Nothing}

ОбПеременная - имя переменной или свойства, New - необязательное ключевое слово, используемое для явного вызова операции создания нового экземпляра класса (объекта). Если ОбПеременная содержала ссылку на объект, при присвоении эта ссылка освободится. ОбВыражение может быть именем объекта (класса), другой переменной того же типа, функцией или методом, возвращающими объект соответствующего типа. Выполнение оператора Set с правой частью Nothing прерывает связь между ОбПеременной и объектом, на который она ссылалась. Если при этом на него не осталось других ссылок, ресурсы системы и память, выделенные под этот объект, освобождаются. В общем случае, если ключевое слово New не указано, новая копия объекта не создается, а ОбПеременная как значение получает ссылку на существующий объект. При этом может оказаться, что несколько переменных ссылаются на один объект и изменение этого объекта через одну из них влияет на все остальные.

Примеры:

Определим класс объектов Child:

'Класс Child 'Свойства Public Age As Byte Public Name As String 'Другие свойства и методы пока не определены

А теперь введем объекты этого класса:

Public Sub Assign5() Dim Children(1 To 2) As Child Dim Boy As Child, Girl As Child

'Создаем объекты Set Children(1) = New Child Set Children(2) = New Child 'Инициализируем их Children(1).Age = 10 Children(1).Name = "Александр" Children(2).Age = 7 Children(2).Name = "Мария" Debug.Print "Имя: ", Children(1).Name, "Возраст: ", Children(1).Age Debug.Print "Имя: ", Children(2).Name, "Возраст: ", Children(2).Age

'Утанавливаем дополнительные ссылки на существующие объекты Set Boy = Children(1) Set Girl = Children(2) Boy.Name = "Саша" Girl.Name = "Маша" 'Изменились сввойства объектов Debug.Print "Имя: ", Children(1).Name, "Возраст: ", Children(1).Age Debug.Print "Имя: ", Children(2).Name, "Возраст: ", Children(2).Age

'Удаляем одну из ссылок, но объект остается Set Children(1) = Nothing Set Children(2) = Nothing Debug.Print "Имя: ", Boy.Name, "Возраст: ", Boy.Age Debug.Print "Имя: ", Girl.Name, "Возраст: ", Girl.Age

End Sub

Пример 7.1.

Вот результаты отладочной печати:

Имя: Александр Возраст: 10 Имя: Мария Возраст: 7 Имя: Саша Возраст: 10 Имя: Маша Возраст: 7 Имя: Саша Возраст: 10 Имя: Маша Возраст: 7




Начало  Назад  Вперед



Книжный магазин