Вывод данных из таблицы Access в документ Word


Такая операция может быть полезна, когда требуется автоматически внести данные в один из типовых документов: служебную записку, письмо, договор и т. д. Не всегда такие документы можно сформировать, используя отчеты Access. Например:

  • требуется оформить договор, который, как правило, представляет собой довольно длинный текстовый документ, в который нужно вставить несколько чисел или строк;
  • нужно обеспечить возможность ручного редактирования текста документа;
  • документ должен быть сохранен в виде текстового файла (отчет Access может быть только напечатан).

В качестве примера рассмотрим документ Word, который находится в файле Contract.doc на компакт-диске. Документ представляет собой текст договора и содержит несколько полей формы, которые должны быть заполнены данными из таблицы Access.Откройте этот файл, запустив Word. На показаны начало документа и поля, которые должны быть заполнены. Кроме того, представлена стандартная панель инструментов Формы (Forms), с помощью которой эти поля были созданы.
Замечание
Чтобы вывести на экран эту панель инструментов, щелкните правой кнопкой мыши в области панелей инструментов и выберите из списка элемент Формы (Forms).
Чтобы вставить такое поле в документ, нужно:

  1. Установить курсор (точку ввода) в то место, где должно начинаться поле, и нажать кнопку Текстовое поле (Text Form Field). Поле будет вставлено в документ в точке ввода.
  2. Дважды щелкнуть на этом поле. Откроется диалоговое окно Параметры текстового поля (Text Form Field Options), в котором требуется заполнить, по крайней мере, одно поле: Закладка (Bookmark).
  3. Ввести имя закладки и нажать кнопку ОК.

Рассмотрим программу, которая открывает файл Contract.doc и автоматически заполняет поля договора. Такая программа может быть связана, например, с кнопкой в форме "Заказы клиентов" (Customer Orders) и обрабатывает нажатие данной кнопки. При нажатии на кнопку должен сформироваться договор с тем клиентом, который отображается в текущей записи формы. Для простоты будем считать, что номер договора будет равен номеру текущего заказа (выделенного в подчиненной форме).
Private Sub CreateContract_Click()
Dim wda As Word.Application
Dim wdd As Word.Document
Dim intPrint As Integer On Error GoTo ErrStartWord
Set wdd = GetObject("C:\Doc\Contract.doc")
Set wda = wdd.Parent
wda.Visible = True
wdd.Bookmarks("ContractNumber").Select
wda.Selection.TypeText
Text:=[Подчиненная форма заказов 1].Form![КодЗаказа]
wdd.Bookmarks("ContractDate").Select With wda
.Selection.TypeText Text:=Date
.Selection.GoTo Name:="CustemerName"
.Selection.TypeText Text:=[Название]
.Selection.GoTo Name:="CustomerAddress"
.Selection.TypeText Text:=[Страна]
‘ заполнение остальных полей
intPrint = MsgBox("Печатать договор?", vbYesNo + vbQuestion)
If intPrint = vbYes Then
wdd.Printout
Do While .BackgroundPrintingStatus <> 0
DoEvents
Loop
End If
.ActiveDocument.Close False If .Windows.Count = 0 Then
.Quit
End If
End With
Set wdd = Nothing Set wda = Nothing
Exit Sub
ErrStartWord:
MsgBox Err.Description & " " & Err.Number, vblnformation
Exit Sub
End Sub
В данной программе с помощью функции Getobject() создается объект Document. Если при этом Word не запущен, то одновременно создается скрытый экземпляр объекта Application Word. Если Word уже запущен, то новый документ добавляется к уже открытым документам.
Далее показаны два способа нахождения нужной закладки в документе. В первом случае используется семейство Bookmarks. Вызвав метод Select нужного элемента этого семейства, можно создать объект Selection, а в документе при этом выделяется требуемое поле.
Во втором случае к объекту Selection (вспомните, что он может означать не только выделенную область, но и точку ввода) применяется метод Goto, которому в качестве значения аргумента Name передается имя нужной закладки.
После того как все поля заполнены, договор выводится на печать. Но предварительно пользователь получает сообщение, требующее подтвердить необходимость печати. Документ печатается только если пользователь подтвердит это.
Потом документ закрывается и далее проверяется, открыты ли еще какие-либо документы (используется свойство Count семейства windows). Если других открытых документов нет, то приложение тоже закрывается. В конце процедуры освобождаются обе объектные переменные.

Если в организации отсутствует приложение Access для автоматизации различных деловых процедур, то создавать типовые бланки документов можно более простыми средствами, например, умело используя средства самого редактора Microsoft Word. Однако, когда такое приложение имеется и в базе данных Access хранится большинство нужной информации, было бы просто нерационально вводить вручную в текст документа значения полей. Рассмотренный пример объясняет, как можно этого избежать.