Обмен данными с 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 IntegerSet 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 Thenwda.Quit End If'Удаляем временную таблицу db.TableDefs.Delete "СписокПриглашенных"db.Close Set wda = NothingSet rst = NothingSet rstNew = NothingExit Suberr_StartWord: If Err = 429 Then 'Word не запущен Set wdd = CreateObject("Word.Application") Resume Next ElseMsgBox Err.Description & " " & Err.Number, vblnformation Exit Sub End IfEnd SubСначала создается таблица "СписокПриглашенных" с той же структурой, которая была создана вручную. Затем все данные, отображаемые в форме, записываются в эту таблицу. Все операции с данными выполняются с использованием объектов DАО. Объект Application Word создается с помощью функции GetObject() или CreateObject () в зависимости от того, запущен ли уже Word. Для создания нового документа на основе шаблона используется метод Add семейства Documents. При слиянии основного документа с записями в таблице создается новый документ. Для этого устанавливается значение свойства Destination объекта MailMerge равным константе wdSendToNewDocument. Этот документ уже не содержит поля слияния, а является просто текстовым документом, который можно сохранить в виде файла, задав его имя. Перед сохранением в файле документ выводится на печать. После этого нужно аккуратно закрыть сначала новый документ, потом основной документ, к которому присоединен источник данных, и потом, если нужно, сам Word.
