首页 > 解决方案 > 使用 Access VBA 问题将 PDF 合并为一个 PDF 文件

问题描述

我目前正在使用此代码来合并我打印到 .pdf 的 Access 报告。直到最近它一直运行良好,我不确定它为什么不合并我的 .pdf 文件。有人可以看看它并告诉我什么是错的。我的参考文献设置为 Adob​​e Acrobat 10.0 类型库。任何帮助是极大的赞赏。

Dim Encl2, Encl2FN, Encl2Path, Encl3, Encl3FN, Encl3Path, Encl4, Encl4FN, Encl4Path As String
Dim RPath, TempPath, TempPathEncl2, TempPathEncl3, TempPathEncl4 As String
Dim UserPth, strfile, strFilePath As String
Dim arrayFilePaths() As Variant
Dim app As Acrobat.CAcroApp
Dim primaryDoc As Acrobat.CAcroPDDoc
Dim SourceDoc As Acrobat.CAcroPDDoc
Dim OK
Dim arrayIndex
Dim numberOfPagesToInsert As String
Dim numPages As Integer

Encl2 = "rpt_Delegation_Enclosure2"
Encl3 = "rpt_Delegation_Enclosure3"
Encl4 = "rpt_Delegation_Enclosure4"

Encl2FN = "Enclosure2" & ".pdf"
Encl3FN = "Enclosure3" & ".pdf"
Encl4FN = "Enclosure4" & ".pdf"

UserPth = Environ("USERPROFILE")
TempPathEncl2 = UserPth & "\Desktop\" & Encl2FN
TempPathEncl3 = UserPth & "\Desktop\" & Encl3FN
TempPathEncl4 = UserPth & "\Desktop\" & Encl4FN
strfile = "SourceRpt" & ".pdf"
strFilePath = UserPth & "\Desktop\" & strFile

RPath = strFilePath

    Set app = CreateObject("AcroExch.App")

    arrayFilePaths = Array(RPath, TempPathEncl2, TempPathEncl3, TempPathEncl4)

    Set primaryDoc = CreateObject("AcroExch.PDDoc")
    OK = primaryDoc.Open(arrayFilePaths(0))
    Debug.Print "PRIMARY DOC OPENED & PDDOC SET: " & OK
            
    For arrayIndex = 1 To UBound(arrayFilePaths)
        numPages = primaryDoc.GetNumPages() - 1

        Set SourceDoc = CreateObject("AcroExch.PDDoc")
        OK = SourceDoc.Open(arrayFilePaths(arrayIndex))
        Debug.Print "SOURCE DOC OPENED & PDDOC SET: " & OK

        numberOfPagesToInsert = SourceDoc.GetNumPages

        OK = primaryDoc.InsertPages(numPages, SourceDoc, 0, numberOfPagesToInsert, False)
        Debug.Print "PAGES INSERTED SUCCESSFULLY: " & OK

        OK = primaryDoc.Save(PDSaveFull, arrayFilePaths(0))
        Debug.Print "PRIMARYDOC SAVED PROPERLY: " & OK
        
        Set SourceDoc = Nothing
    Next arrayIndex

    Set primaryDoc = Nothing
    app.Exit
    Set app = Nothing
End Sub

标签: vbams-access

解决方案


这对我来说很好

改编自:VBA,将 PDF 合并为一个 PDF 文件

Sub main()

    Const PDSaveFull = 1
    Dim arrayFilePaths() As Variant, OK, arrayIndex As Long
    Dim primaryDoc, app, numPages, numberOfPagesToInsert, sourceDoc
    
    Set app = CreateObject("Acroexch.app")

    arrayFilePaths = Array("C:\Tester\PDF_Sheet1.pdf", _
                            "C:\Tester\PDF_Sheet2.pdf", _
                            "C:\Tester\PDF_Sheet3.pdf")

    Set primaryDoc = CreateObject("AcroExch.PDDoc")
    OK = primaryDoc.Open(arrayFilePaths(0))
    Debug.Print "PRIMARY DOC OPENED & PDDOC SET: " & OK

    For arrayIndex = 1 To UBound(arrayFilePaths)
        numPages = primaryDoc.GetNumPages() - 1

        Set sourceDoc = CreateObject("AcroExch.PDDoc")
        OK = sourceDoc.Open(arrayFilePaths(arrayIndex))
        Debug.Print "SOURCE DOC OPENED & PDDOC SET: " & OK

        numberOfPagesToInsert = sourceDoc.GetNumPages

        OK = primaryDoc.InsertPages(numPages, sourceDoc, 0, numberOfPagesToInsert, False)
        Debug.Print "PAGES INSERTED SUCCESSFULLY: " & OK

        OK = primaryDoc.Save(PDSaveFull, arrayFilePaths(0))
        Debug.Print "PRIMARYDOC SAVED PROPERLY: " & OK

        Set sourceDoc = Nothing
    Next arrayIndex

    Set primaryDoc = Nothing
    app.Exit
    Set app = Nothing
    MsgBox "DONE"
End Sub

推荐阅读