[an error occurred while processing this directive]

В начало

Введение

1-й час. Знакомство с Visual Basic for Applications

2-й час. Работа с макросами

3-й час. Работа с элементами управления

4-й час. Переменные и константы

5-й час. Ввод данных

6-й час. Логика условных операторов

7-й час. Циклические вычисления

8-й час. Введение в объекты

9-й час. Основные объекты Excel

10-й час. Объект Range

11-й час. Редактор Visual Basic

12-й час. Отладка программ

13-й час. Обработка ошибок

14-й час. Экранные формы

15-й час. Автоматизация экранных форм

16-й час. Панели инструментов

17-й час. Работа с меню

18-й час. Диаграммы

19-й час. Сводные таблицы

20-й час. Получение внешних данных

21-й час. Доступ к данным с помощью ADO

22-й час. Еще об ADO

23-й час. Автоматизация

24-й час. Выполнение процедур

Приложение. Ответы

23-й час. Автоматизация

Несмотря на то что программа Excel может делать многое и делает это хорошо, она не является универсальной программой и, следовательно, что-то она не может делать совсем или что-то делает плохо по сравнению с другими приложениями. Например, вы не станете создавать в Excel текстовый документ (хотя это возможно, и некоторые люди так и поступают, я не рекомендую это делать). К счастью, есть возможность, не выходя из Excel, получить полный доступ ко всем функциональным средствам всех приложений Microsoft Office. В этом часе мы изучим возможность управления из Excel другими приложениями с помощью кода VBA.

В этом часе будут рассмотрены следующие вопросы.

  • Возможности автоматизации.
  • Основы автоматизации.
  • Как создать ссылку на библиотеку объектов другого приложения.
  • Управление из Excel приложением Microsoft Word.

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

Автоматизация, ранее известная как OLE-автоматизация, - это технология, позволяющая включать функциональные средства любого Windows-приложения в другое приложение посредством программного кода. Другими словами, автоматизация - это процесс управления одним приложением посредством другого. Использование другого приложения как источника новых средств и инструментов значительно расширяет возможности вызывающего приложения, причем это даже не всегда требует написания соответствующих процедур VBA. Можно, например, организовать показ слайдов с музыкальным сопровождением (используя средства PowerPoint), которые будут отображать данные рабочей книги Excel.

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

Основы автоматизации

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

Стандарт DDE (Dynamic Data Exchange -динамический обмен данными) и метод SendKeys позволяют работать с приложениями, которые не поддерживают технологию OLE-автоматизации.

Ссылка на библиотеку объектов приложения-сервера

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

В этом часе мы рассмотрим, как Excel будет управлять приложением Microsoft Word, т. е. Word будет приложением-сервером, и надо создать ссылку на библиотеку его объектов. Для этого, находясь в редакторе Visual Basic, выполните команду Tools > References (Сервис > Ссылки). Откроется диалоговое окно References, показанное на рис. 23.1. Установите флажок Microsoft Word 9.0 Object Library (Библиотека объектов Microsoft Word 9.0) и щелкните на кнопке ОК. В текущий проект будет добавлена ссылка на эту библиотеку.

Если на вашем компьютере не инсталлирована программа Word 2000, то вы не найдете библиотеку Microsoft Word 9.0 Object Library в списке окна References. A без задания ссылки на эту библиотеку не будут работать те процедуры, которые описаны ниже. Впрочем, если у вас установлена предыдущая версия Word (Word 8.0), то это спасает положение - установите ссылку на библиотеку Microsoft Word 8.0 Object Library- Более ранние версии Word (например, Word 95) не поддерживают VBA и будут бесполезны в упражнениях этого часа. Word 97 (Word 8.0) - первая версия программ семейства Word, которая использует Visual Basic for Applications и соответственно поддерживает технологию автоматизации.

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

Рис. 23.2. Окно просмотра объектов - полезное средство для знакомства с объектами выбранных библиотек

Просмотр библиотеки объектов

Окно просмотра объектов Object Browser позволяет просматривать все библиотеки объектов, на которые установлены ссылки. Здесь приведены списки всех доступных объектов и их свойств, событий и методов. Для просмотра библиотеки объектов Microsoft Word сначала выполните команду View > Object Browser (Вид > Просмотр объектов), которая открывает окно Object Browser. Выберите Word из списка проектов и библиотек (самый верхний раскрывающийся список в окне Object Browser), отобразится содержимое библиотеки объектов Word (рис. 23.2). Здесь можно выбрать любой объект этой библиотеки и просмотреть все его свойства и методы.

Создание экземпляра приложения-сервера

Задание ссылки на соответствующую библиотеку объектов - это необходимое, но недостаточное условие для использования объектов этой библиотеки. Нужно также с помощью процедуры создать экземпляр приложения-сервера. Для этого используется оператор CreateObject (Создать объект). Только после создания экземпляра приложения-сервера можно использовать все открытые объекты этого приложения, а также их свойства и методы. В листинге 23.1 приведен код, создающий экземпляр Word.

Листинг 23.1. Создание экземпляра Word

1: Dim у As Word.Application

2: Set у " CreateObject("Word.Application")

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

Что делать дальше? Вот один из возможных путей дальнейшего сотрудничества Word и Excel. Сначала несколько наводящих соображений. И Word, и Excel используют VBA как язык автоматизации. И Word и Excel позволяют записывать макросы. Это не наталкивает вас на некую продуктивную мысль? Нет? Тогда продолжаю: из вышесказанного следует, что можно записать макрос в Word, а затем полученный код вставить в процедуру Excel! Далее в код при необходимости можно внести изменения, или как-нибудь еще использовать этот код - главное, что он у вас есть! Этот подход мы продемонстрируем в следующем разделе.

Использование объектов Microsoft Word

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

Менеджеру по продажам

Посылаю Вам таблицу с итоговыми данными по объемам продаж. Если у Вас есть вопросы, то свяжитесь со мной.

С уважением,

Босс

Сохраните этот текст в файле Письмо.

Теперь вставим в письмо две закладки. Закладка - это поименованное место в документе Word. Для вставки закладок выполните следующие действия.

  1. Установите курсор в начало фразы Менеджеру по продажам.
  2. Выполните команду Вставка > Закладка, откроется диалоговое окно Закладка.
  3. Введите Регион в качестве имени закладки и щелкните на кнопке Добавить.
  4. Добавьте пустую строку перед С уважением. Установите курсор в эту пустую строку и вставьте закладку Данные.
  5. Сохраните и затем закройте документ Письмо.

Перейдите в Excel и создайте таблицу с данными, подобную приведенной на рис, 23.3. Эта таблица далее будет скопирована и вставлена в документ Письмо.

Вернитесь в Word и начните запись макроса с именем Данные_продажи, предварительно открыв новый документ.

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

Рис. 23.3. Таблица данных, которую надо вставить в письмо

Во время записи макроса выполните следующие действия.

  1. Выберите команду Файл > Открыть и откройте документ Письмо.
  2. Выполните команду Правка > Перейти. В диалоговом окне Найти и заменить на вкладке Перейти в списке Объект перехода выберите пункт Закладка, а затем в раскрывающемся списке Введите имя закладки выберите Регион. Щелкните на кнопке Перейти.
  3. Теперь выберите закладку Данные и щелкните на кнопке Перейти.
  4. Щелкните на кнопке Закрыть для удаления диалогового окна Найти и заменить.
  5. Остановите запись макроса.

Выполнив команду Сервис > Макрос > Макросы, откроете диалоговое окно Макрос и выберите макрос Данные_продажи. Для просмотра кода этого макроса щелкните на кнопке Изменить. Удалите строки из процедуры так, чтобы у вас осталось то, что показано в листинге 23.2.

Листинг 23.2. "Остаток" процедуры Данные продажи

Sub Данные_продажи()

 Documents.Open FileName:="Письмо.doc"

 Selection.GoTo What:=wdGoToBookmark, Name:="Регион"

 Selection.GoTo What:=wdGoToBookmark, Name:="Данные"

End Sub

Этот код будет основой процедуры, которую мы создаем в Excel. Скопируйте эту процедуру в буфер обмена. Закройте Word, вернитесь в Excel и откройте редактор Visual Basic. Добавьте модуль в текущую рабочую книгу и вставьте в него скопированную процедуру. Теперь надо создать экземпляр Word, а также перед каждой строчкой процедуры поставить имя переменной, соответствующей экземпляру Word. Самый простой способ сделать это - применить оператор With. Код измененной процедуры показан в листинге 23.3.

Листинг 23.3. Процедура Данные продажи с экземпляром Word

Sub Данные_продажи()

 Dim y As Word.Application

 Set y = CreateObject("Word.Application")

 With y

  .Documents.Open FileName:="Письмо.doc"

  .Selection.GoTo What:=wdGoToBookmark, Name:="Регион"

  .Selection.GoTo What:=wdGoToBookmark, Name:="Данные"

 End With

End Sub

Это почти все. Осталось добавить код, копирующий таблицу данных в Excel и вставляющий ее в документ Word. Полный код процедуры приведен в листинге 23.4, добавленный код выделен полужирным шрифтом.

Листинг 23.3. Законченная процедура Данные продажи '

Sub Данные_продажи()

 Dim y As Word.Application

 Set y = CreateObject("Word.Application")

 With y

  .Visible = True

  'В следующем операторе путь к файлу Письмо зависит от того,

  'где вы сохранили этот файл. При необходимости внесите

  'изменения в путь

  .Documents.OpenFileName:="C:\Мои документы\Письмо.doc"

  Worksheets("Лист1").Range("B1").Copy

  .Selection.GoTo What:=wdGoToBookmark, Name:="Регион"

  .Selection.Paste

  Application.CutCopyMode = False

  Worksheets("Лист1").Range("A3:D11).Select

  .Selection.Copy

  .Selection.GoTo What:=wdGoToBookmark, Name:="Данные"

  .Selection.Paste Application.CutCopyMode = False

 End With

End Sub

Первый новый оператор .Visible = True устанавливает свойство Word Visible (Видимый) как True, тем самым открывая окно программы Word и выводя его на передний план.

Далее открывается документ Письмо. Затем копируется содержимое ячейки В1, содержащей название региона, осуществляется переход к закладке Регион и вставляется содержимое ячейки В1. Установка свойства Excel cutCopyMode (Режим вырезания и копирования) как False снимает выделение с ячейки В1:

.Documents. OpenFileName:="C:\Мои документы\Письмо.dос"

Worksheets("Лист1").Range("B1").Copy

.Selection.GoTo What:=wdGoToBookrnark, Name:="Регион"

.Selection.Paste

Application.CutCopyMode = False

Затем аналогичная процедура копирования и вставки выполняется для диапазона А3:D11.

Если окно Word открыто, закройте его и выполните процедуру Данные_продажи. Сначала откроется окно Word, затем в нем откроется документ Письмо. Через несколько мгновений в этот документ будут вставлены данные из рабочего листа Excel (рис. 23.4). Это простой учебный пример, в реальной жизни вы, по-видимому, захотите отформатировать полученный документ, но это, как говорится, совсем другая история.

Рис. 23.4. Документ Word со вставленными данными Excel

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

В заключение перечислим этапы выполнения этого примера.

  • Создание файла в приложении-сервере.
  • Создание таблицы данных в Excel (приложении-клиенте).
  • Запись макроса в приложении-сервере.
  • Копирование кода записанного макроса и вставка его в процедуру, создаваемую в Excel.
  • Изменение процедуры Excel для создания экземпляра приложения-сервера.

Резюме

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

Вопросы и ответы

Вопрос. Все ли Windows-приложения поддерживают технологию автоматизации?

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

Вопрос. Поддерживают ли автоматизацию приложения, работающие под DOS?

Ответ. Нет, такие приложения не могут поддерживать технологию автоматизации. Для управления DOS-приложениями попытайтесь воспользоваться методом SendKey, описание которого можно найти в справочной системе VBA.

Практикум

С помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении.

Тесты

  1. Какой оператор применяется для создания экземпляра приложения-сервера?
  2. Истинно или ложно следующее утверждение: кроме объектов Excel и VBA в окне просмотра объектов можно просматривать только объекты библиотек, на которые созданы ссылки?
  3. В примере этого часа программа Excel играла роль ___________ приложения (приложения-___________).
  4. Истинно или ложно следующее утверждение: Excel можно использоватьтолько как приложение-клиент?
  5. Как установить ссылку на библиотеку объектов?
  6. Истинно или ложно следующее утверждение: чтобы создать доступ к программе Word из другого приложения, надо применить технологию автоматизации?
  7. Истинно или ложно следующее утверждение: все приложения Microsoft Office в той или иной степени поддерживают технологию автоматизации?

Рис. 23.5. Таблица данных Excel

Рис 23.6. Документ Word

Упражнение

Создайте таблицу данных Excel, как на рис. 23.5. Создайте текстовый документ Word, представленный на рис. 23.6. Вставьте в этот документ необходимые закладки. Создайте процедуру, которая копировала бы информацию из таблицы данных Excel и вставляла в соответствующие места документа Word.

[an error occurred while processing this directive]