【问题标题】:Export several word documents appended in a single pdf file导出多个附加在单个 pdf 文件中的 word 文档
【发布时间】:2018-06-12 02:03:15
【问题描述】:

我在 Excel 工作表中有一个嵌入的 MS-Word 文档,名称为 SalaryPaycheck

MS-word 文档包含多个链接到工作表单元格的字段。

我已经多次更新链接的单元格并执行更新以上字段。

然后我需要在每次字段更新时将嵌入的 MS-Word 文档导出为PDF

所以我需要所有导出的文件都附加在一个 pdf 文件中。

我使用以下代码:

Sub PrintIt()

    Dim objWord As Word.Application
    Dim objDoc As Word.Document
    Dim i as Integer

    ActiveSheet.OLEObjects("SalaryPaycheck").Activate
    Set objWord = GetObject(, "Word.Application")
    objWord.Visible = False
    Set objDoc = objWord.ActiveDocument
    objWord.Application.DisplayAlerts = wdAlertsNone
    objWord.Application.ScreenUpdating = False

    For i = 1 to 10

        Range("Key").value = i

        objDoc.Fields.Update

        objDoc.ExportAsFixedFormat _
            outputfileName:=ThisWorkbook.path & "\Results\" & "rep" & i & ".pdf" _
            , exportformat:=wdExportFormatPDF _
            , openafterexport:=False _
            , optimizefor:=wdExportOptimizeForPrint _
            , Range:=wdExportAllDocument _
            , Item:=wdExportDocumentContent _
            , includedocprops:=False _
            , keepirm:=True _
            , createbookmarks:=wdExportCreateNoBookmarks _
            , docstructuretags:=True _
            , bitmapmissingfonts:=True _
            , useiso19005_1:=False
    Next i

    objWord.Quit
    Set objDoc = Nothing
    Set objWord = Nothing

End Sub 'Print it

如何使用objDoc.SaveAs2objDoc.ExportAsFixedFormat(如上所示)与objDoc.PrintOut' whith 'Append:=True 参数相同?

或者如何在这种情况下使用带有“Append:=True”参数的.PrintOut(PDF),它可以安静地工作(使用OutputFileName:=path & filenamePrintToFile:=True

【问题讨论】:

    标签: vba excel pdf pdf-generation


    【解决方案1】:

    如另一个question所说,只需将文档附加在word中

    Sub PrintIt()
    
    Dim objWord As Word.Application
    Dim objDocTotal As Word.Document
    Dim objDoc As Word.Document
    Dim i As Integer
    Dim strOutfile As String
    Dim rg As Word.Range
    
        ActiveSheet.OLEObjects("SalaryPaycheck").Activate
        Set objWord = GetObject(, "Word.Application")
        objWord.Visible = True
        Set objDoc = objWord.ActiveDocument
        Set objDocTotal = Documents.Add
        objWord.Application.DisplayAlerts = wdAlertsNone
        objWord.Application.ScreenUpdating = True
    
        For i = 1 To 10
    
            Range("Key").Value = i
    
            With objDoc
                .Fields.Update
                .Content.Copy
            End With
    
            Set rg = objDocTotal.Content
            With rg
                .Collapse Direction:=wdCollapseEnd
                If i > 1 Then .InsertBreak wdPageBreak
                .PasteAndFormat wdFormatOriginalFormatting
            End With
        Next i
    
    
        strOutfile = "<Path>\Salary.pdf"
    
        objDocTotal.ExportAsFixedFormat outputfileName:= _
                                        strOutfile, exportformat:=wdExportFormatPDF, _
                                        openafterexport:=False, optimizefor:=wdExportOptimizeForPrint, Range:= _
                                        wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent
    
    
    
        objDocTotal.Close False
        objWord.Quit
        Set objDoc = Nothing
        Set objWord = Nothing
    
    End Sub
    

    【讨论】:

    • 实际上有更多的循环 (For Next),所以运行上述过程非常慢,但 CPU 使用率大约低于 25%! (虽然上面有更多 For Next 的代码正在运行。)如何通过增加 CPU 使用率更快地运行以上代码?
    • 我已经问了具体问题stackoverflow.com/q/
    • 请访问此问题。 (stackoverflow.com/q/)。作为您的专家,您似乎可以回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多