Глава 15. Интеграция Access 2002 с другими компонентами Office 2002.

Глава 15.

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

Хотя СУБД Access является прекрасным инструментом для создания различных приложений, выполняющих обработку данных в связанных таблицах, однако некоторые операции с данными гораздо эффективнее решаются другими приложениями, входящими в семейство Microsoft Office 2002. И при разработке приложения возникает желание создать запросы и формы Access, добавить к ним аналитические возможности Excel, обеспечить редактирование отчетов Access в редакторе Word, связать все это с текущей таблицей контактов Outlook или личным календарем и т. д. То есть, чтобы получить приложение для офиса, удовлетворяющее современным требованиям, необходимо обеспечить совместное функционирование различных приложений Microsoft Office. Оказывается, данное желание вполне осуществимо, и в настоящей главе мы покажем это.

Основой для организации такого взаимодействия является технология ActiveX. Технология ActiveX предоставляет разработчику два мощных механизма интеграции приложений:

  • OLE (Object Linking and Embedding) — механизм, который позволяет связывать или внедрять объекты, созданные другими приложениями Microsoft Office, в формы и отчеты Access.
  • Автоматизация (Automation, которая раньше называлась OLE Automation) — технология, позволяющая управлять из приложения Access объектами, которые созданы и поддерживаются другими приложениями Microsoft Office.

Оба этих механизма являются свойствами COM (Component Object Model) — модели компонентных объектов, которая специфицирует взаимодействие объектов в компонентной архитектуре приложения.

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

Замечание

На самом деле понятия OLE и Automation шире, чем это определено выше, они касаются самых разных приложений, которые поддерживают технологию ActiveX, а не только приложений семейства Microsoft Office, однако в рамках данной книги мы будем рассматривать их именно в таком контексте, как мы определили.

Итак, в настоящей главе будут затронуты следующие вопросы:

  • Использование протокола OLE и связанных с ним моделей построения интегрированных приложений
  • Вставка рисунков в Access, демонстрирующая возможности OLE
  • Совместное использование Access с Word и Excel
  • Общие понятия автоматизации и иллюстрация работы автоматизации внутри комплекта Microsoft Office
  • Использование элементов ActiveX

Связывание и внедрение объектов

Итак, OLE — это протокол, позволяющий создавать составные документы, которые включают в себя документы, созданные другими приложениями. Документ, который включает в себя другие документы, называется документом-контейнером OLE. В данном случае документами-контейнерами являются формы и отчеты Access. Документы, которые включаются в форму или отчет, называются документами-источниками или объектами OLE. Объектами OLE могут быть документы Word, Excel, рисунки, созданные в одном из графических редакторов, например Paint, видеоролики (файлы с расширением avi), звуковые файлы с расширением wav. Объекты OLE отличаются от объектов Automation, о которых мы будем говорить ниже, тем, что они являются документами, получаемыми с помощью приложения, а не частью его модели объектов.

Объекты OLE могут быть либо внедрены в документ-контейнер, либо связаны с ним. Приложение, которое поставляет объекты для внедрения и связывания, называется сервером OLE. Внедренный объект представляет собой копию документа-источника, который сохраняется вместе с формой или отчетом. Связанный объект хранится в отдельном файле, и документ-контейнер содержит только указатель на исходный файл объекта. Если кто-либо обновляет исходный файл объекта, то обновляется и представление объекта в составном документе. Коварство связанных объектов заключается в том, что при изменении местоположения исходного файла относительно составного документа, либо при изменении местоположения составного документа таким образом, что исходный файл становится недоступным, связь разрывается. Внедренные объекты всегда доступны, однако частое их использование приводит к непомерному увеличению файла составного документа.

Выполнив внедрение или связывание объекта OLE, можно легко активизировать из документа Access приложение, которому этот объект принадлежит. Для этого достаточно дважды щелкнуть левой кнопкой мыши по внедренному объекту, после чего объект может быть изменен. Когда же активизированное приложение будет закрыто, в документе-контейнере отразится (а в случае внедрения — сохранится) внесенное изменение.

Связывание и внедрение объектов OLE сравниваются в табл. 15.1.

Таблица 15.1. Сравнение характеристик связывания и внедрения

Параметр

Связывание

Внедрение

Число файлов

Необходимо поддерживать не

Поддерживать необходимо


менее двух файлов: связанного

лишь один файл составного


объекта (такого как лист Excel) и

документа, содержащего внед-


составного документа, исполь-

ренный объект


зующего этот обьект (такого, как



Word). Можно установить связь



так, что при обновлении исходно-



го файла объекта автоматически



обновляется файл составного



документа


Создание объектов

Объект создается копированием

Объект создается либо копи-


его из исходного документа и

рованием и вставкой, либо


вставкой связи в документ назначения

перетаскиванием с помощью
мыши из исходного файла в



файл составного документа

Обновление

Один и тот же исходный документ

Необходимо отразить измене-

объектов

могут использовать несколько

ния внедренного объекта в


составных документов. При изме-

каждом составном документе


нении исходного документа об-



новление объекта во всех контей-



нерах, которые его используют,



может происходить автоматически


Формат, исполь-

В зависимости от природы самого

Все внедренные объекты по-

зуемый в докумен-

объекта и возможностей контей-

являются в составном доку-

те-контейнере

нера, можно связывать его в раз-

менте как графические


личных форматах. Например,



можно связать рабочий лист Excel



с документом Word как графиче-



ский объект, форматированный



текст, неформатированный текст,



рисунок, растровую картинку


Поддержка

Необходимо отслеживать соответ-

Все, что необходимо — это

объектов

ствие путей к файлу исходного

поддерживать документ, со-


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

держащий внедренный обьект

Размер объекта

Поскольку исходный документ

Внедренный обьект должен


существует в отдельном файле,

содержать все необходимые


составной документ лишь весьма

данные внутри составного


незначительно увеличивает свой

документа, поэтому размер


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

последнего значительно уве-


файлом исходного документа

личивается при внедрении

Управление

Используйте команду Правка,

Большинство объектов можно

объектами

Связи (Edit, Links). Например,

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

можно установить связь таким

документе так, чтобы они су-

образом, чтобы можно было

ществовали как рисунки. Вер-


вручную или автоматически об-

нуть их в исходный формат


новлять объект, временно блоки-

внедренных объектов практи-

ровать связь, разрывать или вос-

чески никогда нельзя

станавливать ее


 

Вставка рисунков в формы и отчеты

В Microsoft Access существует возможность вставки рисунков в формы и отчеты. Использование рисунков может улучшить внешний вид создаваемых форм и отчетов. Например, в отчеты можно включать логотип фирмы, а в форме предоставлять возможность просмотра не только данных о сотрудниках фирмы, но и их фотографий. Для вставки рисунков в формы и отчеты используются специальные элементы управления — свободная и присоединенная рамки объектов (Unbound Object Frame, Bound Object Frame), а также элемент управления Рисунок (Image).

Способ вставки рисунка зависит от того, как предполагается его использовать.

  • Объект OLE можно хранить в одном из полей таблицы Access, например в таблице "Сотрудники" (Employee) базы данных "Борей" хранятся фотографии сотрудников. Можно в полях таблицы Access хранить также документы Word. В таком случае для отображения этих объектов в формах или отчетах следует использовать элемент управления Присоединенная рамка объекта (Bound Object Frame).
  • Объекты OLE могут храниться не в таблицах Access, а прямо в форме или отчете. С помощью такого способа в форме или отчете можно, например, сохранить логотип фирмы. В этом случае для отображения объекта OLE следует использовать элемент управления Свободная рамка объекта (Unbound Object Frame) или Рисунок (Image).
  • Можно также для добавления рисунка в форму или отчет использовать свойство Рисунок (Picture) этой формы или отчета. Обычно так поступают, когда требуется включить фоновый рисунок (подложку), занимающий часть окна или все окно формы или отчета.

Чтобы добавить фоновый рисунок в форму:

  1. Откройте форму в режиме Конструктора.
  2. В окне свойств формы на вкладке Макет (Format) найдите свойство Рисунок (Picture). В поле ввода этого свойства введите путь и имя файла рисунка. Для этого можно нажать кнопку Построителя и выбрать в окне Выбор рисунка (Insert Picture) необходимый файл рисунка (рис. 15.1).

Замечание

Несколько стандартных файлов для фоновых рисунков находятся в папке MICROSOFT OFFICE\OFFICE\BITMAPS\STYLES.

  1. Установите значение свойства Тип рисунка (Picture Type). Значений может быть два: Внедренный (Embedded) или Связанный (Linked). Если рисунок внедренный, он сохраняется в файле базы данных (mdb). Связанный рисунок хранится в отдельном файле на диске. О преимуществах и недостатках того и другого способа мы уже говорили выше. Если один и тот же рисунок вставляется во много форм или отчетов, то внедрение его приведет к "распуханию" файла mdb, т. к. храниться будет столько копий рисунка, сколько раз вы его внедряли. Если вы решите сделать его связанным, необходимо заботиться о том, чтобы его случайно не удалили или не переместили.
  2. С помощью следующих свойств настройте отображение фонового рисунка.
    • Свойство Масштабы рисунка (Picture Size Mode) имеет три значения: Фрагмент (Clip), Вписать в рамку (Stretch), По размеру рамки (Zoom). Значение Фрагмент отображает рисунок в его исходном размере. Если размер рисунка превышает размер окна формы, то изображение рисунка обрезается. Значение Вписать в рамку изменяет размер рисунка так, чтобы он соответствовал окну формы. Использование данного значения может привести к искажению изображения рисунка. Значение По размеру рамки изменяет размер рисунка так, чтобы он соответствовал окну формы либо по ширине, либо по высоте. Использование данного значения не приведет ни к обрезанию рисунка, ни к искажению его пропорций.

Рис. 15.1. Диалоговое коно Выбор рисунка

    • Если вставляется рисунок, занимающий не всю форму, свойство Выравнивание рисунка (Picture Alignment) позволяет определить положение его в форме: Сверху слева (Top Left), Сверху справа (Top Right), По центру (Center), Снизу слева (Bottom Left), Снизу справа (Bottom Right), По центру формы (Form Center).
    • Свойство Мозаичное заполнение (Picture Tiling) позволяет выводить повторяющееся изображение рисунка.

Пример использования рисунка в качестве фона в форме приведен на рис. 15.2.

Аналогично вставляется фоновый рисунок в отчет. Пример использования рисунка в качестве фона в отчете приведен на рис. 15.3.

Рисунок может быть вставлен в форму и в виде элемента управления формы. Для этого можно использовать два типа элементов управления: Рисунок (Image) и Свободная рамка объекта (Unbound Object Frame).

Рис. 15.2. Использование фонового рисунка в форме Microsoft Access

Рис. 15.3. Фоновый рисунок в отчете Microsoft Access

Если не требуется прямое изменение рисунка в форме или отчете, то лучше использовать Рисунок (Picture) (форма будет работать быстрее). Если же предполагается часто изменять рисунок, нужно вставить его с помощью свободной рамки объекта.

Чтобы вставить элемент управления Рисунок (Image), необходимо:

  1. Открыть форму в режиме Конструктора формы или отчет в режиме Конструктора отчета.
  2. Нажать кнопку Рисунок (Image) на панели элементов (кнопка Мастера элементов должна быть нажата, чтобы запустился Мастер рисунков).
  3. Выбрать в форме или отчете место, в которое помещается рисунок, и щелкнуть на нем левой кнопкой мыши.
  4. В раскрывшемся окне Вставка рисунка (Insert Picture) выбрать имя файла, содержащего добавляемый рисунок, и нажать кнопку ОК. Будет создан элемент управления, в котором помещается рисунок (рис. 15.4).
  5. Установить значения свойств, которые влияют на то, как рисунок будет отображаться в форме или отчете. Эти свойства аналогичны соответствующим свойствам формы.

Рис. 15.4. Использование элемента Рисунок для вставки рисунка в форму

Чтобы вставить рисунок в форму или отчет с помощью свободной рамки объекта, необходимо:

  1. Открыть форму в режиме Конструктора формы или отчет в режиме Конструктора отчета.
  2. Нажать кнопку Свободная рамка объекта (Unbound Object Frame) на панели элементов.
  3. Выбрать в форме или отчете место для вставляемого объекта и щелкнуть на нем левой кнопкой мыши. Появится диалоговое окно мастера Вставка объекта (Insert Object). С помощью мастера можно вставить уже готовый рисунок из файла или сначала создать его в соответствующем приложении, а затем вставить. Поэтому дальнейшие шаги могут быть разными.

Если вам еще предстоит создать рисунок, проделайте следующие операции.

  1. В диалоговом окне Microsoft Access выбрать переключатель Создать новый (Create New), а затем в списке Тип объекта (Object Type) выбрать приложение, с помощью которого будет создаваться рисунок (рис. 15.5).

Рис. 15.5. Окно Microsoft Access, используемое для вставки рисунка с помощью свободной рамки объекта

  1. Объект может отображаться в виде значка — это удобно, когда он содержит сведения, которые не должны все время выводиться на экран. В таком случае нужно просто установить флажок В виде значка (Display as Icon).
  2. Нажать кнопку ОК.
  3. Создать объект с помощью приложения, выбранного на шаге 1.
  4. Закончив создание объекта, выбрать команду Закрыть (Close) в меню Файл (File) приложения, чтобы вернуться в Microsoft Access. Microsoft Access создает элемент управления Свободная рамка объекта (Unbound Object Frame) и отображает в ней рисунок.

Если же файл с рисунком у вас уже готов, чтобы вставить его прямо из файла, вам необходимо:

  1. В диалоговом окне Microsoft Access выбрать переключатель Создать из файла (Create From File), а затем указать путь к файлу. Если точный путь вы не знаете, используйте кнопку Обзор (Browse) (рис. 15.6).

Рис. 15.6. Окно Microsoft Access при вставке рисунка из файла в отчет с помощью свободной рамки объекта

Рис. 15.7. Вставка рисунка Microsoft Paint в отчет с помощью свободной рамки объекта

  1. Если нужно отобразить объект в виде значка, установить флажок В виде значка (Display As Icon).
  2. Для нахождения связи с объектом установить флажок Связь (Link). Если флажок сброшен (по умолчанию), объект будет внедрен.
  3. Нажать кнопку ОК.

Пример вставки рисунка, созданного с использованием Microsoft Paint, в форму с помощью свободной рамки объекта приведен на рис. 15.7.

После вставки объекта можно изменять его размеры и пропорции с помощью свойства Установка размеров (Size Mode). В большинстве случаев изменения в свободный объект могут вноситься в режиме Конструктора формы или отчета. Для того чтобы иметь возможность изменять объект в режиме формы, необходимо задать для свойства Доступ (Enabled) свободной рамки объекта значение Да (Yes), а для свойства Блокировка (Locked) — значение Нет (No). Чтобы отредактировать объект, дважды щелкните на нем мышью. Для этого только необходимо, чтобы на вашем компьютере было установлено приложение, в котором может редактироваться файл данного типа. Пример редактирования внедренного точечного рисунка представлен на рис. 15.8.

Рис. 15.8. Пример редактирования точечного рисунка с помощью Microsoft Paint

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

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

Для хранения рисунков и других объектов OLE в таблицах Access используется специальный тип поля: Объект OLE (OLE Object). Элемент управления Присоединенная рамка объекта (Bound Object Frame) создается одним из стандартных способов:

  • перемещением с помощью мыши нужного поля из списка полей таблицы-источника. В этом случае будет сразу создан элемент управления, связанный с полем в таблице;
  • с помощью кнопки Присоединенная рамка объекта (Bound Object Frame) на панели элементов. В данном случае будет создан элемент управления, для которого нужно сразу установить свойство Данные (RecordSource) — имя поля, содержащего объект OLE (рис. 15.9).

Рис. 15.9. Создание присоединенной рамки объекта в режиме Формы

Вставить рисунок в поле таблицы можно как в таблице, открытой в режиме Таблицы, так и в форме. Для этого нужно:

  1. Открыть таблицу в режиме Таблицы или форму в режиме Формы.
  2. Перейти на запись, в которую требуется вставить рисунок, и выбрать поле объекта OLE.
  3. Выполнить команду Объект (Object) из меню Вставка (Insert).
  4. В диалоговом окне Microsoft Access (см. рис. 15.5) выбрать переключатель Создать новый (Create New), а затем в списке Тип объекта (Object Type) выбрать тип приложения, в котором будет создаваться объект. Если файл с рисунком уже готов, то нужно выбрать переключатель Создать из файла (Create From File), a затем указать путь к файлу.
  5. Для того чтобы отобразить объект в виде значка, установить флажок В виде значка (Display As Icon).
  6. Нажать кнопку ОК.
  7. Если вы создаете новый рисунок, то нужно создать его с помощью приложения выбранного на шаге 4.
  8. Закончив создание объекта, выбрать команду Закрыть (Close) в меню Файл (File) приложения для возвращения в Microsoft Access.

Рисунок будет вставлен в запись в таблице. При этом в режиме Формы рисунок или иной объект автоматически будут отображаться на экране. В режиме Таблицы будет отображаться только тип объекта, например Растровый рисунок.

Вставка графических файлов происходит либо напрямую, либо при помощи отдельных графических фильтров. Эти фильтры устанавливаются при инсталляции Microsoft Access. Для вставки файлов формата Enhanced Metafile (EMF), точечных рисунков Windows (BMP, RLE, DIB), метафайлов Windows (WMF) и значков (ICO) графический фильтр не требуется. Однако такие фильтры необходимы для вставки всех остальных файлов графических.форматов, перечисленных ниже:

AutoCAD Format 2-D (DXF) Computer Graphics Metafile (CGM)

CorelDRAW (CDR) Encapsulated PostScript (EPS)

Graphics Interchange Format (GIF) JPEG File Interchange Format (JPG)

Kodak Photo CD (PCD) Micrografx Designer/Draw (DRW)

PC Paintbrush (PCX) Portable Network Graphics (PNG)

Tagged Image File Format (TIFF) Targa (TGA)

WordPerfect Graphics (WPG) HG Graphics Language (HGL, PLT) Macintosh PICT (PCT)

Вставка рабочего листа Excel в форму или отчет

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

Так же как и рисунок, лист Microsoft Excel можно внедрить в форму или отчет или связать его с ними. При этом вставленный лист автоматически сохраняется в файле базы данных и всегда является доступным. Если обновить такой объект в форме или отчете, он будет изменен только в базе данных. Если лист Microsoft Excel связан, его можно просматривать и вносить изменения в форме или отчете. При этом изменения cохраняются в исходном файле объекта, а не в файле базы данных. Файл объекта можно обновлять независимо от базы данных. Последние изменения будут выведены на экран при следующем открытии формы или отчета. Связывание объектов удобно при работе с очень большими файлами, которые нежелательно включать в файл базы данных, а также с файлами, используемыми в нескольких формах и отчетах. Если связанный файл объекта перемешен, необходимо повторно установить с ним связь.

Рассмотрим возможность вставки листа Microsoft Excel в форму и отчет Microsoft Access с помощью свободной рамки объекта. Чтобы вставить новый лист Microsoft Excel в форму Microsoft Access, необходимо:

  1. Открыть форму или отчет в режиме Конструктора.
  2. Добавить в нее элемент управления Свободная рамка объекта (Unbound Object Frame). При этом в окне Microsoft Access выбрать переключатель Создать новый (Create New), а в списке Тип объекта (Object Type) выбрать Лист Microsoft Excel (Microsoft Excel Worksheet) (рис. 15.10). Если файл XLS уже создан, выберите переключатель Создать из файла (Create From File) и введите путь и имя нужного файла.

Рис. 15.10. Окно Microsoft Access при вставке нового листа Microsoft Excel в форму Microsoft Access с помощью свободной рамки объекта

  1. Когда в форме появится элемент управления, в котором отображается пустая таблица Excel, введите в нее данные (это можно сделать прямо в режиме Конструктора) (рис. 15.11). Если вы вставляли готовый файл, то сразу будет отображена таблица Excel (рис. 15.12).

Рис. 15.11. Ввод данных на лист Microsoft Excel в режиме Конструктора форм Microsoft Access

Рис. 15.12. Использование свободной рамки объекта для вставки существующего листа Microsoft Excel в форму Microsoft Access

  1. Чтобы сделать доступным изменение данных на листе в режиме Формы, установите значение свойства Доступ (Enabled) для вставленного элемента управления равным Да (Yes), а свойство Блокировка (Locked) — Нет (No).

Увидеть данные, расположенные на листе Microsoft Excel, можно, открыв форму в режиме Формы. Чтобы иметь возможность изменять или добавлять данные на лист, нужно дважды щелкнуть кнопкой мыши на листе Microsoft Excel в форме (рис. 15.13).

Рис. 15.13. Ввод данных на лист Microsoft Excel в режиме Формы

При работе с отчетами Microsoft Access следует выполнять аналогичную пошаговую процедуру. Увидеть данные, расположенные на листе Microsoft Excel, можно, открыв отчет в режиме просмотра.

Рис. 15.14. Использование присоединенной рамки объекта для вставки листа Microsoft Excel в форму Microsoft Access

Рассмотрим теперь возможность вставки листов Microsoft Excel с помощью присоединенной рамки объекта. В этом случае листы Excel будут храниться в записях таблицы Access (более разумным представляется хранить не сами таблицы, а ссылки на них, т. е. не внедрять листы Excel, а связывать их с таблицей Access). Сначала в таблице должно быть создано поле типа Объект OLE (OLE Object), которое будет содержать листы Excel. Затем в форме, отображающей записи этой таблицы, должен быть создан элемент Присоединенная рамка объекта (Bound Object Frame), связанный с этим полем. Вставка листа Microsoft Excel в поле таблицы или формы может быть выполнена с помощью команды меню Вставка, Объект (Insert, Object), как это уже описывалось ранее. На рис. 15.14 и 15.15 представлены примеры вставки листа Microsoft Excel в форму и отчет Access.

Рис. 15.15. Использование присоединенной рамки объекта для вставки листов Microsoft Excel в отчет Microsoft Access

Вставка документов Word в таблицы, формы и отчеты Access

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

Рассмотрим пример, в котором Microsoft Access используется для учета документов Microsoft Word. Для реализации учета документов Word с возможностью их просмотра и редактирования необходимо создать таблицу, в которую должны быть включены поля для порядкового номера документа, названия документа, шифра документа, самого документа и примечаний {табл. 15.2).

Таблица 15.2. Поля таблицы и их типы

Имя поля

Тип поля

Назначение

"Номер"

Счетчик (AutoNumber)

Порядковый номер документа

"Наименование"

Текстовый (Text)

Название документа

"Код"

Текстовый (Text)

Шифр документа

"Текст"

Поле объекта OLE (OLE Object)

Документ

"Примечаниез"

Поле Memo (Memo)

Примечания

Для создания таблицы необходимо:

  1. Создать в режиме Конструктора таблицу, состоящую из "указанных выше полей (рис. 15.16).

Рис. 15.16. Таблица "Учет документов" в окне Конструктора

  1. Сохранить таблицу под именем "Учет документов".
  2. Открыть таблицу "Учет документов" в режиме Таблицы.
  3. Заполнить поля таблицы.

Для вставки документа Word в качестве объекта OLE требуется установить указатель на нужное поле, выполнить команду Объект (Object) из меню Вставка (Insert), в окне Microsoft Access выбрать переключатель Создать из файла (Create From File) и в поле Файл (File) указать имя и путь к файлу. Так как в нашем примере учитываются уже созданные документы, которые могут изменяться не только из Microsoft Access, необходимо установить связь с этими документами, для чего установите флажок Связь (Link) в окне Microsoft Access. Флажок В виде значка (Dysplay As Icon) в данном случае не устанавливается, т. к. нужно иметь возможность быстрого просмотра документов (рис. 15.17).

Рис. 15.17. Окно Microsoft Access при вставке документа Word из файла в таблицу в виде объекта OLE

В результате создана таблица "Учет документов", приведенная на рис. 15.18.

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

  1. В окне базы данных раскрыть список форм и нажать на кнопку Создать (New).
  2. В окне Новая форма (New Form) в поле со списком Выберите таблицу или запрос, на основе которого будет построена форма (Choose the table or query where the object's data comes from) выбрать таблицу "Учет документов", выбрать Конструктор (Design View) и нажать кнопку ОК.

Рис. 15.18. Представление данных в таблице "Учет документов" в режиме Таблицы

  1. Нажать кнопку Список полей (Field List) и перенести поля из списка в форму.
  2. Отредактировать элементы в форме, изменив при необходимости их размеры и положение в форме. Пример расположения элементов приведен на рис. 15.19.
  3. Закрыть форму, сохранив ее под именем "Учет документов".

Рис. 15.19. Расположение элементов в форме "Учет документов"

Для просмотра содержимого таблицы необходимо открыть форму в режиме Формы (рис. 15.20). Чтобы получить возможность редактирования документа, требуется дважды щелкнуть левой кнопкой мыши на документе в форме. При этом откроется приложение Microsoft Word с выбранным документом.

Рис. 15.20. Форма "Учет документов" в режиме Формы

Рис. 15.21. Расположение элементов отчета "Учет документов" в режиме Конструктора

Для создания отчета необходимо:

  1. В окне базы данных раскрыть список отчетов и нажать кнопку Создать (New).
  2. В окне Новый отчет (New Report) в поле со списком Выберите таблицу или запрос, на основе которого будет построен отчет (Choose the table or query where the object's data comes from) выбрать таблицу "Учет документов", выбрать Конструктор (Design View) и нажать кнопку ОК.
  3. Нажать кнопку Список полей (Field List) и перенести поля из списка в секцию Область данных (Detail) отчета.
  4. Отредактировать элементы в отчете, изменив при необходимости их размеры и положение в форме. Пример расположения элементов приведен на рис. 15.21.
  5. Закрыть отчет, сохранив его под именем "Учет документов".

Чтобы просмотреть содержимое отчета, необходимо открыть его в режиме просмотра (рис. 15.22).

Рис. 15.22. Отчет "Учет документов" в режиме просмотра

При изменении содержимого документов Word эти изменения будут отображаться в форме и отчете при их следующем открытии.

Рис. 15.23. Представление документа Word в форме в виде значка

Рис. 15.24. Представление документа Word в отчете в виде значка

При желании можно вставлять документы Word в виде значка. Для этого в окне Вставка объекта (Insert Object) необходимо устанавливать флажок В виде значка (Display As Icon). В этом случае в форме и отчете не будут отображаться данные документов, а будут указываться только значки, изображающие документы. Для обращения к нужному документу из формы достаточно дважды щелкнуть левой кнопкой мыши на значке соответствующего документа. При этом откроется приложение Microsoft Word с соответствующим документом в окне. Примеры отображения документов в виде значка в форме и отчете приведены, соответственно, на рис. 15.23 и рис. 15.24.

Автоматизация

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

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

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

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

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

Объекты приложения-сервера образуют библиотеку объектов, которая может быть подключена к приложению-клиенту путем установки ссылки в проекте VBA (см. разд. "Установка ссылок на объектные библиотеки" гл. 13). Приложение-клиент использует объекты приложения-сервера путем доступа к их свойствам и методам. При этом он имеет все те возможности, которые есть у сервера автоматизации. Например, Microsoft Excel имеет модель объектов, которая включает такие объекты, как Workbook, Worksheet, Sell и др. К этим объектам можно обращаться из Microsoft Access, а также из других приложений, поддерживающих автоматизацию.

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

  • Полные серверы (full servers) — это самостоятельные приложения, например Microsoft Excel и Microsoft Word, использующие автоматизацию. Данные приложения, подобно Access, предоставляют свои объекты для использования собственной версии VBA. Полные серверы называются также локальными серверами (local servers), поскольку сервер такого типа должен размещаться на том же компьютере, что и приложение клиента автоматизации.
  • Серверы автоматизации (automation servers) — это серверы, которые не являются внедряемыми объектами. В качестве примера такого сервера можно привести Microsoft Access. Название Microsoft Access не содержится в списке Тип объекта (Object Type) вкладки Создание (Create New) диалогового окна Объект (Object) меню Вставка (Insert) приложений Microsoft Word или Microsoft Excel. При попытке указать файл базы данных во вкладке Создание из файла (Create From File) элемент управления Упаковщик объектов (Object Packager) пытается создать пакет из файла базы данных.
  • Мини-серверы (mini-servers) — это приложения, которые могут быть запущены только из приложений-клиентов автоматизации, например Microsoft Graph (MSGraph9) или Visio Express. Приложение, являющееся мини-сервером, должно представлять собой выполнимый файл (с расширением ехе) и иметь возможность раскрывать окно приложения. Мини-серверы, отображающие объекты конкретного класса, например файлы изображений, видеоклипы и т. д., называются средствами просмотра (viewers).
  • Специальные элементы управления OLE (OLE Controls) — это одна из разновидностей мини-серверов. Специальные элементы управления OLE, имеющие расширение файлов осх, кроме методов и свойств, предоставляют для использования другими приложениями еще и события. Они похожи на специальные элементы управления Visual Basic (VBXs). Некоторые элементы управления OLE, подобно VBXs, в режиме выполнения выводятся на экран, другие в режиме выполнения невидимы.
  • Элементы управления ActiveX (ActiveX Controls) являются облегченной 32-разрядной версией элементов управления OLE. Такие элементы хранятся в файлах с тем же, что и у элементов OLE, расширением (осх), однако их размер на 30—50% меньше, чем у заменяемых ими элементов OLE. Элементы управления ActiveX являются основой развиваемой в настоящее время фирмой Microsoft технологии ActiveX
  • Служебные серверы (process servers) — это подкласс серверов автоматизации, используемых для выполнения функций, которые не взаимодействуют с интерфейсом пользователя. Служебные серверы делятся на внешние (OutOfProc(ess)) и внутренние (InProc(ess)). Внешние серверы — это выполнимые файлы, которые запущены собственным процессом, т. е. имеют отдельную зарезервированную память. К внешним серверам можно отнести полные серверы и мини-серверы. Внутренние серверы используют память совместно с приложением клиента автоматизации. К внутренним серверам относятся специальные элементы управления ActiveX.

Внешние серверы взаимодействуют с приложением клиента, используя упрощенный механизм удаленного вызова процедур (Lightweight Remote Procedure Calls, или LRPC). В свою очередь, внутренние серверы (OLE DLL) используют вызовы обычных функций Windows. Благодаря этому, внутренние серверы быстрее реагируют на инструкции клиента, чем внешние. Внешний сервер можно' разместить на удаленном компьютере, а для взаимодействия с ним можно использовать DCOM. Такой внешний сервер называют удаленным объектом автоматизации (Remote Automation Object— RAО).

Замечание

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

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

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

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

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

Замечание

Можно использовать объекты сервера автоматизации и не устанавливая ссылку на конкретную библиотеку объектов, однако в этом случае программа будет работать медленнее. Это связано с тем, что после установки ссылки на библиотеку, при объявлении объектной переменной, можно указать ее конкретный тип, если же ссылка отсутствует, то для этой переменной придется указать обобщенный тип — Object. (О различии таких объявлений см. разд. "Ссылки на объекты" гл. 13.)

Ниже мы рассмотрим подробнее, как выполнить эти действия из Microsoft Access.

Использование Microsoft Access в качестве клиента автоматизации

Чтобы создать объект для использования в операциях автоматизации, нужно сначала создать экземпляр его класса и присвоить ссылку на него объектной переменной. Однако создать можно не любой объект из объектной модели приложения-сервера, а только глобальные объекты (см. разд. "Использование объектов и семейств" гл. 13). Таким глобальным объектом для всех объектных моделей приложений семейства 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 или другой глобальный объект, через него можно получить доступ ко всем остатьным семействам и объектам соответствующей модели объектов стандартным способом (см. разд. "Использование объектов и семейств" гл. 13) и работать с ними из программы VBA Access точно так же, как и с другими объектами — считывать и устанавливать значения свойств и вызывать методы.

Совет

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

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

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

Операции с объектами Microsoft Excel

Создание рабочего листа "Товары.xls"

Сначала рассмотрим, как можно выполнять операции с рабочим листом Microsoft Excel из программы Access. Для этого нам потребуется файл Товары.хls, содержащий рабочую книгу Excel с единственным рабочим листом "Товары", который представляет собой список товаров из демонстрационной базы данных "Борей". Вы можете использовать готовый файл, находящийся на сопровождающем книгу компакт-диске, либо создать его самим, экспортировав в Excel таблицу "Товары" с помощью команды меню Сервис, Связи с Office, Анализ в MS Excel (Tools, Office Links, Analyze It with Microsoft Excel) (см. разд. "Быстрый экспорт данных в другие приложения Microsoft Office"гл. 3).

Для того чтобы подготовить файл Товары.xls к дальнейшим экспериментам, выполните следующие действия:

  1. Откройте файл Товары-xls, запустив Microsoft Excel.
  2. Выделите ячейки с А4 по D12 в рабочем листе. Выберите команду меню Вставка, Имя, Присвоить (Insert, Name, Define). В диалоговом окне Присвоение имени (Define Name) введите в текстовое поле Имя (Names in workbook) имя диапазона: workRange (рис. 15.25) и щелкните по кнопке ОК. Тем самым создается именованный диапазон, который будет использоваться в последующих примерах.

Рис. 15.25. Создание именованного диапазона в таблице "Товары.xls"

  1. Выберите в меню Сервис (Tools) команду Надстройки (Adds-Ins) и снимите все флажки в списке Список надстроек (Add-Ins Available) диалогового окна Надстройки (Add-Ins). Удаление надстроек уменьшает время, требующееся для запуска приложения Excel. Чтобы закрыть диалоговое окно, нажмите на кнопку ОК.
  2. Сохраните изменения, выполнив команду Файл, Сохранить (File, Save) или Файл, Сохранить как (File, Save As).
  3. Закройте Microsoft Excel.

Иерархия объектов VBA приложения Microsoft Excel

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

  • Объект Application является экземпляром собственно Microsoft Excel. Применяя к этому объекту различные методы, можно воспользоваться практически любыми командами меню Excel. Объект Application обладает свойствами ActiveWorkbook и

    ActiveSheet, которые указывают на текущие объекты Workbook (рабочая книга) и Worksheet (рабочий лист). Можно указать Excel.Application в качестве значения аргумента <класс> функций CreateObject () и GetObjectO, а также в операторе Dim objPlMH As New <класс>.

  • Основной объект Excel — Workbook (рабочая книга). С помощью этого объекта осуществляется доступ к свойствам и структуре рабочей книги Excel. Объекты workbook — это файлы, которые состоят из нескольких объектов, создаваемых Microsoft Excel: Worksheet (рабочий лист) и Chart (диаграмма). Объекты Worksheet и Chart содержатся В семействах Worksheets и Charts.
  • Объекты Worksheet являются подчиненными по отношению к объекту Workbook и обеспечивают доступ к свойствам и структуре рабочих листов книги Excel. Основным объектом взаимодействия приложений Microsoft Access 2002 и Microsoft Excel 2002 является именно объект Worksheet. Имеется возможность перенести информацию из строк и столбцов объекта Recordset приложения Microsoft Access в ячейки объекта Worksheet приложения Microsoft Excel и наоборот. Если в качестве значения аргумента <класс> функции GetObject() либо в операторе Dim оbj Имя As New <класс> указать Excel.Sheet, то по умолчанию откроется первый объект семейства Worksheets — первый рабочий лист (ActiveSheet) объекта Workbook.
  • Объекты sheet аналогичны объектам Worksheet, но они входят в семейство Sheets, которое включает в себя как объекты Worksheet, так и объекты Chart, представляющие листы диаграмм в рабочей книге.
  • Объект Range — диапазон ячеек рабочего листа Excel. Это могут быть отдельная ячейка, строка, столбец, прямоугольная область рабочего листа или несвязанный (произвольный набор ячеек) или трехмерный диапазон ячеек, включающий ячейки на нескольких рабочих листах. Можно получить либо установить значения диапазона ячеек, определив объект Range. Таких объектов, как ячейка, строка, столбец просто не существует. Именно объект Range со своими свойствами и методами обеспечивает работу как с отдельной ячейкой, так и с их диапазоном. Для ссылки на необходимую группу ячеек можно использовать имя диапазона, состоящего из этих ячеек. Если именованные диапазоны отсутствуют на рабочем листе, можно использовать метод Cells объекта worksheet, чтобы задать координаты ячейки или группы ячеек. Ниже приводятся два способа изменения значения ячейки А1:

    ActiveSheet.Range ("Al").Value = 7

    ActiveSheet.Cells (1,1).Value = 7

Microsoft Excel предоставляет также многие другие объекты для применения их в качестве объектов приложения сервера, но описанные выше типы являются наиболее часто используемыми в технологии автоматизации с помощью Access VBA.

Открытие существующего рабочего листа Excel и работа с ним

Прежде чем работать с автоматизированными объектами Microsoft Excel, установим ссылку на библиотеку объектов Microsoft Excel. Для этого:

  1. Запустите Access и, если необходимо, откройте базу данных "Борей". Вызовите редактор VBA, открыв любой модуль.
  2. Выберите в окне редактора VBA команду меню Сервис, Ссылки (Tools, .References), чтобы открыть диалоговое окно References (Ссылки).
  3. Установите флажок у элемента Microsoft Excel 10.0 Object Library (рис. 15.26), затем нажмите на кнопку ОК, чтобы закрыть окно References.

Рис. 15.26. Добавление ссылки в редакторе VBA на объектную библиотеку Microsoft Excel 2002

Команды автоматизации удобно изучать при помощи окна отладки Immediate. Поэтому, выведите данное окно на экран, если оно не отображается. Для этого достаточно нажать соответствующую кнопку на панели инструментов или комбинацию клавиш <Ctrl>+<G>.

Чтобы программно открыть рабочий лист рабочей книги "Товары":

  1. Закройте Excel, если он запущен.
  2. Создайте новый модуль, выполнив команду меню Insert, Module (Вставка, Модуль).
  3. Добавьте в раздел описаний следующие описания переменных:

    Private xlaProd As Excel.Application

    Private xlwProd As Excel.Workbook

    Private xlsProd As Excel.Worksheet

  4. Введите в окне отладки следующий оператор (рис. 15.27):

    Set xlwProd = GetObject(CurDir & "\Товары.хls","Excel.Sheet")

При нажатии затем на клавишу <Enter> приложение Microsoft Excel запускается в режиме /automation. Функция CurDir возвращает полное имя текущей папки. Если файл Товары.хls был сохранен где-нибудь в другом месте, измените в предыдущем операторе путь к этому файлу. В зависимости от скорости функционирования компьютера, запуск Excel может продолжаться достаточно долю. Загрузка приложения Excel завершена, когда в строке состояния окна отладки надпись Выполнение (Running) исчезает и появляется надпись Готово (Ready). В результате будет создан экземпляр класса Application Microsoft Excel и переменной xlwProd будет присвоена ссылка на объект Workbook. Обратите внимание, что функция Getobject () открывает скрытый экземпляр приложения Excel, значок Excel не появляется на панели задач и интерактивно обратиться к рабочей книге Excel нельзя.

Замечание

В данном операторе аргумент Excel. Sheet является необязательным. Если его не указать, то тип создаваемого объекта будет определен автоматически по расширению файла, указанного в первом аргументе.

Рис. 15.27. Команды для автоматического запуска приложения Microsoft Excel

  1. Чтобы убедиться, что рабочая книга открыта и мы можем к ней обратиться, введите в окне отладки следующую команду ?xlwProd.Name

Свойство Name созданного объекта workbook содержит имя файла Excel: Това-pbi.xls (рис. 15.28).

Рис. 15.28. Команды, позволяющие читать и устанавливать значения отдельных ячеек в рабочем листе "Товары"

  1. Файл Toвapы.xls содержит только один объект Worksheet, поэтому рабочий лист "Товары" является активным рабочим листом — объектом ActiveSheet. Чтобы убедиться в этом, введите в окно отладки команду:

    ?xlwProd. ActiveSheet.Name

    Свойство Name этого объекта содержит имя рабочего листа: Товары.

  2. Теперь попробуйте обратиться к первой ячейке рабочего листа. Введите ?xlwProd.ActiveSheet.Celled, 1). После короткой паузы появится ожидаемый результат — строка "Код товара". Это заголовок первого столбца таблицы.
  3. Метод Cells позволяет обратиться к любой ячейке рабочего листа. Введите ?xlwProd. ActiveSheet. Cells (R, С), где R — номер строки, а С — номер столбца заданной ячейки, т. е. ее координаты (рис. 15.28).
  4. Можно изменить содержимое ячейки, если ввести выражение вида: xlwProd.ActiveSheet.Cells(2,2).Value = "brown rice". Подобно тому как многие объекты Access при введении имени объекта возвращают его значение, метод Cells не требует явного указания свойства Value по умолчанию. Чтобы убедиться в том, что содержимое ячейки изменилось, введите ?xlwProd.ActiveSheet.Cells (3,2), не дописывая выражения .Value.

Для установления значения ячейки можно также использовать свойство Formula. Преимущество использования свойства Formula состоит в возможности его применения с целью введения формул с использованием "родного" синтаксиса Microsoft Excel, т. е. в виде ссылок на конкретные ячейки, например "=А2+С6".

Использование именованных диапазонов ячеек

Если в рабочем листе Excel создан именованный диапазон ячеек, то можно получить значения ячеек, содержащихся в этом диапазоне, если сослаться на свойство Range объекта Worksheet. Сначала посмотрим, какие именованные диапазоны присутствуют в открытом нами объекте. Введите в окно отладки команду (рис. 15.29)

?xlwProd.Names(1).Name

Семейство Names представляет все имена, определенные в рабочей книге. В данном случае первый элемент этого семейства содержит имя диапазона: WorkRange.

Можно посмотреть не только имя, но и что собой представляет этот диапазон. Введите команду

?xlwProd.Names(1).Value

Результат будет: =Товары!$А$4 :$D$12, т. е. прямоугольная область А4—D12 на рабочем листе "Товары".

На рис. 15.29 приведены выражения для управления объектом Range.

Рис. 15.29. Примеры использования именованного диапазона

Пусть переменная xlsProd ссылается на рабочий лист "Товары". Для этого введите команду:

Set xlsProd = xlwProd.ActiveSheet.

Для указания конкретной ячейки внутри именованного объекта Range можно использовать следующий оператор:

?xlsProd.Range("WorkRange").Cells(1,1)

Здесь используется свойство Range объекта Worksheet для доступа к именованному диапазону, а затем свойство Cells объекта Range — для указания конкретной ячейки в диапазоне. Первая цифра указывает строку, а вторая — столбец.

Для того чтобы обратиться к объекту, который находится на уровень выше в иерархии объектов модели, можно воспользоваться свойством Parent. На рис. 15.29 представлено, как обратиться к рабочей книге Excel, содержащей текущий рабочий лист, и как установить объектную переменную xlaProd, которая должна ссылаться на объект Application Microsoft Excel:

Set хlwРабочаяКнига = хlsРабочийЛист.Parent.

Закрытие объектов Workbook и Application

Объект Microsoft Worksheet закрыть нельзя. Для закрытия объекта Excel Workbook может быть использован метод Close, а для выхода из приложения — метод Quit. Следующие операторы закрывают объект Workbook и затем осуществляют выход из приложения сервера автоматизации, освобождая системные ресурсы:

xlwProd.Close

xlaProd.Quit

Set xlsProd = Nothing

Set xlwProd = Nothing

Set xlaProd = Nothing

Если программно были внесены изменения в рабочем листе, то при закрытии объекта Workbook будет выдан вопрос о необходимости сохранения изменений. Если вы не хотите, чтобы пользователь получил такой вопрос, введите аргумент False для метода Close. Чтобы гарантировать освобождение всех ресурсов, необходимо освободить все использованные объектные переменные.

Замечание

После присвоения переменной, указывающей на объект Application значения Nothing, соответствующее приложение не закрывается, хотя память, занятая переменной, освобождается. Поэтому необходимо закрывать приложение с помощью метода Quit перед освобождением соответствующей объектной переменной.

Создание рабочего листа Excel с помощью кода автоматизации

Те же действия, что происходят при нажатии кнопки Анализ в MS Excel, можно осуществить при помощи кода автоматизации VBA. Преимуществом такого способа является возможность форматировать созданный объект специально под нужды конкретного приложения. Рассмотрим функцию CreateCustomSheet (), создающую новый объект Worksheet и заполняющую его данными из таблицы "Товары" базы данных Microsoft Access:

Function CreateCustomSheet() As Integer

'Создание рабочего листа MS Excel из таблицы "Товары"

'Описание локальных переменных

'(Объектные переменные описаны на уровне модуля)

Dim сйэБорей As Database 'Текущая база данных

Dim rstProd As Recordset 'Объект Recordset

Dim intRow As Integer 'Счетчик строк

Dim intCol As Integer 'Счетчик столбцов

'Открытие таблицы в текущей базе данных

Set dbБорей = CurrentDb()

Set rstProd = dbBopeu.OpenRecordset("Товары", dbdpenTable)

DoCmd.Hourglass True 'Создание нового объекта Excel Workbook

Set xlwProd = CreateObject("Excel.Sheet") ''Создание объекта

Application для применения метода Quit

Set xlaProd = xlwProd.Parent

intRow = 1

intCol = 1

rstProd.MoveFirst 'Переход к первой записи

Do Until rstProd.EOF

'Цикл с шагом в одну запись

For intCol = 1 То rstProd.Count

'Цикл с шагом в одно поле

If (Not IsNull(rstProd(intCol -1))) Then

xlwProd.ActiveSheet.Cells(intRow, intCol).Value =

CStr(rstProd(intCol -I}}

End If

Next intCol

rs t Prod.MoveNext intRow = intRow + 1 Loop

For intCol = 1 To xlwProd.ActiveSheet.Columns.Count

'Форматирование каждого столбца рабочего листа

xlwProd.ActiveSheet.Columns(intCol).Font.Size = 8

xlsCust.ActiveSheet.Columns(intCol).AutoFit If intCol = 8 Then

'Выравнивание по левому краю числовых и

'смешанных почтовых кодов

xlwProd.ActiveSheet.Columns(intCol).HorizontalAlignment = _

xlLeft

End If

Next

intCol DoCmd.Hourglass False

xlwProd.SaveAs (CurDir & "\Товары_2.xls")

xlaProd.Quit End Function

Тип данных, возвращаемых выражением rstProd(intCol-l), следует специально изменить с variant на string при помощи функции cstr(), иначе Microsoft Excel вместо нужной величины отобразит в соответствующем столбце #н/д (#N/A#). Если объект Recordset содержит поля, типы которых отличны от Text, то для определения типа данных в столбце используйте соответствующую функцию СТуре().

Константа xlLeft, присвоенная в качестве значения свойству HorizontalAlignment восьмого столбца, представляет собой встроенную константу Excel, определяемую в тот момент, когда устанавливается ссылка на объектную библиотеку Microsoft Excel 10.0 Object Library. Выделение элемента Constants (Константы) в списке Модули/ Классы окна просмотра объектов при подключенной библиотеке Excel отображает константы xlConst. На рис. 15.30 приведено числовое значение константы xlLeft, которая является одной из констант для задания значения свойства HorizontalAlignment.

Рис. 15.30. Значения встроенных констант xlConst в окне Object Browser Access

Ввод оператора ? CreateCustomSheet () в окне отладки запускает функцию, которую мы рассматривали выше. На рис. 15.31 приведена рабочая книга "ToBapы_2.xls" с рабочим листом, созданным при помощи функции CreateCustomSheet () и открытым в Microsoft Excel.

Рис. 15.31. Часть рабочего листа Excel, созданного из таблицы "Товары"

Обмен данными с Microsoft Word в системе автоматизации

В настоящем разделе будут рассмотрены несколько примеров управления объектами Microsoft Word из процедур VBA: открытие и печать документа, слияние документов для почтовых рассылок и заполнение полей в документе Word данными из БД Microsoft Access.

Иерархия объектов VBA приложения Microsoft Word

Так же как и при использовании объектной модели Microsoft Excel, познакомимся сначала с некоторыми объектами объектной модели Microsoft Word.

  • Объект Application — ссылается на активное приложение Microsoft Word. Через этот объект можно получить доступ ко всем остальным объектам модели. Объект Application имеет свойства ActiveDocument и ActiveWindow, которые представляют собой активный документ и активное окно соответственно. Можно указать Word.Application в качестве значения аргумента <класс> функций CreateObject() и GetObject() И В операторе Dim <объектнаяПеременная> As New <класс>.
  • Объект Document — является глобальным объектом и, так же как и объект Application, может использоваться в коде автоматизации в качестве значения аргумента <класс> функций CreateObject() и GetObject() и в операторе Dim <объектнаяПеременная> As New <класс>. Семейство Documents представляет собой набор всех документов, открытых в Word.
  • Объект Selection — представляет собой выделенную область в окне документа Word или точку вставки. Каждый документ может иметь только одну область выделения, и только одна область выделения открытых документов может быть активна в некоторый момент времени. Это означает, что всегда существует только один объект Selection. Объект Selection подчинен объекту Application, a создается при применении метода Select к объекту Document.
  • Семейство windows объекта Application представляет собой набор всех окон приложения Word.
  • Семейство Bookmarks подчинено объекту Document, и каждый объект этого семейства представляет собой закладку в документе.
  • Объект Range представляет собой непрерывную область текста в документе Word. Диапазоны, как и закладки, используются для идентификации текста в документе, однако, в отличие от закладок, диапазоны существуют только во время выполнения процедур VBA. Диапазоны не зависят от области выделения в документе. Можно работать с диапазоном, не затрагивая области выделения. Диапазонов в документе может быть несколько.

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

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

Sub OpenDocument()

Dim wda As Word.Application

Set wda = CreateObject("Word.Application")

With wda

.Visible = True

.Documents.Open "C:\Doc\Letter.doc" End With

'операции над документом wda.Quit Wda.Nothing

End Sub

В данном случае независимо от того, запущен ли уже Word, программа запустит еще один его экземпляр и в нем откроет файл Letter.doc. После того как все операции с документом закончены, нужно закрыть Word, для чего используйте метод Quit. Если при этом документ был изменен, то приложение Word выдаст сообщение, спрашивающее о том, нужно ли сохранить изменения. При этом программа приостанавливает выполнение и ждет указания пользователя. Таких ситуаций следует избегать.

Если все изменения делались программно, то лучше сначала закрыть документ, выполнив команду

wda.ActiveDocuments.Close False

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

В следующей процедуре для открытия документа используется функция Getobject (). То есть сначала делается попытка проверить, не запущен ли уже Word. Если он еще не запущен, будет сгенерирована ошибка (код ошибки: 429). Программа перехватит эту ошибку и использует функцию CreateObject(), чтобы запустить Word. Если Word уже запущен, то новый документ будет открыт в этом же экземпляре приложения. Затем документ выводится на печать, после чего закрывается либо документ, либо приложение в зависимости от значения флага (modeFlag). Значение флага показывает, запускался ли экземпляр Word, или документ был добавлен к другим открытым документам:

Sub OpenPrintDocument() Dim wda As Word.Application

Dim modeFlag As Boolean

On Error GoTo ErrStartWord

modeFlag = True 'устанавливаем флаг операции

Set wda = GetObjectf, "Word.Application")

With wda

.Visible = True

.Documents.Open "C:\Doc\Letter.doc"

.ActiveDocument.Printout

Do While .BackgroundPrintingStatus <> 0

DoEvents "ждем, пока документ напечатается

Loop

If modeFlag Then

.ActiveDocument.Close 'закрываем только документ

Else

.Quit 'закрываем все приложение

End If

End With

Set wda = Nothing Exit Sub

ErrStartWord:

If Err.Number = 429 Then ' Word не запущен

Set wda = CreateObject("Word.Application")

modeFlag = False 'сбрасываем флаг

Resume Next 'возвращаемся к оператору, следующему за

'тем, который вызвал ошибку Else

'выдаем диалоговое окно с сообщением и номером ошибки

MsgBox Err.Description & " " & Err.Number, vblnformation

Exit Sub ' выходим из процедуры

End If

End Sub

Вывод данных из таблицы Access в документ Word

Такая операция может быть полезна, когда требуется автоматически внести данные в один из типовых документов: служебную записку, письмо, договор и т. д. Не всегда такие документы можно сформировать, используя отчеты Access. Например:

  • требуется оформить договор, который, как правило, представляет собой довольно длинный текстовый документ, в который нужно вставить несколько чисел или строк;
  • нужно обеспечить возможность ручного редактирования текста документа;
  • документ должен быть сохранен в виде текстового файла (отчет Access может быть только напечатан).

В качестве примера рассмотрим документ Word, который находится в файле Contract.doc на компакт-диске. Документ представляет собой текст договора и содержит несколько полей формы, которые должны быть заполнены данными из таблицы Access. (Подробно о полях формы можно пропитать, например, в кн.: Ф. Новиков, А. Яценко. Microsoft Office 2000 в целом. "БХВ—Санкт-Петербург", 1999.) Откройте этот файл, запустив Word. На рис. 15.32 показаны начало документа и поля, которые должны быть заполнены. Кроме того, представлена стандартная панель инструментов Формы (Forms), с помощью которой эти поля были созданы.

Замечание

Чтобы вывести на экран эту панель инструментов, щелкните правой кнопкой мыши в области панелей инструментов и выберите из списка элемент Формы (Forms).

Чтобы вставить такое поле в документ, нужно:

  1. Установить курсор (точку ввода) в то место, где должно начинаться поле, и нажать кнопку Текстовое поле (Text Form Field). Поле будет вставлено в документ в точке ввода.
  2. Дважды щелкнуть на этом поле. Откроется диалоговое окно Параметры текстового поля (Text Form Field Options), в котором требуется заполнить, по крайней мере, одно поле: Закладка (Bookmark).
  3. Ввести имя закладки и нажать кнопку ОК.

Рис. 15.32. Документ Word, содержащий поля для вставки

Рассмотрим программу, которая открывает файл Contract.doc и автоматически заполняет поля договора. Такая программа может быть связана, например, с кнопкой в форме "Заказы клиентов" (Customer Orders) и обрабатывает нажатие данной кнопки. При нажатии на кнопку должен сформироваться договор с тем клиентом, который отображается в текущей записи формы. Для простоты будем считать, что номер договора будет равен номеру текущего заказа (выделенного в подчиненной форме).

Private Sub CreateContract_Click()

Dim wda As Word.Application

Dim wdd As Word.Document

Dim intPrint As Integer On Error GoTo ErrStartWord

Set wdd = GetObject("C:\Doc\Contract.doc")

Set wda = wdd.Parent

wda.Visible = True

wdd.Bookmarks("ContractNumber").Select

wda.Selection.TypeText

Text:=[Подчиненная форма заказов 1].Form![КодЗаказа]

wdd.Bookmarks("ContractDate").Select With wda

.Selection.TypeText Text:=Date

.Selection.GoTo Name:="CustemerName"

.Selection.TypeText Text:=[Название]

.Selection.GoTo Name:="CustomerAddress"

.Selection.TypeText Text:=[Страна]

' заполнение остальных полей

intPrint = MsgBox("Печатать договор?", vbYesNo + vbQuestion)

If intPrint = vbYes Then

wdd.Printout

Do While .BackgroundPrintingStatus <> 0

DoEvents

Loop End If

.ActiveDocument.Close False If .Windows.Count = 0 Then

.Quit End If End With

Set wdd = Nothing Set wda = Nothing Exit Sub

ErrStartWord:

MsgBox Err.Description & " " & Err.Number, vblnformation

Exit Sub

End Sub

В данной программе с помощью функции Getobject() создается объект Document. Если при этом Word не запущен, то одновременно создается скрытый экземпляр объекта Application Word. Если Word уже запущен, то новый документ добавляется к уже открытым документам.

Далее показаны два способа нахождения нужной закладки в документе. В первом случае используется семейство Bookmarks. Вызвав метод Select нужного элемента этого семейства, можно создать объект Selection, а в документе при этом выделяется требуемое поле.

Во втором случае к объекту Selection (вспомните, что он может означать не только выделенную область, но и точку ввода) применяется метод Goto, которому в качестве значения аргумента Name передается имя нужной закладки.

После того как все поля заполнены, договор выводится на печать. Но предварительно пользователь получает сообщение, требующее подтвердить необходимость печати. Документ печатается только если пользователь подтвердит это.

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

Если в организации отсутствует приложение Access для автоматизации различных деловых процедур, то создавать типовые бланки документов можно более простыми средствами, например, умело используя средства самого редактора Microsoft Word. Однако, когда такое приложение имеется и в базе данных Access хранится большинство нужной информации, было бы просто нерационально вводить вручную в текст документа значения полей. Рассмотренный пример объясняет, как можно этого избежать.

Слияние документов для почтовых рассылок

Следующий пример связан с эффектным решением еще одной типовой задачи — созданием серийных документов. Это могут быть письма с одинаковым содержанием, но адресованные разным лицам, или типовые бланки, которые должны оформляться в большом количестве. Задача сводится к тому, что должны существовать шаблон такого документа и некоторая база данных. Требуется создать необходимое количество экземпляров такого документа, вставив в каждый экземпляр существующие данные. Если источником данных является таблица Access или запрос, задача решается просто — достаточно выделить эту таблицу (запрос) в списке в окне базы данных и выполнить команду меню Сервис, Связи с Office, Слияние с MS Word (Tools, Office Links, Merge it With MS Word). Однако может оказаться, что данные для вставки в бланк или письмо определяются достаточно сложно, например представляют собой набор записей — Recordset. Тогда можно создать все бланки программно.

Сейчас мы создадим приглашение сотрудникам фирмы "Борей" на некоторое мероприятие. Мероприятие торжественное и важное, поэтому мы хотим напечатать приглашение на красивом бланке.

Рис. 15.33. Шаблон документа для слияния с данными из Access

Шаблон документа должен быть приготовлен заранее. Рассмотрим, как это можно сделать.

  1. Создайте красивый бланк, пользуясь средством Microsoft Clip Gallery или любой другой библиотекой картинок, рамочек и т. д. (Можно использовать шаблон, присутствующий на компакт-диске, — файл Приглашение.dot). Это будет основной документ для слияния.
  2. Теперь нужно установить связь с источником данных. В программе мы будем использовать в качестве источника данных временную таблицу Access, т. е. таблицу, которая существует только при работе процедуры VBA. Однако для установления связи нужно создать такую таблицу в базе данных. Создайте новую таблицу и определите следующие поля таблицы: "Фамилия", "Имя", "Обращение", "Должность". Назовите ее "СписокПриглашенных".
  3. Откройте файл Приглашение-dot и выполните команду меню Сервис, Письма и рассылки, Мастер слияния (Tools, Letters and Mailing, Mail Merge Wizard). Будет запущен Мастер слияния, который в новой версии Microsoft Word реализован в виде панели задач, расположенной слева на экране (рис. 15.34)

Рис. 15.34. Панель Мастера слияния

  1. Далее следуйте указаниям мастера. На первом шаге выберите тип документа — Письма (Letter) и нажмите кнопку Далее (Next), чтобы перейти к следующему шагу.
  2. На втором шаге выберите переключатель Текущий документ (Use The current document).
  3. На третьем шаге нужно указать источник данных. Оставьте значение поля Выбор получателей (Select Recipient) по умолчанию — Использование списка (Use an existing List) и нажмите на ссылку Обзор (Browse). Появится стандартное диалоговое окно для выбора файла.
  4. Найдите в этом окне файл "Борей.MDB" и нажмите кнопку Открыть (Open). Появится диалоговое окно со списком таблиц.
  5. Выберите в нем таблицу "СписокПриглашенных". Появится диалоговое окно, в котором будет отображено содержимое исходной таблицы (рис. 15.35). Закройте это окно.

Рис. 15.35. Диалоговое окно с содержимым таблицы "СписокПриглашенных"

  1. Теперь на экране отображается панель инструментов Слияние (Mail Merge). Установите курсор в левый верхний угол документа и нажмите кнопку Добавить поля слияния (Insert Merge Fields). Появляется одноименное диалоговое окно со списком всех полей в источнике данных. Выберите в списке поле "Обращение" и нажмите кнопку Вставить (Insert). Аналогично вставьте остальные поля (см. рис. 15.34). Поля слияния являются одним из видов полей Word и выглядят в основном документе как заключенные в угловые кавычки названия соответствующих полей источника данных.
  2. Сохраните документ в виде шаблона (файл с расширением dot) и закройте.

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

Private Sub MergeDocument_Click()

Dim wda As Word.Application

Dim rst As Recordset, rstNew As Recordset

Dim db As Database

Dim tdf As TableDef

Dim i As Integer

Set db = CurrentDb()

'Создаем новую таблицу

Set tdf = db.CreateTableDef("СписокПриглашенных")

With tdf

' Создаем поля таблицы и добавляем их в семейство Fields

.Fields.Append .CreateField("Фамилия", dbText)

.Fields.Append . CreateFieldC'HMH", dbText)

.Fields.Append .CreateField("Обращение", dbText)

.FieIds.Append .CreateField("Должность", dbText)

' Добавляем таблицу в семейство TableDefs

db.TableDefs.Append tdf End With

' копируем записи из формы в созданную таблицу

Set rst = Me.RecordsetClone rst.MoveFirst

Set rstNew = db.OpenRecordset("СписокПриглашенных")

Do While Not rst.EOF

rstNew.AddNew

For i = 0 To rst.Fields.Count - 1

rstNew.Fields(i) = rst.Fields(i)

Next i

rstNew.Update

rst.MoveNext Loop

' создаем объект Application Word

On Error GoTo err_StartWord

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

wda.Visible = True

' открываем документ на основе шаблона - он добавляется в семейство

Documents wda.Documents.Add "C: \Doc\nj»iMiaEieHHe.dot"

' выполняем слияние основного документа и данных из источника

With wda.ActiveDocument.MailMerge

.Destination = wdSendToNewDocument

.Execute End With

' печатаем приглашения wda.ActiveDocument.Printout

Do While wda.BackgroundPrintingStatus <> 0

DoEvents Loop

' сохраняем получившийся документ

wda.ActiveDocument.SaveAs "C:\Doc\MailMergeDoc.doc"

' закрываем окно с новым документом

wda.ActiveWindow.Close False

' закрываем, не сохраняя, окно с первоначальным документом

wda.Documents (1).Close False

' если нет больше открытых документов, то закрываем Word If

wda.Documents.Count = 0 Then

wda.Quit End If

' Удаляем временную таблицу

db.TableDefs.Delete "СписокПриглашенных"

db.Close

Set wda = Nothing

Set rst = Nothing

Set rstNew = Nothing

Exit Sub

err_StartWord:

If Err = 429 Then ' Word не запущен

Set wdd = CreateObject("Word.Application")

Resume Next Else

MsgBox Err.Description & " " & Err.Number, vblnformation

Exit Sub End If

End Sub

Сначала создается таблица "СписокПриглашенных" с той же структурой, которая была создана вручную. Затем все данные, отображаемые в форме, записываются в эту таблицу. Все операции с данными выполняются с использованием объектов DАО. Объект Application Word создается с помощью функции GetObject() или CreateObject () в зависимости от того, запущен ли уже Word. Для создания нового документа на основе шаблона используется метод Add семейства Documents. При слиянии основного документа с записями в таблице создается новый документ. Для этого устанавливается значение свойства Destination объекта MailMerge равным константе wdSendToNewDocument. Этот документ уже не содержит поля слияния, а является просто текстовым документом, который можно сохранить в виде файла, задав его имя. Перед сохранением в файле документ выводится на печать. После этого нужно аккуратно закрыть сначала новый документ, потом основной документ, к которому присоединен источник данных, и потом, если нужно, сам Word.

Использование Access в качестве сервера автоматизации

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

Dim objAccess As Access.Application

Dim db As Database

Dim rst As Recordset

Dim i As Integer, j As Integer

Set objAccess = GetObject("D:XBopeu.mdb")

Set db = objAccess.CurrentDb

Set rst = db.OpenRecordset("Квартальные обороты по товарам")

' заполняем 1-ю строку заголовками столбцов таблицы

For i = 1 То rst.Fields.Count - 1

Cells(1, i) = rst.Fields(i).name

Next i

' переносим все остальные строки таблицы

j = 2

rst.-MoveFirst Do Until rst.EOF

For i = 1 To rst.Fields.Count - 1

Cells (j, i) = IlfdsNull (rst. Fields (i) ), 0, rst. Fields (i) )

Next i

j = j + 1

rst.moveNext Loop

objAccess.Close

Set obAccess = Nothing

Перед тем как создавать эту функцию, необходимо создать две ссылки в редакторе VBA Excel: на библиотеки Microsoft Access 10.0 Object Library и Microsoft DАО 3.6 Object Library. Создав объект Access .Application, можно получить доступ ко всём остальным объектам Access: таблицам, формам, отчетам. В данной программе сначала создается объект Recordset из нужной таблицы, а затем в цикле создается строка заголовков полей и переносятся все данные. На рис. 15.36 представлена результирующая таблица запроса "Квартальные обороты по товарам" и результат ее экспорта в Excel.

Рис. 15.36. Таблица "Доходы за квартал" и результат ее экспорта в Excel

В качестве сервера автоматизации Microsoft Access применяется обычно для создания мастеров, генерирующих приложения баз данных в Access, при этом можно использовать функции CreateFormf), CreateControl(), CreateReportControl().

Использование элементов ActiveX в приложении

Функциональные возможности Access могут быть расширены не только за счет использования объектов других приложений — серверов автоматизации. Мини-приложение может быть просто встроено в приложение Access. Такими мини-приложениями являются элементы ActiveX. Элементы ActiveX представляют собой программный компонент, реализованный в виде отдельного файла. Но самостоятельными приложениями элементы ActiveX не являются — они выполняются только в том приложении, которое позволяет встраивать и использовать их, являясь для них контейнером. Вне приложения-контейнера ни один элемент управления ActiveX невозможно запустить на выполнение и требовать каких-либо результатов.

Существует большое количество элементов ActiveX. В этой главе мы познакомимся с одним из них, который включен в стандартную поставку Microsoft Office и используется очень часто. Это элемент Календарь (Calendar). Другие элементы ActiveX можно найти в Microsoft Office 2002 для разработчиков и прочих средствах разработки, в том числе и от других производителей.

Замечание

Если вы включили в свое приложение элементы ActiveX, необходимо следить за тем, чтобы эти элементы были установлены на всех компьютерах, на которых будет использоваться ваше приложение.

Добавление элемента управления Календарь в форму

Элемент управления Календарь может быть включен в форму для того, чтобы пользователь мог выбрать значение поля типа Дата/Время, а не вводить дату вручную.

Чтобы включить элемент управления Календарь в форму:

  1. Откройте форму в режиме Конструктора.
  2. Выберите команду меню Вставка, Элемент ActiveX (Insert, ActiveX Controls), при этом откроется диалоговое окно Вставка элемента ActiveX (Insert ActiveX Controls) со списком всех зарегистрированных в системе элементов ActiveX.
  3. Выберите в списке (рис. 15.37) строку Элемент управления Календарь 10.0 (Calendar Control 10.0) и нажмите кнопку ОК.

Рис. 15.37. Диалоговое окно Вставка элемента ActiveX

Далее можно настроить этот элемент, используя его свойства. В отличие от других элементов управления, в данном случае свойства имеют:

  • элемент управления ActiveX формы (окно свойств то же самое, что у других элементов управления и у самой формы);
  • объект Календарь, который реализуется этим элементом управления.

В нашем примере создайте новую форму в режиме Конструктора. Добавьте в нее i описанным выше способом элемент управления Календарь. Откройте диалоговое окно свойств элемента ActiveX. Обратите внимание на свойство Класс (Class), определяющее класс элемента ActiveX. Значение этого свойства установилось автоматически: MSCAL.Calendar.7. Определите имя элемента: ocxCalendar и размеры ' примерно 8x6 см.

Чтобы посмотреть свойства объекта Календарь:

  1. Поместите указатель мыши на календарь и щелкните правой кнопкой мыши, чтобы получить контекстное меню для элемента управления формы.
  2. В появившемся меню щелчком выберите строку Объект Календарь (Calendar Control Object), при этом откроется объектное меню (рис. 15.38). Выберите в этом меню команду Свойства (Properties). Появится диалоговое окно свойств объекта Календарь.

Рис. 15.38. Контекстное меню для элементов управления ActiveX

  1. По умолчанию окно свойств раскрывается на вкладке Общие (General), где можно установить некоторые обшие свойства элемента управления Календарь. Раскройте вкладку Шрифты (Fonts) диалогового окна Свойства: Календарь.
  2. Для элемента DayFont из списка Свойства (Property Name) на вкладке Шрифт (Font) установите шрифт Arial Cyr, в группе Аттрибуты (Font Style) установите флажок полужирный (Bold), установите размер шрифта "10" и нажмите на кнопку Применить (Apply). Размеры столбцов элемента Календарь ограничивают размер шрифта в DayFont величиной 9,75 пунктов (рис. 15.39).

Рис. 15.39. Вкладка Шрифт диалогового окна Свойства: Календарь

  1. Повторите процесс выбора шрифта, описанный на предыдущем шаге, для свойств GridFont (шрифт — Arial Cyr, начертание — полужирный, размер — 9) и TitleFont (шрифт — Arial Cyr, начертание — полужирный, размер — 12).
  2. Раскройте вкладку Цвет (Colors) диалогового окна свойств. Эта вкладка предоставляет возможность изменить на любой из 16 стандартных цветов (или системных цветов Windows) цвета фона (Backcolor), шрифта названий дней (DayFontColor), шрифта дат (GridFontColor), шрифта заголовка (TitleFontColor) и линий сетки (GridLinesColor) (рис. 15.40).
  3. Нажмите кнопку ОК, чтобы закрыть окно свойств объекта. Откройте окно свойств формы. Установите Отсутствуют (Neither) в качестве значения свойства Полосы прокрутки (ScrollBars) и Нет (No) как значение свойств Кнопки перехода (NavigationButtons) и Область выделения (RecordSelectors).
  4. Переключите форму с встроенным календарем в режим формы. Вид элемента управления Календарь в режиме Формы приведен на рис. 15.41. Чтобы изменить год или месяц, можно использовать раскрывающиеся списки в заголовке календаря.
  5. Вернитесь в режим Конструктора. Теперь мы рассмотрим, как можно использовать методы элемента Календарь.

Рис. 15.40. Вкладка Цвет диалогового окна Свойства: Календарь

Рис. 15.41. Форма с элементом управления Календарь с раскрывающимися списками месяца и года

Замечание

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

  1. Справа от календаря расположите вертикально шесть кнопок. Назовите их так, как показано на рис. 15.42: "Следующая неделя", "Предыдущая неделя", "Следующий месяц", "Предыдущий месяц", "Следующий год", "Предыдущий год".
  2. Ниже календаря создайте текстовое поле. В этом поле будет отображаться дата, выбранная в календаре. Присвойте свойству Имя (Name) этого поля значение Дата, а свойству Значение по умолчанию (Default Value) — значение =Date ().
  3. Теперь напишем несколько процедур обработки событий. Во-первых, нужно, чтобы при открытии формы на календаре отображалась текущая дата. Для этого необходимо создать процедуру обработки события Загрузка (Load) формы. Ниже приводится текст этой процедуры.

Рис. 15.42. Окончательный вид формы, содержащей элемент управления Календарь в режиме Конструктора

Private Sub Form_Load()

Календарь.Object.Value = Date

End Sub

  1. При выборе даты в календаре должно меняться значение поля "Дата". Поэтому нужно написать процедуру обработки события ПослеОбновления (AfterUpdate) элемента управления Календарь. Как и предыдущая, эта процедура состоит из одного оператора. Однако в ней показано, что для ссылки на значение элемента Календарь необязательно используется свойство value.

    Private Sub Календарь_АfterUpdate() 'обновление поля "Дата"

    txtDate = Format(Календарь.Object.Value, "dd/mm/yy")

    End Sub

  2. Еще шесть процедур должны обрабатывать событие НажатиеКнопки (Click) для каждой из шести кнопок. В этих процедурах используются шесть методов объекта Календарь:

    Private Sub Предыдущая_неделя_С11сК() Календарь.Obj ect.PreviousWeek

    End Sub

    Private Sub Предыдущий_год_С11сК() Календарь.Obj ect.NextYear

    End Sub

    Private Sub Предьщущий_месяц_С1ick () Календарь.Obj ect.PreviousMonth

    End Sub

    Private Sub Следующая_неделя_С11сk() Календарь.Obj ect.NextWeek

    End Sub

    Private Sub Следующий_год_С11сК() Календарь . Ob j ect. NextYear

    End Sub

    Private Sub Следующий_месяц_С11сК() Календарь.Obj ect.NextMonth

    End Sub

  3. Поскольку год и месяц теперь можно переключать с помощью кнопок, вы можете убрать из заголовка календаря раскрывающиеся списки, для чего откройте вкладку Общие (General) диалогового окна свойств объекта и снимите флажок Выбор месяца и года (Month/Year Selectors).
  4. Сохраните форму, дав ей имя "Календарь". Окончательный вид формы представлен на рис. 15.43.

Рис. 15.43. Окончательный вид формы с элементом управления Календарь

Подключение специальных элементов управления в реестр Windows

Чтобы элементы ActiveX можно было использовать в приложениях Microsoft Access, сведения о них должны быть внесены в реестр Windows. В противном случае они •просто отсутствуют в списке диалогового окна Вставка элемента ActiveX (Insert ActiveX Controls). Этот процесс называется подключением, или регистрацией. Во время процесса установки большая часть элементов ActiveX создает требуемые разделы в реестре Windows. На рис. 15.44 приведены разделы реестра для элемента управления Календарь.

Рис. 15.44. Разделы специального элемента управления Календарь в реестре Windows

Однако многие свободно распространяемые элементы ActiveX не имеют в своем составе программы установки, поэтому следует подключить их самостоятельно.

Чтобы внести в реестр сведения о специальном элементе управления автоматизации для Microsoft Access или других приложений:

  1. Выберите команду Сервис, Элементы ActiveX (Tools, ActiveX Controls), чтобы открыть диалоговое окно Элементы ActiveX (ActiveX Controls). Затем нажмите кнопку Подключить (Register), что приведет к открытию диалогового окна Добавление элемента ActiveX (Add ActiveX Control).
  2. Найдите файл, соответствующий элементу ActiveX (обычно он имеет расширения осх или dll), который необходимо подключить (рис. 15.45), и нажмите кнопку ОК. После этого вновь подключенный элемент должен появиться в списке Доступные элементы управления (Available Controls) диалогового окна Элементы ActiveX.

При удалении элемента ActiveX с жесткого диска рекомендуется также удалить соответствующий раздел из реестра. Для удаления раздела из реестра выделите имя специального элемента управления в списке Доступные элементы диалогового окна Элементы ActiveX, затем нажмите на кнопку Отключить (Unregister).

Рис. 15.45. Выделение файла с расширением осх для подключения

Выводы

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



Опубликовал admin
1 Сен, Среда 2004г.



Программирование для чайников.