Взаимодействие компонентов Office 2002

Для программного управления объектом автоматизации из любого приложения Microsoft Office необходимо:

  1. Установить ссылку на библиотеку объектов приложения-сервера автоматизации.
  2. Создать объект нужного класса.
  3. Осуществить все необходимые действия над объектом, обращаясь к его свойствам и методам.
  4. Закрыть объект.

Замечание
Можно использовать объекты сервера автоматизации и не устанавливая ссылку на конкретную библиотеку объектов, однако в этом случае программа будет работать медленнее. Это связано с тем, что после установки ссылки на библиотеку, при объявлении объектной переменной, можно указать ее конкретный тип, если же ссылка отсутствует, то для этой переменной придется указать обобщенный тип — Object.
Ниже мы рассмотрим подробнее, как выполнить эти действия из Microsoft Access.
Использование Microsoft Access в качестве клиента автоматизации
Чтобы создать объект для использования в операциях автоматизации, нужно сначала создать экземпляр его класса и присвоить ссылку на него объектной переменной. Однако создать можно не любой объект из объектной модели приложения-сервера, а только глобальные объекты . Таким глобальным объектом для всех объектных моделей приложений семейства Microsoft-Office является объект Application, который находится на вершине иерархии объектов. Однако есть и другие глобальные объекты, например в Microsoft глобальным объектом является workbook. Это позволяет создавать данный объект непосредственно, не используя ссылку на объект Application. Напомним, что узнать, какие свойства моделей объектов являются глобальными, можно, используя окно просмотра объектов в редакторе VBA. Выберите в раскрывающемся списке Project/Dbrary нужную библиотеку, а затем выберите элемент <globals> в списке Classes.
Существует несколько способов создания экземпляра класса объекта.

  • С помощью ключевого слова New. Ключевое слово описывает переменную типа Object и одновременно устанавливает ссылку на новый экземпляр класса объекта. Синтаксис оператора VBA, создающего объект автоматизации, в данном случае аналогичен обычному оператору создания нового объекта, только при описании типа объекта необходимо указать имя приложения-сервера. Например,

Dim objExl As New Excel .Application.
При использовании ключевого слова New для создания нового экземпляра класса Application запускается соответствующее приложение (например, Word или Excel). Если это приложение уже запущено, то, чтобы не запускать второй экземпляр, лучше использовать для создания нового экземпляра класса функцию GetObject ().
Замечание
Чтобы использовать ключевое- слово New для создания экземпляра класса объекта автоматизации, необходимо предварительно добавить ссылку библиотеки объектов приложения сервера в диалоговом окне редактора VBA References (Ссылки).

  • С помощью функции CreateObject ( ) . Функция CreateObject О создает ссылку на новый экземпляр класса автоматизированного объекта. Значение, возвращаемое этой функцией, должно быть присвоено объектной переменной с помощью оператора Set. Например, названным оператором открывается приложение Word, и ссылка на него присваивается объектной переменной docobj. При этом, даже если Word уже был открыт, будет запущен еще один его экземпляр:

Set docObj = CreateObject ( "Word. Application" )
Объектная переменная в данном случае может быть объявлена как object, и тогда ссылку на библиотеку объектов Microsoft Word устанавливать не надо. А может быть объявлена так:
Dim docObj As Word. Application.
В этом случае должна быть обязательно установлена ссылка на библиотеку объектов Microsoft Word 10.0 Object Library.
Замечание
Если на компьютере установлено несколько версий Microsoft Office, то можно указать номер версии приложения, которое будет использоваться при автоматизации, например
Set docObj = CreateObject("Word.Application.10").

  • С помощью функции Getobject (). Этот способ используется для того, чтобы получить ссылку на уже существующий экземпляр класса, т. е. для доступа к существующим документам, хранящимся в файлах, или для доступа к объекту Application уже запущенного приложения-сервера. Функция Getobject () имеет следующий синтаксис: Set <объектнаяПеременная> = Getobject([<путь>][,<класс>])

Необязательный аргумент <путь> определяет полный путь к существующему файлу и используется тогда, когда нужно обратиться к объекту, находящемуся в уже существующем файле.
Аргумент <класс>, как и в других случаях, определяет тип открываемого объекта автоматизации и имеет структуру <имяПриложения>. <типОбъекта>.
Обязательно должен быть указан хотя бы один из аргументов функции. Если первый аргумент опущен, то второй должен определять объект Application соответствующего приложения, например
Set objXL = Getobject (,"Excel.Application").
Аргумент может быть опущен, если в реестре Windows существует связка расширения файла с объектом приложения. Например, в случае Microsoft Excel файлы xls по умолчанию имеют объектный тип Excel .Workbook. Это означает, что если не указывать аргумент <класс>, то будет создана ссылка на объект Workbook, представленный указанным в первом аргументе файлом.
После того как создан объект автоматизации Application или другой глобальный объект, через него можно получить доступ ко всем остатьным семействам и объектам соответствующей модели объектов стандартным способом и работать с ними из программы VBA Access точно так же, как и с другими объектами — считывать и устанавливать значения свойств и вызывать методы.
Совет
Для того чтобы легче было создавать код для работы с объектами Word или Excel, вспомните о таком замечательном средстве этих приложений, как запись макросов. С помощью записи макросов можно выполнить все необходимые действия, используя интерфейс пользователя, затем просмотреть сгенерированный код VBA и встроить этот код в свою процедуру VBA, только слегка подправив его.
После того как все необходимые операции с объектами приложения-сервера выполнены, эти объекты следует закрыть, чтобы освободить занимаемую ими память. Большинство объектов поддерживают для этого методы close или Quit. Кроме того, следует освободить объектную переменную, присвоив ей значение Nothing.

Ниже будет приведено несколько примеров того, как в коде VBA можно управлять объектами Office, в частности будут рассмотрены операции с рабочим листом Microsoft Excel и передача данных в Microsoft Word.