【问题标题】:Open multiple copies of Word template document using VBA for applications使用 VBA 为应用程序打开多个 Word 模板文档副本
【发布时间】:2009-10-03 01:15:31
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 根据您描述的对话框,听起来您是在打开Word模板,而不是以此为基础创建新文档。你能发布你用来打开模板的代码吗?

标签: vba ms-word


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多