Откройте несколько копий документа шаблона Word, используя VBA для приложений - PullRequest
1 голос
/ 03 октября 2009

Я разрабатываю приложение базы данных, в котором пользователи открывают шаблон документа Word и объединяют его с записями базы данных. Я успешно написал код, который делает это для одной записи, где я открываю файл шаблона и заменяю элементы в документе шаблона данными БД. Я попытался открыть шаблон документа несколько раз (один раз для каждой записи в БД), но при этом открывается диалоговое окно Word, предлагающее пользователю открыть второй и последующие документы только для чтения (не очень элегантно), и я получаю Word Normal.dotm ошибка при закрытии каждого из документов. Итак, как я могу использовать один шаблон документа для создания документов из нескольких слов одновременно. На мой взгляд, есть два варианта: 1) сохранить один документ под новым именем перед созданием других документов или 2) иметь один документ с несколькими страницами (по одному на запись в БД), но для этого мне нужно будет скопировать и вставить шаблон документа содержание один раз для каждой записи, но я не вижу, как это сделать. Пожалуйста, имейте в виду, что у меня есть опыт в программировании баз данных и только элементарные знания VB для приложений, поэтому, чем более явным вы можете быть, тем более полезным он будет.

Заранее спасибо.

1 Ответ

1 голос
/ 17 мая 2011

Эта функция создаст новый документ для каждой записи на основе указанного шаблона. Я использую предустановленную закладку в шаблоне Word для добавления данных из базы данных. Эта подпрограмма будет работать в базе данных.

Public Sub CreateDocs()

    Dim oWord As Word.Application
    Set oWord = New Word.Application
    Dim oDocument As Word.Document
    Dim oDatabase As DAO.Database
    Set oDatabase = CurrentDb

    ' where to save our files
    Dim strDocPath As String
    strDocPath = CurrentProject.Path & "\"

    ' preset bookmark in template
    Dim oBookMark As Word.Bookmark

    ' query with records
    Dim oRecordset As DAO.Recordset
    Set oRecordset = oDatabase.OpenRecordset("qrySomeQuery")

    ' template file
    Dim strTemplateName As String
    strTemplateName = "C:\users\you\Documents\Doc1.dotx"

    ' hide Word
    oWord.WindowState = wdWindowStateMinimize
    oWord.Visible = False

    While Not oRecordset.EOF
        ' create new document from template
        Set oDocument = oWord.Documents.Add(strTemplatePath, False, , False)

        ' get reference to bookmark in template
        Set oBookMark = oDocument.Bookmarks("bkmkSomePlace")

        ' add our data
        oBookMark.Range.Text = oRecordset.Fields(0).Value & vbTab & oRecordset.Fields(1).Value

        ' Save and close
        ' Saving using one of the query fields that is unique
        oDocument.SaveAs strDocPath & "generatedFile" & oRecordset.Fields(0).Value, wdFormatDocumentDefault
        oDocument.Close

        ' next record
        oRecordset.MoveNext
    Wend

    oWord.Close
    Set oWord = Nothing
    If Not oRecordset Is Nothing Then oRecordset.Close
    Set oRecordset = Nothing
    oDatabase.Close
    Set oDatabase = Nothing
    Set oDocument = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...