Интеграция Access с другими компонентами офиса

Источник: Leadersoft

Программируя в Access не стоит забывать, что он является частью пакета Microsoft Office, поэтому один из плюсов MS Access как средства разработки -  интегрированность с такими мощными приложениями как Word, Excel, PowerPoint, Outlook. Конечно, получить доступ к ним можно не только при помощи Access, но начиная с версии MS Office 2000, все они имеют один общий язык программирования - VBA. И в этой серии статей рассмотрим примеры использования такой интеграции, или как ее еще называют - автоматизации.

Автоматизация (ранее известная как OLE-автоматизация - OLE Automation) - это одно из наиболее важных средств технологии ActiveX, позволяющее программно управлять объектами из других приложений. И это основное средство, с помощью которого можно интегрировать функциональные возможности различных приложений.

Приложения, поддерживающие автоматизацию, делятся на две категории: клиенты автоматизации и серверы автоматизации. Причем некоторые приложения могут быть только клиентами либо только серверами автоматизации, но есть и такие (и к ним относится Microsoft Access), которые могут
выступать и в том и в другом качестве.

Клиенты и серверы автоматизации

      При интеграции двух приложений одно предоставляет свои объекты для использования, а другое использует объекты первого приложения.

  • Приложение, объекты которого доступны для других приложений, называется сервером автоматизации (иногда его еще называют компонентом)
  • Приложение, которое использует объекты другого приложения, называется клиентом (или контроллером) автоматизации. Объекты, которые доступны для других приложений, называют объектами автоматизации

      Через объекты автоматизации приложение - сервер открывает доступ другим программам к тем своим функциям, которые могут быть им полезны. Например, текстовый редактор может открывать другим программам доступ к проверке орфографии, служба связи - доступ к созданию и отправке сообщений. Это позволяет разработчикам ускорить процесс разработки своих приложений, благодаря использованию готовых функций сервера.

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

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

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

Microsoft Access как клиент автоматизации

      Чтобы создать объект для использования в операциях автоматизации, нужно сначала создать экземпляр его класса и присвоить ссылку на него объектной переменной. Однако создать можно не любой объект из объектной модели приложения-сервера, а только глобальные объекты. Таким глобальным объектом для всех объектных моделей приложений семейства Microsoft Office является объект Application, который находится на вершине иерархии объектов.

      Для того чтобы узнать, какие свойства моделей объектов являются глобальными, можно воспользоваться окном просмотра объектов в редакторе VBA - Object Browser (запускается например так: откройте любой модуль и нажмите F2).
Потом выберите в раскрывающемся списке Project/Dbrary нужную библиотеку, а затем выберите элемент в списке Classes.
      Существует несколько способов создания экземпляра класса объекта.

  1. С помощью ключевого слова New

Это ключевое слово описывает переменную типа Object и одновременно устанавливает ссылку на новый экземпляр класса объекта.

Dim app As New Excel.Application

При использовании ключевого слова New для создания нового экземпляра класса Application запускается соответствующее приложение (например, Word или Excel). Если это приложение уже запущено, то, чтобы не запускать второй экземпляр, лучше использовать для создания нового экземпляра класса функцию GetObject ()

Чтобы использовать ключевое слово New для создания экземпляра класса объекта автоматизации, необходимо предварительно добавить ссылку библиотеки объектов приложения сервера в диалоговом окне редактора VBA References (Ссылки).

Пример использования:

Sub PowerPointOpenFile_Click()
On Error GoTo Err_
Dim strAppName As String
Dim app As New PowerPoint.Application ‘ создаем экземпляр класса
      strAppName = CurrentProject.Path & "\Презентация1.ppt" ‘ указываем путь к файлу Презентация1.ppt
      With app
            .Visible = True ‘ «проявляем» PowerPoint
            .Presentations.Open strAppName ‘ открываем файл Презентация1.ppt
      End With
      Set app = Nothing ‘ освобождаем переменную
Exit_:
      Exit Sub
Err_:
      MsgBox Err.Description
      Resume Exit_
End Sub

  1. С помощью функции CreateObject()

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

Set app = CreateObject ("Excel.Application")

      Объектная переменная в данном случае может быть объявлена как Object, и тогда ссылку на библиотеку объектов Microsoft Word устанавливать не надо. А может быть объявлена так:

Dim app As Excel.Application

      В этом случае должна быть обязательно установлена ссылка на библиотеку объектов Microsoft Word **.0 Object Library (** показывает, что для разных версий офиса разные значения: 10.0, 11.0, 12.0 - для соответственно офисов ХР, 2003, 2007). Если на компьютере установлено несколько версий Microsoft Office, то можно указать номер версии приложения, которое будет использоваться при автоматизации, например:

Set app = CreateObject("Excel.Application.11")

Пример использования функции:

Sub ExcelOpenFile()
On Error GoTo Err_
Dim strAppName As String
Dim app As Excel.Application
      strAppName = CurrentProject.Path & "\Книга1.xls" ‘ указываем путь к файлу Книга1.xls
      Set app = CreateObject("Excel.Application")  ‘ создаем экземпляр класса
      With app
            .Visible = True ‘ «проявляем» Excel
            .Workbooks.Open strAppName         ‘ открываем файл Книга1.xls
      End With
      Set app = Nothing       ‘ освобождаем переменную
Exit_:
      Exit Sub
Err_:
      MsgBox Err.Description
      Resume Exit_
End Sub

  1. С помощью функции GetObject()

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

Set <объектнаяПеременная> = Getobject([<путь>][,<класс>])

      Обязательно должен быть указан хотя бы один из аргументов функции!

      Рассмотрим три варианта написания функции:

  • Set app = GetObject(, "Excel.Application")

      здесь опускается первый параметр - тогда функция работает подобно двум вышесказанным - просто для создания экземпляра класса объекта.

  • Set app = GetObject("C:\Baze\ Книга1.xls", "Excel.Application")

      здесь указаны оба параметра - путь к файлу и имя приложения. В этом случае запускается файл Лист.xls

  • Set app = GetObject("C:\Baze\ Книга1.xls")

      здесь второй аргумент может быть опущен, если в реестре Windows существует связка расширения файла с объектом приложения. Например, в случае Microsoft Excel файлы xls по умолчанию имеют объектный тип Excel.Workbook. Это означает, что если не указывать аргумент <класс>, то будет создана ссылка на объект Workbook, представленный указанным в первом аргументе файлом.

Пример использования функции:

Sub WordOpenFile()
On Error GoTo Err_
Dim strAppName As String
Dim app As Word.Application
      strAppName = CurrentProject.Path & "\Doc1.doc"
      Set app = GetObject("", "Word.Application")
      With app
            .Visible = True
            .Documents.Open strAppName
      End With
      Set app = Nothing
Exit_:
      Exit Sub
Err_:
      MsgBox Err.Description
      Resume Exit_
End Sub

      Для того чтобы легче было создавать код для работы с объектами Word или Excel, вспомните о таком замечательном средстве этих приложений, как запись макросов. С помощью записи макросов можно выполнить все необходимые действия, используя интерфейс пользователя, затем просмотреть сгенерированный код VBA и встроить этот код в свою процедуру VBA, только слегка подправив его.

      Например: открываем файл excel, выбираем Сервис - Макрос - Начать запись. В появившемся диалоговом окне присваиваем имя макросу и жмем «ОК». Далее делаем свои дела - форматируем ячейки, изменяем данные - все что угодно. Последовательность действий записывается в специальный модуль в виде команд VBA. Жмем остановить запись. Затем Сервис - Макрос - Редактор Visual Basic и в группе Modules находим новый модуль. Открываем и смотрим, как все что вы делали выглядит на VBA.

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

      В прилагаемом к статье примере показаны варианты открытия документов Word, Excel, Power Point. Для разнообразия для каждого документа  использован один из трех способов открытия. Но, разумеется, любой из документов можно открыть любым из способов. Пример качать здесь…

      PS: Пример сделан в Access 2002. При открытии его в Access 2000 нужно будет через Tools - References переопределиить ссылки на Word, Excel и Power Point с 11.0 на 10.0


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=9375