使用 word docs 和 ms access 生成完整的 PDF 表单

Generating completed PDF forms using word docs and ms access

我正在尝试使用 Microsoft Access 填写带有书签文本表单域的 word 文档,然后将它们导出为 PDF。我正在努力在 Access 中生成始终如一的 Visual Basic 代码。我继续收到关于被锁定无法编辑的 word 文档的错误。不确定如何进行

我目前拥有的代码

Public Sub ExportToMGR()
    Dim wApp As Word.Application
    Dim wDoc As Word.Document
    Dim rs As DAO.Recordset

    Set wApp = New Word.Application
    Set wDoc = wApp.Documents.Open("C:\filepath\doc.docx")
    Set rs = CurrentDb.OpenRecordset("Detail Report - Individuals")

    If Not rs.EOF Then rs.MoveFirst

    Do Until rs.EOF
        wDoc.Bookmarks("FullName1").Range.Text = Nz(rs!ClientName, "")
        wDoc.Bookmarks("FullName2").Range.Text = Nz(rs!ClientName, "")
        wDoc.SaveAs2 "C:\filepath\" & "firstTest.docx"
        rs.MoveNext
    Loop


End Sub

欢迎来到 SO。

您不应打开 Word 文档,而应创建一个 Word 模板 (.dotx) 并通过调用 .Add() 方法将其添加到文档集合中。

文档填满数据后,需要调用.ExportAsFixedFormat()方法保存为PDF。

请参阅下面的示例。

Option Explicit

Private Sub RunMailMerge_Click()
    On Error GoTo Trap

    Const TEMPLATE_PATH As String = "YourTemplateFolder\WordTemplate.dotx"

    Dim wApp As Word.Application
    Dim wDoc As Word.Document
    Dim rs As DAO.Recordset
    Dim idx As Long

    Set wApp = New Word.Application
    wApp.Visible = False

    Set rs = CurrentDb.OpenRecordset("Detail Report - Individuals")
    If rs.EOF Then GoTo Leave

    With rs
        .MoveLast
        .MoveFirst
    End With

    For idx = 1 To rs.RecordCount
        Set wDoc = wApp.Documents.Add(TEMPLATE_PATH)
        With wDoc
            .Bookmarks("FullName1").Range.Text = Nz(rs!ClientName, vbNullString)
            .Bookmarks("FullName2").Range.Text = Nz(rs!ClientName, vbNullString)
            .ExportAsFixedFormat "DocumentPathWithExtension.pdf", wdExportFormatPDF, False, wdExportOptimizeForOnScreen
            .Close wdDoNotSaveChanges
        End With
        Set wDoc = Nothing
        rs.MoveNext
    Next

Leave:
    On Error Resume Next
    If Not rs Is Nothing Then rs.Close
    If Not wDoc Is Nothing Then wDoc.Close wdDoNotSaveChanges
    If Not wApp Is Nothing Then wApp.Quit wdDoNotSaveChanges
    On Error GoTo 0
    Exit Sub

Trap:
    MsgBox Err.Description, vbCritical
    Resume Leave
End Sub