Настольная СУБД Access 2002




Рис. 15.35. Диалоговое окно с...



Рис. 15.35. Диалоговое окно с содержимым таблицы "СписокПриглашенных"


Рис. 15.35.
Диалоговое окно с содержимым таблицы "СписокПриглашенных"

  1. Теперь на экране отображается панель инструментов Слияние (Mail Merge). Установите курсор в левый верхний угол документа и нажмите кнопку Добавить поля слияния (Insert Merge Fields). Появляется одноименное диалоговое окно со списком всех полей в источнике данных. Выберите в списке поле "Обращение" и нажмите кнопку Вставить (Insert). Аналогично вставьте остальные поля (см. рис. 15.34). Поля слияния являются одним из видов полей Word и выглядят в основном документе как заключенные в угловые кавычки названия соответствующих полей источника данных.
  2. Сохраните документ в виде шаблона (файл с расширением dot) и закройте.

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

 









Начало    Назад    Вперед