Иллюстрированный самоучитель по Microsoft Access 2002

Обмен данными с 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.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.