Настольная СУБД Access 2002

         

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



Рис. 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. Тогда можно создать все бланки программно.

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



Содержание раздела