使用VBA为应用程序打开Word模板文档的多个副本

时间:2009-10-03 01:15:32

标签: vba ms-word

我正在开发一个数据库应用程序,用户打开Word模板文档并将其与数据库记录合并。我已经成功地为一条记录编写了代码,我打开一个模板文件并用DB数据替换模板文档中的项目。我尝试多次打开模板文档(每个DB记录一次),但这会打开一个Word对话框,提示用户打开第二个和后续文档为只读(不是很优雅),我得到一个Word Normal.dotm每个文档关闭时出错。 那么,我如何使用一个模板文档同时创建多个word文档。我看到的两个选项是:1)在创建其他文档之前以新名称保存一个文档或2)有一个文档包含多个页面(每个数据库记录一个)但是为了做到这一点,我将不得不复制并粘贴模板文档每个记录的内容一次,但我不知道如何做到这一点。 请记住,我在数据库编程方面经验丰富,只有VB对应用程序的基本知识,所以你可以越明确,它就越有用。

提前致谢。

1 个答案:

答案 0 :(得分:1)

此功能将根据指定的模板为每条记录创建一个新文档。我在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