VBA拆分PDF报错:Runtime error '-2146959355',求解决方案
VBA拆分PDF时出现"This interface is not supported"错误
问题描述
我尝试使用VBA将指定PDF文件逐页另存为单个PDF文件,现有代码如下:
Sub SplitPDF() Dim PDFPath As String Dim PDFDoc As Object Dim i As Integer 'Defina o caminho do arquivo PDF PDFPath = "C:\Users\Instruções 2061 229 revisão5_revPGM.pdf" 'Crie um objeto PDFDoc Set PDFDoc = CreateObject("AcroExch.PDDoc") 'Abra o arquivo PDF PDFDoc.Open (PDFPath) 'Itere sobre cada página e salve-a como um arquivo PDF individual For i = 0 To PDFDoc.GetNumPages() - 1 PDFDoc.SaveAs "C:\Users\arquivo_" & i + 1 & ".pdf", 1, i, i Next i 'Feche o documento PDF PDFDoc.Close End Sub
运行时抛出错误:
runtime error '-2146959355 (80080005)': This interface is not supported
已激活引用「Adobe Acrobat 10.0 Type Library」,需要解决该问题。
解决方案
错误原因是AcroExch.PDDoc的SaveAs方法不支持直接按页码范围保存单页,正确的做法是创建新的PDDoc对象,将原文档的单页复制到新文档后再保存。
修改后的代码如下:
Sub SplitPDF() Dim PDFPath As String Dim sourceDoc As AcroExch.PDDoc Dim targetDoc As AcroExch.PDDoc Dim pageNum As Integer Dim saveDir As String ' 原PDF文件路径 PDFPath = "C:\Users\Instruções 2061 229 revisão5_revPGM.pdf" ' 单页PDF的保存目录(请确保该目录已存在) saveDir = "C:\Users\" ' 初始化源文档对象 Set sourceDoc = New AcroExch.PDDoc If Not sourceDoc.Open(PDFPath) Then MsgBox "无法打开指定的PDF文件" Exit Sub End If ' 遍历源文档的每一页 For pageNum = 0 To sourceDoc.GetNumPages() - 1 ' 创建新的空白目标文档 Set targetDoc = New AcroExch.PDDoc targetDoc.Create ' 将源文档的当前页插入到目标文档中 If Not targetDoc.InsertPages(targetDoc.GetNumPages() - 1, sourceDoc, pageNum, 1, 0) Then MsgBox "复制第" & pageNum + 1 & "页失败" targetDoc.Close GoTo Cleanup End If ' 保存单页PDF文件 If Not targetDoc.Save(PDSaveFull, saveDir & "arquivo_" & pageNum + 1 & ".pdf") Then MsgBox "保存第" & pageNum + 1 & "页失败" End If ' 关闭当前目标文档 targetDoc.Close Next pageNum MsgBox "PDF拆分完成" Cleanup: ' 释放资源 sourceDoc.Close Set sourceDoc = Nothing Set targetDoc = Nothing End Sub
关键要点:
- 使用
InsertPages方法实现单页复制,这是Acrobat Type Library支持的标准分页方式。 - 替换
SaveAs为Save方法,搭配PDSaveFull参数(数值1)完成保存操作。 - 添加了文件打开、页面复制、保存的错误检查,避免程序异常崩溃。
- 确保保存目录已存在,否则会导致保存失败。
内容的提问来源于stack exchange,提问作者Jefferson Poletto
相关产品推荐
相关产品推荐

