Диалоговое окно с содержимым таблицы "СписокПриглашенных"
Иллюстрация 15.35. Диалоговое окно с содержимым таблицы "СписокПриглашенных"
-
Теперь на экране отображается панель инструментов
Слияние
(Mail Merge). Установите курсор в левый верхний угол документа и нажмите кнопку
Добавить поля слияния
(Insert Merge Fields). Появляется одноименное диалоговое окно со списком всех полей в источнике данных. Выберите в списке поле "Обращение" и нажмите кнопку
Вставить
(Insert). Аналогично вставьте остальные поля (см. рис. 15.34). Поля слияния являются одним из видов полей Word и выглядят в основном документе как заключенные в угловые кавычки названия соответствующих полей источника данных.
-
Сохраните документ в виде шаблона (файл с расширением dot) и закройте.
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.