Расширение объектной модели

Программист может дополнить встроенную в Word или Excel объектную модель, хотя такое дополнение во многом ограничено. К некоторым объектам можно приписать свойства, методы, обработчики событий. Это – только объекты, видимые в окне проекта. Так, например, к документу Word можно добавить свойства и методы, написанные Вами, можно добавить свойства к листам Excel. Но невозможно приписать свойства к абзацу, ячейке и т.п. Добавляемые свойства описываются в общей области объекта (General, на самом верху перед первой процедурой). Описание такое же, как и описание переменных.

Пример.

Пусть в окне кода, связанном с листом Sheet1, Вы написали следующее:

Public maxcena as Integer

Тогда в модуле вы можете обратиться к этому свойству следующим образом:

ActiveWorkbook.Sheet1.maxcena=56

Помните, что эти свойства не сохраняют значения между запусками документа! Если же Вам требуется сохранить данные между открытиями WORD-файла, то статические переменные, статические свойства встроенной объектной модели Вам не подойдут, поскольку под эти свойства-переменные память выделяется и инициализируется при открытии документа. Если Вам требуется сохранить какие-то значения, то есть сохранить "состояние" документа, воспользуйтесь встроенным в объектную модель Word объектом Variables. Он позволяет создавать, удалять хранимые поименованные переменные.

Пример.

Создание хранимой поименованной переменной:

ThisDocument.Variables.Add "nn", "567"

Обращение к ней, может быть, например, таким:

MsgBox ActiveDocument.Variables("nn")

Или таким:

MsgBox ActiveDocument.Variables(1)

Во встроенной модели множество экземпляров некоторого класса обычно объединяются в коллекции. Так мы имеем дело с коллекцией документов, листов, параграфов, ячеек и т.п. Это разумно по следующей причине. Объект – это некоторый фрагмент ОП, обладающий определенной структурой. В объектной переменной надо сохранить адрес этого фрагмента. А так как часто неизвестно, сколько Вы будете создавать объектов заданного класса, то наилучший вариант – предложить Вам коллекцию экземпляров, то есть динамический набор.

Таким образом, получается, что создание объекта некоторого встроенного типа – это добавление элемента в коллекцию, а уничтожение объекта – это удаление элемента из коллекции. Обычно выполняется это с помощью методов ADD, REMOVE.

Программист может описать свои классы, то есть типы, объединяющие свойства, методы и обработчики событий. Класс описывается в одном модуле класса. В одном проекте допускается описание нескольких классов. Экземпляры классов, то есть объекты создаются при помощи служебного слова New. Объектная переменная – это по существу указатель на область памяти, выделенную по New. О классах мы поговорим позже.

VBA не позволяет сформировать ActiveX объект. Но во многом аналогичный ему VB (самостоятельная среда разработки приложений, не встроенная в Office) позволяет это сделать. Реально ActiveX объект - это просто сохраненный пользовательский класс, получивший уникальное имя.