【问题标题】:Error when Printing to PDF with excel macros. Will only work with actual Adobe and not Adobe Reader使用 Excel 宏打印到 PDF 时出错。仅适用于实际的 Adob​​e 而不是 Adob​​e Reader
【发布时间】:2018-09-06 01:02:48
【问题描述】:

我有一张 Excel 表格,它整合了一堆报告并将它们打印为 PDF。当我在安装了实际 Adob​​e 软件的电脑上时,代码运行良好。我尝试在我的个人笔记本电脑上使用它,它只有一个 adobe 阅读器,并且宏崩溃了:

Sub JoinPDFFile(strPDFToLocation As String, strPDFTo As String, _
 strPDFFromLocation As String, strPDFFrom As String)



  Dim objAcroExchApp As Object
  Dim objAcroExchNewPDDoc As Object
  Dim objAcroExchExistPDDoc As Object
  Dim intLastPage As Integer
  Dim intNewPages As Integer


  Set objAcroExchApp = CreateObject("AcroExch.App") <---This is the error
  'New PDF document object
  Set objAcroExchApp = CreateObject("AcroExch.PDDoc")
  If Dir(strPDFToLocation & strPDFTo & ".pdf") = strPDFTo & ".pdf" Then
    objAcroExchApp.Open strPDFToLocation & strPDFTo & ".pdf"
   Else
    objAcroExchApp.Create
  End If

它说 Set objAcroExchApp = CreateObject("AcroExch.App")

所以我想知道。我是否必须返回并更改代码中的所有内容,以便它可以与当前用户拥有的任何 PDF 文件阅读器一起使用?

我尝试在上面使用 On Error Resume Next,它所做的只是放弃整个过程,只打印应该有 20 页的第一页。

有没有办法只简单地编写整个代码,以便它制作一个 PDF 文件,而不取决于我是否有 Adob​​e?因此,即使您使用 Foxit、Dejvu 等。它仍然有效吗?

【问题讨论】:

  • 错误信息是什么?您尝试以管理员身份运行吗?
  • @Portekoi 错误是运行时错误“429”:ActiveX 组件无法创建对象。以管理员身份运行并不重要。如果我使用的是 Adob​​e Reader 而不是实际的 Adob​​e,则会发生此错误。

标签: vba excel pdf-generation


【解决方案1】:

Excel 不需要任何特定的库来为它提供ExportAsFixedFormat Type:=xlTypePDF,但可以使用 AcroExch.App 需要 Adob​​e Pro。所以它真的取决于你想用 PDF 做什么(从你的代码中不清楚,我猜它不仅仅是打开或创建),做某些事情 Adob​​e Pro 可能更适合,另一个可能会做某些事情更好, 等等。 例如,BYTESCOUT SDK 功能强大、易于使用并支持多种功能,如果我需要从 PDF 创建 CSV,我可以通过添加 3 行来完成 在您的代码中:

Sub JoinPDFFile(strPDFToLocation As String, strPDFTo As String, _
 strPDFFromLocation As String, strPDFFrom As String)

  Dim objAcroExchApp As Object
  Dim objAcroExchNewPDDoc As Object
  Dim objAcroExchExistPDDoc As Object
  Dim intLastPage As Integer
  Dim intNewPages As Integer
  Dim extractor As New Bytescout_PDFExtractor.CSVExtractor


  'Set objAcroExchApp = CreateObject("AcroExch.App") '<---This is the error
  'New PDF document object
  'Set objAcroExchApp = CreateObject("AcroExch.PDDoc")

  If Dir(strPDFToLocation & strPDFTo & ".pdf") = strPDFTo & ".pdf" Then
    'objAcroExchApp.Open strPDFToLocation & strPDFTo & ".pdf"
    extractor.LoadDocumentFromFile strPDFToLocation & strPDFTo & ".pdf"
    extractor.SaveCSVToFile (strPDFToLocation & strPDFTo & ".csv")
   Else
    'objAcroExchApp.Create
  End If

End Sub

谢谢

【讨论】:

    【解决方案2】:

    在这里回复: VBA: Acrobat Run time error 429; ActiveX component can't create object

    This OLE interface is available with Adobe Acrobat, not Adobe Reader.

    编辑

    尝试创建一个宏并测试它。这个对我有用。 (仅xls 文件)

    Sub PDF()
    
    Dim sPDFFileName As String
    
    sPDFFileName = ThisWorkbook.Path & "\" & "Essai.pdf"
    
    Application.ScreenUpdating = False
    
    Sheets(Array("Sheet1")).Select
    
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sPDFFileName _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
    
    Sheets("Sheet1").Select
    Application.ScreenUpdating = True
    
    End Sub
    

    【讨论】:

    • 好的,所以基本上解决方案是使用 Adob​​e Acrobat 而不是 Adob​​e Reader。我知道,所以我想问是否有办法更改代码,以便它继续前进并使用系统上的任何 PDF 阅读器打开/读取?
    • 试用 PDFCreator。我已经做了很长时间的测试,但它确实有效。
    • 测试我的宏并告诉我
    • 天哪,我的坏人,我没有看到你在评论中写了一个宏。我马上试试
    猜你喜欢
    • 1970-01-01
    • 2019-06-21
    • 2014-03-10
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2015-09-17
    • 2015-04-18
    • 1970-01-01
    相关资源
    最近更新 更多