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

       

Объекты и переменные


Попробуем обобщить сведения об объектах и переменных. Начнем с того, что у них общего и что их различает. Если есть описания:

Dim X As T, Y As T1

то без контекста понять нельзя, что есть X и Y - "обычные" переменные или объекты. Например, если T - тип, заданный пользователем, а T1 - определенный им класс, то X - это переменная, а Y - объект. С нашей точки зрения, класс и тип - понятия, если не эквивалентные, то близкие по смыслу. Также близки понятия объекта и переменной. Класс - это специальная форма определения типа. Если есть тип T и класс T1, то можно объявить произвольное число экземпляров типа T и класса T1. Экземпляры типа T называются переменными, класса T1 - объектами. Класс задает свойства, методы и события своих объектов. Тип всегда задает свойства, неявно - методы, но никогда - события.

В объявлении: Dim Y As T1, где T1 - класс, объект Y мы часто называем переменной, говоря, что она имеет тип Object. Переменные типа Object рассматриваются как ссылки, задающие адрес памяти, где хранится объект. У них фиксированная длина 4 байта. При объявлении такой переменной память для самого объекта может и не отводиться в отличие от обычных переменных, поэтому не определено и значение ссылки. Задать ссылку - связать переменную с объектом - можно двумя путями:

  • создать новый объект, выделив ему память;
  • сослаться на уже существующий объект.

Есть два способа связывания: раннее и позднее . При позднем связывании переменная объявляется так:

Dim V As Object

Это объявление говорит о том, что переменная является объектом (ссылкой), но ничего о классе этого объекта - он может быть произвольным, и выяснится это только динамически при выполнении программы, когда переменная V будет связываться с только что созданным или существующим объектом того или иного класса. Поэтому такое связывание называется поздним, или динамическим. Естественно, что необъявленные переменные или те, которым тип при объявлении не задан (значит, у них по умолчанию тип Variant), допускают только позднее связывание.
При раннем связывании в момент объявления указывается класс объекта, например:

Dim Петров As Личность, Козлов As Личность

Это позволяет еще на этапе трансляции проверять, допустимы ли те или иные операции над объектами Козлов и Петров. За исключением весьма сомнительного преимущества позднего связывания - возможностью связаться с объектом любого типа, ранее связывание предпочтительнее во всех отношениях. Для программиста особенно важно, что при раннем связывании, когда задан класс объекта, в процессе работы с этим объектом идет подсказка о его свойствах и методах. Подсказка облегчает жизнь программиста, и лишаться ее не стоит. Поэтому наш совет - выбирайте раннее связывание.

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

  • объекты, чей класс определен пользователем в одном из модулей класса; например, объекты класса Личность, созданного в этой лекции;
  • объекты родового приложения (Excel, Word, PowerPoint), которому принадлежит проект и которые доступны по умолчанию;
  • ActiveX и Com AddIns -объекты, в частности, объекты других приложений Office 97 при их подключении к исходному приложению. Например, в Word можно подключить объекты Excel, а документы Word включить в рабочие листы Excel.



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