Обмен данными с Microsoft 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 хранится большинство нужной информации, было бы просто нерационально вводить вручную в текст документа значения полей. Рассмотренный пример объясняет, как можно этого избежать.