Обмен данными с Microsoft Word в системе автоматизации
Рассмотрим теперь программу, которая будет выполнять слияние документа 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.