Автоматизация
(ранее известная как
OLE-автоматизация —
OLE Automation) — это одно из наиболее важных средств технологии ActiveX, позволяющее программно управлять объектами из других приложений. И это основное средство, с помощью которого можно интегрировать функциональные возможности различных приложений.
Приложения, поддерживающие автоматизацию, делятся на две категории:
клиенты автоматизации
и
серверы автоматизации.
Причем некоторые приложения могут быть только клиентами либо только серверами автоматизации, но есть и такие (и к ним относится Microsoft Access), которые могут выступать и в том и в другом качестве.
Элемент управления
Календарь
может быть включен в форму для того, чтобы пользователь мог выбрать значение поля типа
Дата/Время,
а не вводить дату вручную.
Чтобы включить элемент управления
Календарь
в форму:
Глава 15. Интеграция Access 2002 с другими компонентами Office 2002 Связывание и внедрение объектов Вставка рисунков в формы и отчеты Вставка рабочего листа Excel в форму или отчет Вставка документов Word в таблицы, формы и отчеты Access Автоматизация Клиенты и серверы автоматизации Взаимодействие компонентов Office 2002 Использование Microsoft Access в качестве клиента автоматизации Операции с объектами Microsoft Excel Обмен данными с Microsoft Word в системе автоматизации Использование Access в качестве сервера автоматизации Использование элементов ActiveX в приложении Добавление элемента управления Календарь в форму Подключение специальных элементов управления в реестр Windows Выводы |
Для того чтобы программно работать с объектами Excel, нужно иметь представление об объектной модели Microsoft Excel. Мы не будем здесь подробно описывать эту модель, поскольку она достаточно сложна, представим только ее основные объекты.
ActiveSheet, которые указывают на текущие объекты Workbook (рабочая книга) и Worksheet (рабочий лист). Можно указать Excel.Application в качестве значения аргумента <класс> функций CreateObject () и GetObjectO, а также в операторе Dim objPlMH As New <класс>.
ActiveSheet.Range ("Al").Value = 7
ActiveSheet.Cells (1,1).Value = 7
Microsoft Excel предоставляет также многие другие объекты для применения их в качестве объектов приложения сервера, но описанные выше типы являются наиболее часто используемыми в технологии автоматизации с помощью Access VBA.
Так же как и при использовании объектной модели Microsoft Excel, познакомимся сначала с некоторыми объектами объектной модели Microsoft Word.
Все примеры предыдущих разделов демонстрировали работу 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.
Функциональные возможности Access могут быть расширены не только за счет использования объектов других приложений — серверов автоматизации. Мини-приложение может быть просто встроено в приложение Access. Такими мини-приложениями являются
элементы ActiveX.
Элементы ActiveX представляют собой программный компонент, реализованный в виде отдельного файла. Но самостоятельными приложениями элементы ActiveX не являются — они выполняются только в том приложении, которое позволяет встраивать и использовать их, являясь для них контейнером. Вне приложения-контейнера ни один элемент управления ActiveX невозможно запустить на выполнение и требовать каких-либо результатов.
Существует большое количество элементов ActiveX. В этой главе мы познакомимся с одним из них, который включен в стандартную поставку Microsoft Office и используется очень часто. Это элемент
Календарь
(Calendar). Другие элементы ActiveX можно найти в Microsoft Office 2002 для разработчиков и прочих средствах разработки, в том числе и от других производителей.
Замечание
Если вы включили в свое приложение элементы ActiveX, необходимо следить за тем, чтобы эти элементы были установлены на всех компьютерах, на которых будет использоваться ваше приложение.
Если в рабочем листе Excel создан именованный диапазон ячеек, то можно получить значения ячеек, содержащихся в этом диапазоне, если сослаться на свойство Range объекта Worksheet. Сначала посмотрим, какие именованные диапазоны присутствуют в открытом нами объекте. Введите в окно отладки команду (рис. 15.29)
?xlwProd.Names(1).Name
Семейство Names представляет все имена, определенные в рабочей книге. В данном случае первый элемент этого семейства содержит имя диапазона: WorkRange.
Можно посмотреть не только имя, но и что собой представляет этот диапазон. Введите команду
?xlwProd.Names(1).Value
Результат будет: =Товары!$А$4 :$D$12,
т. е. прямоугольная область А4—D12 на рабочем листе "Товары".
На рис. 15.29 приведены выражения для управления объектом Range.
Чтобы создать объект для использования в операциях автоматизации, нужно сначала создать экземпляр его класса и присвоить ссылку на него объектной переменной. Однако создать можно не любой объект из объектной модели приложения-сервера, а только глобальные объекты
(см. разд. "Использование объектов и семейств" гл. 13).
Таким глобальным объектом для всех объектных моделей приложений семейства Microsoft-Office является объект Application, который находится на вершине иерархии объектов. Однако есть и другие глобальные объекты, например в Microsoft глобальным объектом является workbook. Это позволяет создавать данный объект непосредственно, не используя ссылку на объект Application. Напомним, что узнать, какие свойства моделей объектов являются глобальными, можно, используя окно просмотра объектов в редакторе VBA. Выберите в раскрывающемся списке
Project/Dbrary
нужную библиотеку, а затем выберите элемент
<globals>
в списке
Classes.
Существует несколько способов создания экземпляра класса объекта.
Dim objExl As New Excel .Application.
При использовании ключевого слова New для создания нового экземпляра класса Application запускается соответствующее приложение (например, Word или Excel). Если это приложение уже запущено, то, чтобы не запускать второй экземпляр, лучше использовать для создания нового экземпляра класса функцию GetObject () (см. ниже в этом же списке).
Замечание
Чтобы использовать ключевое- слово New для создания экземпляра класса объекта автоматизации, необходимо предварительно добавить ссылку библиотеки объектов приложения сервера в диалоговом окне редактора VBA
References
(Ссылки).
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").
Необязательный аргумент <путь> определяет полный путь к существующему файлу и используется тогда, когда нужно обратиться к объекту, находящемуся в уже существующем файле.
Аргумент <класс>, как и в других случаях, определяет тип открываемого объекта автоматизации и имеет структуру <имяПриложения>. <типОбъекта>.
Обязательно должен быть указан хотя бы один из аргументов функции. Если первый аргумент опущен, то второй должен определять объект 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.
При интеграции двух приложений одно предоставляет свои объекты для использования, а другое использует объекты первого приложения. Приложение, объекты которого доступны для других приложений, называется
сервером автоматизации
(иногда его еще называют компонентом). Приложение, которое использует объекты другого приложения, называется
клиентом
(или
контроллером) автоматизации.
Объекты, которые доступны для других приложений, называют
объектами автоматизации.
Через объекты автоматизации приложение-сервер открывает доступ другим программам к тем своим функциям, которые могут быть им полезны. Например, текстовый редактор может открывать другим программам доступ к проверке орфографии, служба связи — доступ к созданию и отправке сообщений. Это позволяет разработчикам ускорить процесс разработки своих приложений, благодаря использованию готовых функций сервера.
Объекты приложения-сервера образуют библиотеку объектов, которая может быть подключена к приложению-клиенту путем установки ссылки в проекте VBA
(см. разд. "Установка ссылок на объектные библиотеки" гл. 13).
Приложение-клиент использует объекты приложения-сервера путем доступа к их свойствам и методам. При этом он имеет все те возможности, которые есть у сервера автоматизации. Например, Microsoft Excel имеет модель объектов, которая включает такие объекты, как Workbook, Worksheet, Sell и др. К этим объектам можно обращаться из Microsoft Access, а также из других приложений, поддерживающих автоматизацию.
Чтобы получить представление о работе с технологией автоматизации OLE, нужно разобраться в классификации серверов автоматизации, которые могут быть использованы в написании приложений систем управления базами данных. Существуют пять основных типов серверов автоматизации.
Внешние серверы взаимодействуют с приложением клиента, используя упрощенный механизм удаленного вызова процедур (Lightweight Remote Procedure Calls, или LRPC). В свою очередь, внутренние серверы (OLE DLL) используют вызовы обычных функций Windows. Благодаря этому, внутренние серверы быстрее реагируют на инструкции клиента, чем внешние. Внешний сервер можно' разместить на удаленном компьютере, а для взаимодействия с ним можно использовать DCOM. Такой внешний сервер называют
удаленным объектом автоматизации (Remote Automation Object— RAО).
Замечание
Служебные серверы не входят в официальную классификацию серверов автоматизации. Этот термин используется для того, чтобы различать невидимые управляемые служебные объекты сервера, работающие в фоновом режиме, и управляемые объекты, обладающие видимым представлением в режиме выполнения или режиме Конструктора Microsoft Access. Чаще всего служебные серверы используются при создании приложений баз данных, располагающих служебный сервер автоматизации между входным каналом приложения клиента и выходным каналом приложения сервера для обработки запросов приложения сервера или отслеживания ошибок данных входного канала сервера. Такие серверы невидимы для пользователя.
Одним из преимуществ автоматизации является возможность работы с управляемыми полными серверами и мини-серверами без создания видимого экземпляра сервера автоматизации. Автоматизация запускает приложение самостоятельно, без внешнего вмешательства. Если серверу не указано активизировать окно, он невидим, и в списке задач его имя не содержится.
В настоящем разделе будут рассмотрены несколько примеров управления объектами Microsoft Word из процедур VBA: открытие и печать документа, слияние документов для почтовых рассылок и заполнение полей в документе Word данными из БД Microsoft Access.
Для того чтобы открыть документ 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
Прежде чем работать с автоматизированными объектами Microsoft Excel, установим ссылку на библиотеку объектов Microsoft Excel. Для этого:
Чтобы элементы ActiveX можно было использовать в приложениях Microsoft Access, сведения о них должны быть внесены в реестр Windows. В противном случае они просто отсутствуют в списке диалогового окна
Вставка элемента ActiveX
(Insert ActiveX Controls). Этот процесс называется
подключением,
или
регистрацией.
Во время процесса установки большая часть элементов ActiveX создает требуемые разделы в реестре Windows. На рис. 15.44 приведены разделы реестра для элемента управления
Календарь.
Пример использования рисунка в качестве фона в форме приведен на рис. 15.2.
Аналогично вставляется фоновый рисунок в отчет. Пример использования рисунка в качестве фона в отчете приведен на рис. 15.3.
Рисунок может быть вставлен в форму и в виде элемента управления формы. Для этого можно использовать два типа элементов управления:
Рисунок
(Image) и
Свободная рамка объекта
(Unbound Object Frame).
Если не требуется прямое изменение рисунка в форме или отчете, то лучше использовать
Рисунок
(Picture) (форма будет работать быстрее). Если же предполагается часто изменять рисунок, нужно вставить его с помощью свободной рамки объекта.
Чтобы вставить элемент управления
Рисунок
(Image), необходимо:
Чтобы вставить рисунок в форму или отчет с помощью свободной рамки объекта, необходимо:
Если вам еще предстоит создать рисунок, проделайте следующие операции.
Если же файл с рисунком у вас уже готов, чтобы вставить его прямо из файла, вам необходимо:
Пример вставки рисунка, созданного с использованием Microsoft Paint, в форму с помощью свободной рамки объекта приведен на рис. 15.7.
После вставки объекта можно изменять его размеры и пропорции с помощью свойства
Установка размеров
(Size Mode). В большинстве случаев изменения в свободный объект могут вноситься в режиме Конструктора формы или отчета. Для того чтобы иметь возможность изменять объект в режиме формы, необходимо задать для свойства
Доступ
(Enabled) свободной рамки объекта значение Да (Yes), а для свойства
Блокировка
(Locked) — значение
Нет
(No). Чтобы отредактировать объект, дважды щелкните на нем мышью. Для этого только необходимо, чтобы на вашем компьютере было установлено приложение, в котором может редактироваться файл данного типа. Пример редактирования внедренного точечного рисунка представлен на рис. 15.8.
Для того чтобы выйти из режима редактирования, достаточно щелкнуть мышью за пределами рисунка.
В отличие от других элементов управления в форме, которые связаны с записями в таблице-источнике, рисунок в свободной рамке объекта не меняется при перемещении по записям в форме — он связан с самой формой, а не с данными, которые отображаются в форме. Рисунки, которые хранятся в записях таблицы, отображаются в форме с помощью присоединенной рамки объекта.
Для хранения рисунков и других объектов OLE в таблицах Access используется специальный тип поля:
Объект OLE
(OLE Object). Элемент управления
Присоединенная рамка объекта
(Bound Object Frame) создается одним из стандартных способов:
Вставить рисунок в поле таблицы можно как в таблице, открытой в режиме Таблицы, так и в форме. Для этого нужно:
Рисунок будет вставлен в запись в таблице. При этом в режиме Формы рисунок или иной объект автоматически будут отображаться на экране. В режиме Таблицы будет отображаться только тип объекта, например
Растровый рисунок.
Вставка графических файлов происходит либо напрямую, либо при помощи отдельных графических фильтров. Эти фильтры устанавливаются при инсталляции 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)
Увидеть данные, расположенные на листе Microsoft Excel, можно, открыв форму в режиме Формы. Чтобы иметь возможность изменять или добавлять данные на лист, нужно дважды щелкнуть кнопкой мыши на листе Microsoft Excel в форме (рис. 15.13).
При работе с отчетами Microsoft Access следует выполнять аналогичную пошаговую процедуру. Увидеть данные, расположенные на листе Microsoft Excel, можно, открыв отчет в режиме просмотра.
Рассмотрим теперь возможность вставки листов 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 в качестве объекта OLE требуется установить указатель на нужное поле, выполнить команду
Объект
(Object) из меню
Вставка
(Insert), в окне
Microsoft Access
выбрать переключатель
Создать из файла
(Create From File) и в поле
Файл
(File) указать имя и путь к файлу. Так как в нашем примере учитываются уже созданные документы, которые могут изменяться не только из Microsoft Access, необходимо установить связь с этими документами, для чего установите флажок
Связь
(Link) в окне
Microsoft Access.
Флажок
В виде значка
(Dysplay As Icon) в данном случае не устанавливается, т. к. нужно иметь возможность быстрого просмотра документов (рис. 15.17).
В результате создана таблица "Учет документов", приведенная на рис. 15.18.
После создания таблицы, в которой содержатся данные о документах, необходимо создать форму для удобного просмотра, редактирования и добавления новой информации о документах. Чтобы создать форму, необходимо:
Для просмотра содержимого таблицы необходимо открыть форму в режиме Формы (рис. 15.20). Чтобы получить возможность редактирования документа, требуется дважды щелкнуть левой кнопкой мыши на документе в форме. При этом откроется приложение Microsoft Word с выбранным документом.
Для создания отчета необходимо:
Чтобы просмотреть содержимое отчета, необходимо открыть его в режиме просмотра (рис. 15.22).
При изменении содержимого документов Word эти изменения будут отображаться в форме и отчете при их следующем открытии.
При желании можно вставлять документы Word в виде значка. Для этого в окне Вставка объекта (Insert Object) необходимо устанавливать флажок В виде значка (Display As Icon). В этом случае в форме и отчете не будут отображаться данные документов, а будут указываться только значки, изображающие документы. Для обращения к нужному документу из формы достаточно дважды щелкнуть левой кнопкой мыши на значке соответствующего документа. При этом откроется приложение Microsoft Word с соответствующим документом в окне. Примеры отображения документов в виде значка в форме и отчете приведены, соответственно, на рис. 15.23 и рис. 15.24.
Команды автоматизации удобно изучать при помощи окна отладки
Immediate.
Поэтому, выведите данное окно на экран, если оно не отображается. Для этого достаточно нажать соответствующую кнопку на панели инструментов или комбинацию клавиш <Ctrl>+<G>.
Чтобы программно открыть рабочий лист рабочей книги "Товары":
Private xlaProd As Excel.Application
Private xlwProd As Excel.Workbook
Private xlsProd As Excel.Worksheet
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 является необязательным. Если его не указать, то тип создаваемого объекта будет определен автоматически по расширению файла, указанного в первом аргументе.
Свойство Name созданного объекта workbook содержит имя файла Excel: Това-pbi.xls (рис. 15.28).
?xlwProd. ActiveSheet.Name
Свойство Name этого объекта содержит имя рабочего листа: Товары.
Для установления значения ячейки можно также использовать свойство Formula. Преимущество использования свойства Formula состоит в возможности его применения с целью введения формул с использованием "родного" синтаксиса Microsoft Excel, т. е. в виде ссылок на конкретные ячейки, например "=А2+С6".
Пусть переменная 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.
Ввод оператора ? CreateCustomSheet () в окне отладки запускает функцию, которую мы рассматривали выше. На рис. 15.31 приведена рабочая книга "ToBapы_2.xls" с рабочим листом, созданным при помощи функции CreateCustomSheet () и открытым в Microsoft Excel.
Рис. 15.31. Часть рабочего листа Excel, созданного из таблицы "Товары"
Рассмотрим программу, которая открывает файл 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. Тогда можно создать все бланки программно.
Сейчас мы создадим приглашение сотрудникам фирмы "Борей" на некоторое мероприятие. Мероприятие торжественное и важное, поэтому мы хотим напечатать приглашение на красивом бланке.
Шаблон документа должен быть приготовлен заранее. Рассмотрим, как это можно сделать.
Рассмотрим теперь программу, которая будет выполнять слияние документа 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.
В качестве сервера автоматизации Microsoft Access применяется обычно для создания мастеров, генерирующих приложения баз данных в Access, при этом можно использовать функции CreateFormf), CreateControl(), CreateReportControl().
Далее можно настроить этот элемент, используя его свойства. В отличие от других элементов управления, в данном случае свойства имеют:
В нашем примере создайте новую форму в режиме Конструктора. Добавьте в нее i описанным выше способом элемент управления
Календарь.
Откройте диалоговое окно свойств элемента ActiveX. Обратите внимание на свойство
Класс
(Class), определяющее класс элемента ActiveX. Значение этого свойства установилось автоматически: MSCAL.Calendar.7. Определите имя элемента: ocxCalendar и размеры ' примерно 8x6 см.
Чтобы посмотреть свойства объекта
Календарь:
Замечание
Чтобы познакомиться со всеми свойствами, методами и событиями любого элемента ActiveX, встроенного в форму, откройте окно свойств этого объекта и нажмите кнопку Справка (Help).
Private Sub Form_Load()
Календарь.Object.Value = Date
End Sub
Private Sub Календарь_АfterUpdate() 'обновление поля "Дата"
txtDate = Format(Календарь.Object.Value, "dd/mm/yy")
End Sub
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() Календарь.Object.NextWeek
End Sub
Private Sub Следующий_год_С11сК() Календарь . Object. NextYear
End Sub
Private Sub Следующий_месяц_С11сК() Календарь.Object.NextMonth
End Sub
Рис. 15.43. Окончательный вид формы с элементом управления Календарь
Однако многие свободно распространяемые элементы ActiveX не имеют в своем составе программы установки, поэтому следует подключить их самостоятельно.
Чтобы внести в реестр сведения о специальном элементе управления автоматизации для Microsoft Access или других приложений:
При удалении элемента ActiveX с жесткого диска рекомендуется также удалить соответствующий раздел из реестра. Для удаления раздела из реестра выделите имя специального элемента управления в списке
Доступные элементы
диалогового окна
Элементы ActiveX,
затем нажмите на кнопку
Отключить
(Unregister).
Те же действия, что происходят при нажатии кнопки
Анализ в 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.
Сначала рассмотрим, как можно выполнять операции с рабочим листом Microsoft Excel из программы Access. Для этого нам потребуется файл Товары.хls, содержащий рабочую книгу Excel с единственным рабочим листом "Товары", который представляет собой список товаров из демонстрационной базы данных "Борей". Вы можете использовать готовый файл, находящийся на сопровождающем книгу компакт-диске, либо создать его самим, экспортировав в Excel таблицу "Товары" с помощью команды меню
Сервис, Связи с Office, Анализ в MS Excel
(Tools, Office Links, Analyze It with Microsoft Excel)
(см. разд. "Быстрый экспорт данных в другие приложения Microsoft Office"гл. 3).
Для того чтобы подготовить файл Товары.xls к дальнейшим экспериментам, выполните следующие действия:
Итак, OLE — это протокол, позволяющий создавать
составные документы,
которые включают в себя документы, созданные другими приложениями. Документ, который включает в себя другие документы, называется
документом-контейнером OLE.
В данном случае документами-контейнерами являются формы и отчеты Access. Документы, которые включаются в форму или отчет, называются
документами-источниками
или
объектами OLE.
Объектами OLE могут быть документы Word, Excel, рисунки, созданные в одном из графических редакторов, например Paint, видеоролики (файлы с расширением avi), звуковые файлы с расширением wav. Объекты OLE отличаются от объектов Automation, о которых мы будем говорить ниже, тем, что они являются документами, получаемыми с помощью приложения, а не частью его модели объектов.
Объекты OLE могут быть либо
внедрены
в документ-контейнер, либо
связаны
с ним. Приложение, которое поставляет объекты для внедрения и связывания, называется
сервером OLE.
Внедренный объект представляет собой копию документа-источника, который сохраняется вместе с формой или отчетом. Связанный объект хранится в отдельном файле, и документ-контейнер содержит только указатель на исходный файл объекта. Если кто-либо обновляет исходный файл объекта, то обновляется и представление объекта в составном документе. Коварство связанных объектов заключается в том, что при изменении местоположения исходного файла относительно составного документа, либо при изменении местоположения составного документа таким образом, что исходный файл становится недоступным, связь разрывается. Внедренные объекты всегда доступны, однако частое их использование приводит к непомерному увеличению файла составного документа.
Выполнив внедрение или связывание объекта OLE, можно легко активизировать из документа Access приложение, которому этот объект принадлежит. Для этого достаточно дважды щелкнуть левой кнопкой мыши по внедренному объекту, после чего объект может быть изменен. Когда же активизированное приложение будет закрыто, в документе-контейнере отразится (а в случае внедрения — сохранится) внесенное изменение.
Связывание и внедрение объектов OLE сравниваются в табл. 15.1.
Параметр
|
Связывание
|
Внедрение
|
||
Число файлов |
Необходимо поддерживать не |
Поддерживать необходимо |
||
|
менее двух файлов: связанного |
лишь один файл составного |
||
|
объекта (такого как лист Excel) и |
документа, содержащего внед- |
||
|
составного документа, исполь- |
ренный объект |
||
|
зующего этот обьект (такого, как |
|
||
|
Word). Можно установить связь |
|
||
|
так, что при обновлении исходно- |
|
||
|
го файла объекта автоматически |
|
||
|
обновляется файл составного |
|
||
|
документа |
|
||
Создание объектов |
Объект создается копированием |
Объект создается либо копи- |
||
|
его из исходного документа и |
рованием и вставкой, либо |
||
|
вставкой связи в документ назначения |
перетаскиванием с помощью |
||
|
|
файл составного документа |
||
Обновление |
Один и тот же исходный документ |
Необходимо отразить измене- |
||
объектов |
могут использовать несколько |
ния внедренного объекта в |
||
|
составных документов. При изме- |
каждом составном документе |
||
|
нении исходного документа об- |
|
||
|
новление объекта во всех контей- |
|
||
|
нерах, которые его используют, |
|
||
|
может происходить автоматически |
|
||
Формат, исполь- |
В зависимости от природы самого |
Все внедренные объекты по- |
||
зуемый в докумен- |
объекта и возможностей контей- |
являются в составном доку- |
||
те-контейнере |
нера, можно связывать его в раз- |
менте как графические |
||
|
личных форматах. Например, |
|
||
|
можно связать рабочий лист Excel |
|
||
|
с документом Word как графиче- |
|
||
|
ский объект, форматированный |
|
||
|
текст, неформатированный текст, |
|
||
|
рисунок, растровую картинку |
|
||
Поддержка |
Необходимо отслеживать соответ- |
Все, что необходимо — это |
||
объектов |
ствие путей к файлу исходного |
поддерживать документ, со- |
||
|
объекта в составном документе |
держащий внедренный обьект |
||
Размер объекта |
Поскольку исходный документ |
Внедренный обьект должен |
||
|
существует в отдельном файле, |
содержать все необходимые |
||
|
составной документ лишь весьма |
данные внутри составного |
||
|
незначительно увеличивает свой |
документа, поэтому размер |
||
|
размер при связывании его с |
последнего значительно уве- |
||
|
файлом исходного документа |
личивается при внедрении |
||
Управление |
Используйте команду Правка, |
Большинство объектов можно |
||
объектами |
Связи (Edit, Links). Например, |
преобразовать в составном |
||
можно установить связь таким |
документе так, чтобы они су- |
|||
образом, чтобы можно было |
ществовали как рисунки. Вер- |
|||
|
вручную или автоматически об- |
нуть их в исходный формат |
||
|
новлять объект, временно блоки- |
внедренных объектов практи- |
||
ровать связь, разрывать или вос- |
чески никогда нельзя |
|||
станавливать ее |
|
|||
Имя поля
|
Тип поля
|
Назначение
|
||
"Номер" |
Счетчик (AutoNumber) |
Порядковый номер документа |
||
"Наименование" |
Текстовый (Text) |
Название документа |
||
"Код" |
Текстовый (Text) |
Шифр документа |
||
"Текст" |
Поле объекта OLE (OLE Object) |
Документ |
||
"Примечаниез" |
Поле Memo (Memo) |
Примечания |
||
Для создания таблицы необходимо:
Использование документов Microsoft Word в таблицах, формах и отчетах Microsoft Access осуществляется аналогично использованию листов Microsoft Excel или рисунков. Документ Microsoft Word рассматривается как объект OLE, который может быть помещен в таблицу или, с помощью свободной или присоединенной рамки объекта, в форму или отчет Microsoft Access.
Рассмотрим пример, в котором Microsoft Access используется для учета документов Microsoft Word. Для реализации учета документов Word с возможностью их просмотра и редактирования необходимо создать таблицу, в которую должны быть включены поля для порядкового номера документа, названия документа, шифра документа, самого документа и примечаний {табл. 15.2).
С помощью таких элементов управления, как
Свободная рамка объекта и Присоединенная рамки объекта,
в формах и отчетах Access можно отображать не только различные графические объекты, но и листы Microsoft Excel.
Так же как и рисунок, лист Microsoft Excel можно внедрить в форму или отчет или связать его с ними. При этом вставленный лист автоматически сохраняется в файле базы данных и всегда является доступным. Если обновить такой объект в форме или отчете, он будет изменен только в базе данных. Если лист Microsoft Excel связан, его можно просматривать и вносить изменения в форме или отчете. При этом изменения cохраняются в исходном файле объекта, а не в файле базы данных. Файл объекта можно обновлять независимо от базы данных. Последние изменения будут выведены на экран при следующем открытии формы или отчета. Связывание объектов удобно при работе с очень большими файлами, которые нежелательно включать в файл базы данных, а также с файлами, используемыми в нескольких формах и отчетах. Если связанный файл объекта перемешен, необходимо повторно установить с ним связь.
Рассмотрим возможность вставки листа Microsoft Excel в форму и отчет Microsoft Access с помощью свободной рамки объекта. Чтобы вставить новый лист Microsoft Excel в форму Microsoft Access, необходимо:
В Microsoft Access существует возможность вставки рисунков в формы и отчеты. Использование рисунков может улучшить внешний вид создаваемых форм и отчетов. Например, в отчеты можно включать логотип фирмы, а в форме предоставлять возможность просмотра не только данных о сотрудниках фирмы, но и их фотографий. Для вставки рисунков в формы и отчеты используются специальные элементы управления —
свободная
и
присоединенная
рамки объектов (Unbound Object Frame, Bound Object Frame), а также элемент управления
Рисунок
(Image).
Способ вставки рисунка зависит от того, как предполагается его использовать.
Чтобы добавить фоновый рисунок в форму:
Замечание
Несколько стандартных файлов для фоновых рисунков находятся в папке MICROSOFT OFFICE\OFFICE\BITMAPS\STYLES.
Такая операция может быть полезна, когда требуется автоматически внести данные в один из типовых документов: служебную записку, письмо, договор и т. д. Не всегда такие документы можно сформировать, используя отчеты Access. Например:
В качестве примера рассмотрим документ Word, который находится в файле Contract.doc на компакт-диске. Документ представляет собой текст договора и содержит несколько
полей формы,
которые должны быть заполнены данными из таблицы Access.
(Подробно о полях формы можно пропитать, например, в кн.: Ф. Новиков, А. Яценко. Microsoft Office 2000 в целом. "БХВ—Санкт-Петербург", 1999.)
Откройте этот файл, запустив Word. На рис. 15.32 показаны начало документа и поля, которые должны быть заполнены. Кроме того, представлена стандартная панель инструментов
Формы
(Forms), с помощью которой эти поля были созданы.
Замечание
Чтобы вывести на экран эту панель инструментов, щелкните правой кнопкой мыши в области панелей инструментов и выберите из списка элемент
Формы
(Forms).
Чтобы вставить такое поле в документ, нужно:
Объект 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 перед освобождением соответствующей объектной переменной.