使用 excel 宏打印为 PDF 时出错。仅适用于实际的 Adobe,不适用于 Adobe Reader
Error when Printing to PDF with excel macros. Will only work with actual Adobe and not Adobe Reader
我有这个 Excel sheet 可以合并一堆报告并将它们打印成 PDF。当我在安装了实际 Adobe 软件的电脑上时,代码工作正常。我尝试在我的个人笔记本电脑上使用它,它只有一个 adobe reader 并且宏崩溃了:
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 文件 reader?
我尝试在上面使用 On Error Resume Next,它所做的只是放弃整个过程,只打印第一页,而应该有 20 页。
有没有一种方法可以简化整个代码,使其生成 PDF 文件而不取决于我是否有 Adobe?所以即使你使用 Foxit、Dejvu 等。它仍然有效吗?
此处回复:
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
Excel 不需要任何特定的库就可以 ExportAsFixedFormat Type:=xlTypePDF
但要使用
AcroExch.App 需要 Adobe Pro。所以这真的取决于你想用 PDF 做什么(从你的代码中不清楚,我想它不仅仅是打开或创建),做某些事情 Adobe Pro 可能更适合,另一个可能做某些事情更好, ETC。
例如,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
谢谢
我有这个 Excel sheet 可以合并一堆报告并将它们打印成 PDF。当我在安装了实际 Adobe 软件的电脑上时,代码工作正常。我尝试在我的个人笔记本电脑上使用它,它只有一个 adobe reader 并且宏崩溃了:
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 文件 reader?
我尝试在上面使用 On Error Resume Next,它所做的只是放弃整个过程,只打印第一页,而应该有 20 页。
有没有一种方法可以简化整个代码,使其生成 PDF 文件而不取决于我是否有 Adobe?所以即使你使用 Foxit、Dejvu 等。它仍然有效吗?
此处回复:
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
Excel 不需要任何特定的库就可以 ExportAsFixedFormat Type:=xlTypePDF
但要使用
AcroExch.App 需要 Adobe Pro。所以这真的取决于你想用 PDF 做什么(从你的代码中不清楚,我想它不仅仅是打开或创建),做某些事情 Adobe Pro 可能更适合,另一个可能做某些事情更好, ETC。
例如,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
谢谢