Главная страница

Базы данных. Access. Взаимодействие приложений. Часть Использование метода автоматизации ActiveX. По материалам книги Стивена Форта, Тома Хоуна и Джеймса Релстона Microsoft Access 2000 Development


Скачать 1.54 Mb.
НазваниеAccess. Взаимодействие приложений. Часть Использование метода автоматизации ActiveX. По материалам книги Стивена Форта, Тома Хоуна и Джеймса Релстона Microsoft Access 2000 Development
АнкорБазы данных
Дата19.01.2022
Размер1.54 Mb.
Формат файлаrtf
Имя файлаAutomation1.rtf
ТипДокументы
#336181

Access. Взаимодействие приложений. Часть 1. Использование метода автоматизации ActiveX.
По материалам книги Стивена Форта, Тома Хоуна и Джеймса Релстона

«Microsoft Access 2000 Development»

С каждым днем повышается уровень требований к разработчикам, занимающимся оперативным созда­нием сложных приложений и их интеграцией с другим программным обеспечением.

К счастью, с использованием метода автоматизации ActiveX (прежнее название — OLE-автоматизация) разные приложения могут работать вместе, решая ту или иную программную задачу. Автоматизация зна­чительно сокращает время разработки, поскольку, вместо того чтобы создавать какое-либо новое средство, разработчики могут интегрировать и использовать другое программное обеспечение, в котором подобное инструментальное средство уже существует.

В данной главе изложены принципы и методы автоматизации ActiveX. Подробное описание использо­вания метода автоматизации ActiveX для интеграции Access с другими программами Microsoft Office приводится во второй части статьи.

Что такое автоматизация ActiveX

Технология ActiveX основывается на модели компонентных объектов (СОМ — Component Object Model) компании Microsoft. Автоматизация ActiveX позволяет программам взаимодействовать друг с другом. С помощью автоматизации одна программа может получать доступ и совершать действия над объектами другой программы извне данного приложения. В качестве примера использования метода автоматизации можно привести печать писем или отчетов в Microsoft Word из Microsoft Access.

Для чего используется метод автоматизации

Использование метода автоматизации представляет собой эффективный способ построения и расши­рения возможностей приложений. Автоматизация может существенно сократить время, затрачиваемое на разработку, поскольку, вместо того чтобы создавать и проверять какое-либо инструментальное средство "с нуля", можно "позаимствовать" функциональные свойства другого приложения.

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

Отличия сервера автоматизации от клиента автоматизации

При взаимодействии двух приложений между собой важно понимать, какое приложение открывает свои объекты, а какое — их использует. Сервер автоматизации — это приложение, которое открывает объек­ты Automation. Клиент автоматизации (иногда называемый контроллером автоматизации) — это приложе­ние, которое решает, какие объекты использовать и когда.

Определение требований к ресурсам автоматизации

Поскольку процесс автоматизации относится к ситуации, когда одно приложение управляет другим, при этом открыты как минимум две программы. Для одновременной работы нескольких приложений требуются дополнительные ресурсы памяти и процессора. Решение о том, какие именно ресурсы необхо­димы для автоматизации из Access в Word, например, может быть чисто субъективным. То, что одному пользователю может показаться удовлетворительным, второму покажется неприемлемым. Минимально допустимыми с точки зрения производительности считаются процессор Pentium II и объем ОЗУ, равный 24 Мб. Несмотря на то что использование процессора Pentium значительно повышает производительность, объем ОЗУ в данном случае более важен. Если производительность неудовлетворительна, вначале следует увеличить объем ОЗУ и лишь затем менять процессор.

Общие принципы работы

Автоматизация состоит из трех этапов:

• Получение объекта Automation. Необходимо либо создать новый объект, либо установить ссылку на уже существующий.

• Использование объекта Automation в соответствии с требованиями приложения.

• Освобождение объекта Automation.
Например, если необходимо распечатать письма или отчеты в Word из Access, первым шагом станет создание или установка ссылки на приложение Word. Далее используются объекты, свойства и методы Word (такие, как открытие, редактирование либо печать документа). Последний шаг — освобождение приложения Word.




РИСУНОК 1. Диалоговое окно References.


Создание и установка ссылки на другое приложение

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

Установка ссылки на другое приложение

В процессе автоматизации происходит взаимодействие или использование приложения вне Microsoft Access. В случае использования приложения или компонента вне Access необходимо установить ссылку на данное приложение. Для этого следует перейти в редактор Visual Basic и выбрать команды меню Tools | References (Сервис | Ссылки). Отображается диалоговое окно Reference (Ссылки) со списком библиотек типов, программ, библиотек DLL и элементов управления ActiveX (рис. 1). Необходимо установить ссылку на приложение, которое будет автоматизировано. Например, для установки ссылки на Word 2000 следует установить флажок рядом с Microsoft Word 9.0 Object Library.

СОВЕТ

Если нужный пункт, на который необходимо установить ссылку, отсутствует s диалоговом окне References, щелкните на кнопке Browse (Обзор), чтобы отыскать приложение в файловой системе.

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

Просмотр объектов, свойств и методов

Прежде чем перейти к использованию объектов другого приложения, полезно ознакомиться с неко­торыми основными сведениями. Важно понимать термины "объект", "свойства" и "методы", иначе остав­шаяся часть главы просто не будет иметь смысла.

Объект — это элемент, который можно запрограммировать, контролировать и над которым можно производить какие-либо действия. Объекты Access включают формы, текстовые поля, кнопки команд и др. При использовании автоматизации другие приложения и их объекты могут быть запрограммированы;

ими можно манипулировать из Access. Microsoft Office содержит более 500 объектов, которыми можно манипулировать, управлять и которые можно программировать. Например, Word содержит объект Document, a Excel — объект Workbook.

Свойство — это характеристика объекта. Свойство можно описать как прилагательное, поскольку оно описывает или характеризует объект. Свойства текстового поля в Access включают Name (Имя), Visible (Отображение), Forecolor (Цвет переднего плана) и др. При использовании объектов соответствующих приложений свойствами данных объектов можно манипулировать, применяя метод автоматизации. Напри­мер, как и форма Access, приложения Word или Excel можно отображать либо не отображать. Большин­ство свойств данного объекта можно и установить, и просто считать.

Метод — это действие, которое может быть осуществлено над объектом. Метод можно рассматривать как глагол. Например, Close является методом формы Access. Примером метода Excel служит метод Quit для закрытия приложения Excel.

Представление об объектных моделях

При автоматизации с использованием другого приложения полезно ознакомиться с его объектной моделью, чтобы понять, какие объекты доступны для работы. Объектная модель — это представление (в общей форме) объектов приложения. С помощью объектной модели можно легко и быстро определить, какими объектами приложения можно манипулировать и какие из них можно контролировать и програм­мировать. Объектные модели для различных приложений описаны в файлах системы помощи. Объектные модели программ Office 2000 приведены во второй части статьи.
Использование браузера объектов

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

Для использования браузера объектов необходимо в редакторе Visual Basic выбрать в меню команду View | Object Browser (Вид | Браузер объектов) или нажать клавишу F2 (рис. 2).



РИСУНОК 2. Браузер объектов, отображающий объекты MicrosoftWord.

При первом открытии браузера объектов полю со списком в верхнем левом углу будет присвоено значение All Libraries (Все библиотеки). При наличии этой установки браузер объектов отображает все объекты для всех библиотек, на которые установлены ссылки. Первым шагом может стать выбор прило­жения в поле со списком для требуемых объектов. Например, если выбран Word, будут показаны только объекты Word.

Другое поле со списком можно использовать для указания отдельного пункта. Например, если необ­ходимо найти окно сообщений во всех библиотеках, следует выбрать в верхнем поле со списком значе­ние All Libraries, а в нижнем ввести MsgBox и щелкнуть на пиктограмме с биноклем (рис. 3).







РИСУНОК 3. Поиск MsgBox в браузере объектов.

Нижняя левая панель браузера объектов озаглавлена Classes (Классы). Список классов отображает доступные типы объектов выбранной библиотеки типов. При выборе пункта в списке классов в списке Members of (Члены) отображаются свойства, методы и события.

Нижняя правая панель, озаглавленная Members (Члены), отображает пункты, относящиеся к данно­му классу, выбранному в левой панели. Например, при выборе объекта приложения правая панель чле­нов отображает все свойства, методы и события объектов приложения. Список Members Of отображает свойства, методы, события и константы, соответствующие выбранному в списке классов объекту.

Откуда браузер объектов получает информацию об объектах, свойствах и методах? Большинство при­ложений, существующих сегодня на рынке, содержат файл библиотеки типов, в котором хранится ин­формация об объектах, свойствах, методах и константах приложения. Браузер объектов отображает информацию из библиотеки типов. Файлы библиотек типов обычно имеют расширение .TLB или .OLB.

СОВЕТ

По умолчанию списки в панелях Classes (Классы) и Members (Члены) отсортированы в Алфавитном порядке. Можно щелкнуть правой кнопкой на панелях и выбрать в контекстном меню команду Group Members (Члены группы). Спи­сок будет отсортирован заново, при этом сводятся воедино все свойства, методы и события. Элементы каждого свойства, метода и события сортируются в алфавитном порядке.
В нижней части браузера объектов показан синтаксис для выбранного пункта. Например, при выборе объекта Access Application и выборе Dlookup в нижней части браузера объектов отображается соответству­ющий синтаксис. Более подробную информацию об этом можно найти в контекстной справке.

Создание объектной переменной

Переменная — это место, выделенное в памяти для хранения или выборки информации. Разработчи­ки, без сомнения, обладают громадным опытом использования простых переменных, таких как строки и переменные целого типа. Ниже приведены примеры объявления и использования двух простых перемен­ных:

Dim strMame as String

Dim I as integer

StrName = "Bob"

I = 10

В данном примере переменные включают специфический тип данных — информация хранится и мо­жет быть считана по необходимости.

Переменные Object объявляются с помощью выражения Dim, как и простые переменные:

Dim objWord as Word.application

Dim objExcel as Excel.application

СОВЕТ

Рекомендуется полностью описывать все объекты, используемые при автоматизации. Вместо выражения

Dim objWord as Application

лучше использовать

Dim objWord as Word.Application

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

Ссылка на уже открытое приложение

После создания объектной переменной следующий шаг — установка ссылки на приложение, которое необходимо автоматизировать. Однако следует помнить, что разработчику неизвестно, открыто ли в дан­ный момент это приложение на компьютере пользователя. Допустим, необходимо автоматизировать Word, но пользователь мог уже открыть Word. В этом случае можно воспользоваться данной копией Word для сеанса автоматизации. Иначе придется открыть другую копию Word, что приведет к быстрому поглощению ресурсов компьютера.

Чтобы определить, открыто ли необходимое приложение в данный момент, следует воспользоваться функцией GetObject. Функция GetObject устанавливает ссылку на уже открытое приложение:

'Объявление objWord в качестве объектной переменной

Dim objWord as Word.Application

'Функция GetObject использует уже открытое приложение

Set objWord = Get0bject(, 'Word.Application")

Присваивание приложению объектной переменной

Для присваивания ссылки объектной переменной данному объекту используется ключевое слово Set. Например:

Set objExcel = Excel.Application

Объектные переменные содержат указатель на объект. Когда объектная переменная присваивается приложению Excel, она содержит указатель на приложение Excel, а не все приложение Excel. Объекты при передаче из одной процедуры в другую всегда передаются по ссылке, а не по значению.

Запуск отдельной копии приложения

В тех случаях, когда приложение не открыто либо когда необходимо запустить отдельную копию при­ложения, используется ключевое слово New. Приведенный ниже код запускает новую копию Microsoft Word:

'Объявление objWord в качестве объектной переменной

Dim objWord as Word.Application

'Запуск новой копии Microsoft Word

Set objWord = New Word.Application

ПРЕДОСТЕРЕЖЕНИЕ

Операторы Dim и Set всегда следует объявлять в разных строках. Не объединяйте операторы Dim и Set в одной строке, как записано ниже:

Dim ObjWord = Mew Word.application

Если объединить данные операторы в одной строке, код выполняется более медленно и не всегда точно известно, в какой момент времени объект: инициализируется (записывается в память).

Совместное использование функции GetObject и ключевого слова New

Открывать новую копию приложения, если оно уже открыто, не рекомендуется. Запускать новую копию следует лишь в тех случаях, когда приложение в данный момент не открыто. Для проверки необходимо воспользоваться функцией GetObject и при необходимости ключевым словом New для запуска новой копии приложения.

' Используется Word, если он открыт. Если нет, открывается

' копия Word.

' Объявление objWord в качестве объектной переменной.

Dim objWord As Word.Application

' Если Word не открыт, при выполнении GetObject возникает

' ошибка. Ошибка игнорируется.

On Error Resume Next

' Попытка установить ссылку на уже открытый Word.

Set objWord = Get0bject(, "Word.Application")

' Если objWord принимает пустое значение Nothing (неинициализируемая

' объектная переменная), значит. Word не открыт.

If objWord Is Nothing Then

' Запускается новая копия Word.

Set objWord = New Word.Application

' Если objWord сохраняет значение Nothing, предполагается, что

' MS Word 9.0 не установлен на компьютере.

If objWord Is Nothing Then

MsgBox "MS Word 2000 is not installed on your computer"

End If

End If

' При возникновении ошибки перейти к ErrorHandler

' (Ниже записывается ErrorHandler!)

ПРИМЕЧАНИЕ

Ключевое слово New может использоваться только в том случае, если возможно создание ссылки на библиотеку типов данного приложения.

Сравнение раннего и позднего связывания

Объектная переменная в выражениях Dim и Set специально ссылается на Word.Application. Такой спо­соб носит название раннего связывания. При компиляции происходит связывание объектной переменной с библиотекой типов приложения Word. В результате код выполняется намного быстрее, поскольку значительная часть работы совершается при компиляции, а не при выполнении.

С другой стороны, если бы objWord была объявлена как объект, связывание с библиотекой типов приложения Word до выполнения не происходило бы. Это значительно замедлило бы выполнение кода. Приведенный ниже пример обобщает сказанное:

'Используется способ более быстрого раннего связывания.

Dim objWord as Word.Application

'Позднее связывание. Такой код выполняется медленнее.

Dim objWord as Object

СОВЕТ

В базу данных Automation, mdb (см. часть 2) включены примеры тестов на определений быстродействия, которые показывают значительные преимущества раннего связывания.

Использование функции CreateObject

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

К сожалению, в некоторых случаях невозможно воспользоваться способом раннего связывания или ключевым словом New. В таких обстоятельствах полезной окажется функция CreateObject.

Что делать, если нельзя установить ссылку на другие приложения?

При использовании метода автоматизации из некоторых приложений (здесь не имеется в виду прило­жения Access) невозможно создать ссылку на другое приложение (диалоговое окно ссылок отсутствует). Подобное происходит при работе с Outlook 97/98 и разработке приложений для Internet. В этих случаях приходится использовать способ позднего связывания и функцию CreateObject. Ниже приводится пример кода автоматизации, который можно создать в Outlook для автоматизации в Word.

ПРИМЕЧАНИЕ

В любом случае для определения того, открыто окно Word или нет, может быть использована функция GetObject. Функция CreateObject запускает новую копию приложения.

'Объявление objWord в качестве об-ьектной переменной.

Dim objWord As Word.Application

' Если Word не открыт, при выполнении GetObject возникает

'ошибка. Ошибка игнорируется.

On Error Resume Next

'Попытка установить ссылку на приложение Word, которое уже открыто.

Set objWord=GetObject(, "Word.Application")

'Если Word HE открыт, возникает ошибка 429.

If Err. Number = 429 Then

Err. Number = 0

'Запуск новой копии приложения Word.

Set objWord = CreateObject ("Word.Application")

'При повторном возникновении ошибки 429 предполагается,

' что MS Word 9.0 не установлен на компьютере.

If Err.Number = 429 Then

MsgBox "MS Word 2000 is not installed on your computer"

End If

End If

'При возникновении ошибки перейти к ErrorHandler

'(Ниже записывается Errorhandler!)

Что делать, если у пользователей уставлены другие версии приложения?

В некоторых компаниях разные пользователи могут работать с разными версиями приложения. Напри­мер, одни используют Word 95, другие — Word 97, а третьи — Word 2000. Более того, у некоторых пользо­вателей на одном и том же компьютере может быть установлено несколько версий Word!

С помощью функции CreateObject в качестве параметра можно указать точную версию Word, пред­назначенную для использования. В следующем примере функция CreateObject используется для открытия Word 97:

'Объявления objWord в качестве объектной переменной.

Dim objWord As Word.Application

'Запуск новой копии приложения Word 97.

Set objWord = CreateObject ("Word.Application.8")

ПРИМЕЧАНИЕ

Номера версий для программ: Office 95— 7.0; Office 97—8.0; Office 2000—9.0. Кроме того, параметр номера версии можно указать при использовании ключевого слова New.

Использование свойств и методов объекта Automation

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

Установка свойств объекта

Именно здесь преимущества автоматизации проявляются в полную силу. Теперь можно работать с другими приложениями, используя их возможности и функциональные свойства. Работа со свойствами объекта Automation аналогична работе со свойствами объекта в Access. В приведенных ниже примерах используются свойства в Word и Excel:

'Установка свойств об-ьекта Automation

objWord.Visible = True

objExcel.Cells(1,1).Value = "Yearly Sales"

Установка методов объекта

В процессе автоматизации можно выполнять методы объекта. Ниже приведено несколько примеров:

'Выполнение метода "Add" объекта. objWord.Documents.Add objExcel.Workbooks.Add

СОВЕТ

Во второй части статьи приведены многочисленные примеры автоматизации в приложениях Microsoft Office. Там же более под­робно описываются объекты, свойства и методы различных приложений.

Освобождение объекта Automation

Закончив работу с объектной переменной, ее необходимо освободить, установив объект равным Nothing. Благодаря этому можно освободить ценные ресурсы. Синтаксис приводится ниже:

'Освобождение объектной переменной

Set objWord = Nothing

ПРИМЕЧАНИЕ

После окончания работы с объектной переменной следует немедленно перейти к концу процедуры и установить (Set) данную объектную переменную равной пустому значению (Nothing). Это поможет не забыть освободить объектные переменные после написания большой процедуры.

Создание цельного проекта

В данной главе не рассмотрены все этапы запуска процесса автоматизации. Ниже приведен пример кода, определяющий весь проект в целом. Указанный код выводит на печать документ Word с помощью мето­да автоматизации. В код включены все рассмотренные выше этапы: создание или получение ссылки на Word, использование объектов Word (в данном случае метод PrintOut) и освобождение объекта Automation.

'Объявление objWord в качестве объектной переменной

Dim objWord As Word.Application

'Если приложение Word не открыто, при выполнении GetObject возникает

'ошибка. Ошибка игнорируется.

On Error Resume Next

'Попытка установить ссылку на приложение Word, которое уже открыто.

Set objWord = Get0bject(, "Word.Application")

'Если objWord имеет значение Nothing (объектная переменная, которая

'не ссылается на объект), значит, Word не открыт.

If objWord Is Nothing Then

'Запуск новой копии приложения Word.

Set objWord = New Word.Application

'Если objWord все равно имеет значение Nothing, предполагается,

' что MS Word 9.0 не установлен на компьютере.

If objWord Is Nothing Then

MsgBox "Ms Word 2000 is not installed on your computer"

End If

End If

' При возникновении ошибки перейти к ErrorHandler

'(Ниже записывается ErrorHandler!)

'Открытие документа Word.

objWord.Documents.Open ("С:\Automation\Northwind Magazine Ad.doc")

'Печать документа Word. objWord.Printout Background:=False

'Закрытие Word. objWord.Quit

'Освобождение объектной переменной. Set objWord = Nothing

СОВЕТ

Предполагается, что данный пример очень прост. Во второй части статьи приведен более сложный код автоматизации, а также файл Automation.MDB, которыми можно воспользоваться в дальнейшей работе.
Закрытие приложения сервера автоматизации

В течение сеанса автоматизации можно использовать уже открытую копию приложения либо открыть новую копию данного приложения. Важно, чтобы закрытие приложения сервера автоматизации происхо­дило надлежащим образом, в соответствии с обстоятельствами.

Если в начале сеанса автоматизации приложение уже открыто и используется данная копия приложе­ния, не следует закрывать приложение по окончании сеанса автоматизации. Пользователи будут чрезвы­чайно раздосадованы, если используемое ими приложение будет закрыто посторонним кодом.

Если же, с другой стороны, была создана новая копия приложения, по окончании сеанса автомати­зации ее следует закрыть. Иначе приложение останется открытым и никем не используемым и будет "поглощать" ценные ресурсы компьютера.

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

'Закрытие приложения Excel с помощью метода Quit.

objExcel.Quit

Использование свойства UserControl для определения способа, с помощью которого было открыто приложение

Свойство UserControl позволяет определить, было ли приложение или документ создано либо откры­то пользователем или программным способом. Если свойство UserControl (логическая переменная) истинно, значит, приложение или документ были открыты пользователем; если ложно — программным способом.

Код, приведенный в примере ниже, открывает код программным способом, а затем проверяет, как было открыто приложение Word, с помощью свойства UserControl.

'Объявление objWord в качестве объектной переменной.

Dim objWord As Word.Application

'Открытие Word программным способом.

Set objWord = New Word.Application

'Проверка свойства UserControl для определения способа

'открытия Word — пользователем или программным способом.

If objWord.Application.UserControl Then

MsgBox "The Word application was opened by the user".

Else

MsgBox "The Word application was opened progranunatically" .

End If

Set objWord = Nothing
Использование WithEvents для отображения событий сервера автоматизации

До сих пор способы применения метода автоматизации, рассматриваемые в данной главе, напомина­ли одностороннюю связь. Например, Access управляет и указывает Word выполнить те или иные действия. Использование ключевого слова WithEvents позволяет организовать двустороннюю связь между Access и Word. Access может приказать Word распечатать письмо либо документ, a Word может послать Access сообщение в случае возникновения определенных ситуаций.

.Во-первых, важно определить, о каких сообщениях следует сообщать при вызове приложения. Простей­ший способ заключается в использовании браузера объектов. Необходимо щелкнуть на объекте приложе­ния и посмотреть, указаны ли какие-либо события. Для объекта Application Word 97 отображаются только два события (DocumentChange и Quit). Для объекта Application Word 2000 отображаются 12 событий (рис. 4). При ссылке на объект различные пиктограммы указывают свойства (палец, показывающий на лист бумаги), методы (летящий зеленый ластик) и события (молния).



РИСУНОК 4. Браузер объектов отображает открытые события Microsoft Word 2000.
В Microsoft Excel открыто даже больше событий, чем в Word. Объект приложения Excel 2000 отобра­жает 21 событие (рис. 5).



РИСУНОК 5. Браузер объектов отображает открытые события Microsoft Excel 2000.
Работа с WithEvents

Обычно при использовании метода автоматизации в процедуре объектная переменная в ней описыва­ется следующим образом:

Dim objWord as Word.application
Для использования WithEvents оператор Dim необходимо исключить из процедуры и создать вместо него переменную уровня модуля. Поскольку используется переменная уровня модуля, ключевое слово Dim необходимо изменить на Private или Public. Кроме того, для отображения событий приложения можно воспользоваться ключевым словом WithEvents.

'Объявление переменной уровня модуля с помощью ключевого слова WithEvents.

Private objWord WithEvents as Word.application

СОВЕТ

Ключевое слово WithEvents можно использовать только с модулями классов (модули форм — это модули классов). В стандартных модулях использовать WithEvents нельзя.

На рис. 6 показано, как объявлять переменную уровня модуля с помощью ключевого слова WithEvents.

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



РИСУНОК 6. Объявление переменной уровня модуля с помощью ключевого слова WithEvents.
На рис. 7 в окне кода отображаются процедуры, использующие события Word Document Change и Quit.



РИСУНОК 7.Процедуры, использующие события открытия Microsoft Word.
Использование приемов и возможностей автоматизации

Обычно недостатки объекта Automation связывают с низкой производительностью. На самом деле при соответствующем техническом обеспечении и надлежащих приемах кодирования процесс автоматизации происходит достаточно эффективно. При использовании Automation рекомендуется не забывать о следую­щих концепциях.

Используйте ссылки, способ раннего связывания и ключевое слово New

Для начала сеанса автоматизации необходимо установить ссылку на приложение с помощью диалого­вого окна ссылок. При создании объектной переменной следует использовать специфический класс и ключевое слово New для инициализации новой копии объекта. Все эти этапы подробно рассмотрены ранее в этой главе.

Используйте существующее приложение, если оно уже открыто

Не следует открывать новую копию приложения в каждом сеансе автоматизации. Если приложение уже открыто на компьютере пользователя, воспользуйтесь его открытой копией для сеанса автоматизации.

Отключите ScreenUpdating

Во время обычного сеанса автоматизации с Word или Excel происходит постоянное обновление экра­на. Если ставить вопрос о производительности, при отключенном ScreenUpdating показатели будут значи­тельно выше, поскольку меньше ресурсов уходит на обработку. Рекомендуется отключить ScreenUpdating, выполнить всю работу, связанную с автоматизацией, а затем снова включить ScreenUpdating. Пользова­тель увидит законченный документ по окончании работы. Описанный подход проиллюстрирован в при­веденном ниже коде:

'Отключение ScreenUpdating

Application.ScreenUpdating = False

'Здесь выполняется код автоматизации!

'Включение ScreenUpdating

Application.ScreenUpdating = True
СОВЕТ

Однажды я создал приложение, в котором оставил включенным ScreenUpdating. При этом быстродействие приложения значительно снизилось. В следующей версии для повышения производительности обновление экрана было отключе­но. В результате я получил столько жалоб от пользователей, что был вынужден переделать и повторно распростра­нить приложение с включенным ScreenUpdating. Пользователи объяснили, что во время обновления экрана у них появлялась возможность прочесть документ, начать просматривать его либо убедиться в том, что на печать отправляется нужный документ. Пользователи, вынужденные ждать завершения сеанса автоматизации, чтобы увидеть доку­мент, теряли на этом примерно 3-5 секунд полезного времени. Кроме того, пользователям был приятен сам процесс наблюдения за "волшебным" составлением документов на экране. Из описанного случая можно сделать следующий вывод: при создании приложений следует учитывать не только компьютерное время обработки, но и "время обработ­ки", которое необходимо пользователям.

Обратная связь с пользователем

Если сеанс автоматизации занимает значительное время, необходимо предусмотреть обратную связь с пользователем, отображающую ход процесса. В качестве подобной связи может использоваться индикатор хода процесса, курсор в виде песочных часов либо какой-нибудь другой визуальный индикатор. Если такой индикатор отсутствует, пользователь может просто выключить компьютер, думая, что он "завис". Следует помнить, что в процессе автоматизации открывается больше одного приложения. При внезапном отклю­чении питания последствия могут оказаться разрушительными.

Разработчики знают, что обратная связь с пользователем, обеспечиваемая например, индикатором хода процесса, может значительно замедлить сам процесс. Тем не менее, важно не реальное время, необходи­мое для завершения процесса, а воспринимаемое. При наличии визуальных индикаторов пользователям кажется, что процесс занимает меньше времени, хотя фактически процесс происходит дольше.

СОВЕТ

По заказу аэрокосмической компании я создал приложение, использовавшее очень сложный код автоматизации Excel. Во время сеанса автоматизации по экрану "пролетала" небольшая пиктограмма с изображением самолета. Пользо­вателям больше нравился маленький самолет, пролетающий по экрану, чем сложный код автоматизации, выполняю­щий требуемую работу.

Выполняйте код на сервере автоматизации

Процесс всегда происходит намного быстрее, если позволить серверу автоматизации выполнять соб­ственный код. Например, если приложение Access автоматизируется в Word, вначале необходимо создать копию объекта документа Word. Затем необходимо поместить весь код VBA, управляющий и манипули­рующий программой Word (например, изменением шрифтов или стилей текста либо печатью документа), в программе Word.

Другими словами, приложение должно само выполнять свой код. При использовании объектов, свойств или методов Word следует поместить VBA-код в Word. Иначе для каждого оператора кода будет проис­ходить перекрестный процесс коммуникации между Access и Word. Придерживаясь данной методики, можно значительно повысить показатели производительности.

СОВЕТ

Код VBA в таких приложениях, как Word и Excel, размещается в шаблонах. Для упрощения распространения шабло­нов следует разместить их в общей папке на сетевом сервере. Например, в Word шаблоны рабочей группы могут быть установлены для размещения на сетевом диске. При необходимости внести изменения в код или добавлении новых шаблонов их можно просто скопировать на сетевой диск в папку, где хранятся шаблоны рабочей группы.

Используйте конструкцию With/End With

Существует две важные причины для использования конструкции With/End With. Первая причина — это то, что код выполняется более эффективно, поскольку ссылку на объект устанавливают один раз, вме­сто того чтобы устанавливать ее в каждом операторе кода. Вторая причина — читабельность. Каждую точку следует рассматривать как барьер на беговой дорожке. Чем меньше точек, тем лучше! Рассмотрим следу­ющие примеры:
Пример 1. Ссылки на объект установлены в каждой строке кода, что замедляет работу. Кроме того, код плохо воспринимается.

objExcel.Range("F6").Select

objExcel.ActiveCell.FonnulaRlCl = "Yearly Sales" objExcel.Range("G6").Select

objExcel.ActiveCell.FormulaRlCl = "Sales Summary" objExcel.Range("F7").Select

Пример 2. Ссылка на объект установлена только один раз, что ускоряет работу. Кроме того, код вполне удобочитаем.

With objExcel

.Range("F6").Select

.ActiveCell.FormulaRlCl = "Northwind Traders"

.Range("G6").Select

.ActiveCell.FormulaRlCl = "Sales Summary"

.Range("F7").Select

End With

Освобождайте объектные переменные

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

Не отображайте диалоговые окна и окна сообщений

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

Используйте обработку ошибок

Автоматизация значительно усложняет приложение. Преимущества использования возможностей других приложений имеют и обратную сторону — может возникнуть больше ошибок. Важно в соответствующем месте разместить код обработки ошибок, которые могут возникнуть в процессе автоматизации. Для при­ложений Microsoft Office приложение-сервер может возвращать информацию об ошибках. Более подроб­но профессиональная обработка ошибок рассматривается в отдельной статье.

Резюме

В данной главе изложены принципы и возможности автоматизации. Автоматизация предполагает совме­стную работу приложений, предоставляя разработчику массу дополнительных возможностей для создания сложных программных продуктов. Гораздо легче изучить данные принципы, чем создать собственный редактор, электронную таблицу или какой-либо иной инструмент, уже входящий в состав другого при­ложения. Кроме того, в этой главе рассказывается, как выполнить запуск копии другого приложения, а также об использовании приложения и его закрытии. Рассмотрены многие приемы, позволяющие повы­сить производительность процесса автоматизации. Во второй части речь пойдет об интеграции приложений Access с другими приложениями Microsoft Office.


написать администратору сайта