vba将文件夹中的多个pdf转换为文本文件

vba将文件夹中的多个pdf转换为文本文件,vba,pdf,text-files,Vba,Pdf,Text Files,我试图运行vba将一个文件夹中的多个pdf文件转换为另一个文件夹中的txt文件。但是,我遇到了以下无法解决的错误 错误位于Set jsObj=AcroXPDDoc.GetJSObject,这给了我一个运行时错误91:“未设置对象变量或带块变量” 有人能帮忙吗? 谢谢 :使用新代码更新 Option Explicit Sub convertpdf5() Dim AcroXApp As Acrobat.acroApp Dim AcroXAVDoc As Acrobat.AcroAVDoc

我试图运行vba将一个文件夹中的多个pdf文件转换为另一个文件夹中的txt文件。但是,我遇到了以下无法解决的错误

错误位于Set jsObj=AcroXPDDoc.GetJSObject,这给了我一个运行时错误91:“未设置对象变量或带块变量”

有人能帮忙吗? 谢谢

:使用新代码更新

Option Explicit

Sub convertpdf5()

 Dim AcroXApp As Acrobat.acroApp
 Dim AcroXAVDoc As Acrobat.AcroAVDoc
 Dim AcroXPDDoc As Acrobat.AcroPDDoc
 Dim Filename As Variant
 Dim jsObj As Object
 Dim sfolder As String
 Dim dfolder As String
 Dim spath As String
 Dim dpath As String
 Dim SFilename As Variant
 Dim DFilename As Variant
 Dim objFolder As folder
 Dim objFile As file
 Dim NextRow As Long

sfolder = "C:\users\chanhc\desktop\test folder\"
spath = sfolder & "*.pdf"
SFilename = Dir(spath)

dfolder = "C:\users\chanhc\desktop\test folder after\"
dpath = dfolder & "*.txt"
DFilename = Dir(dpath)

'Creating a FileSystemObject
Dim fso As New FileSystemObject
'Specify the path of the folder
'Create the object of this folder
Set objFolder = fso.GetFolder(sfolder)
'Check if the folder is empty or not
If objFolder.Files.count = 0 Then
  MsgBox "No files were found...", vbExclamation
  Exit Sub

End If

NextRow = ActiveSheet.Cells(Rows.count, "A").End(xlUp).Row + 1

For Each objFile In objFolder.Files

Cells(NextRow, 1).Value = sfolder & objFile.Name

NextRow = NextRow + 1

Next objFile

For Each Filename In Sheet1.Range("a2:a4")

 Set AcroXApp = CreateObject("AcroExch.App")
 'AcroXApp.Show
 Set AcroXAVDoc = CreateObject("AcroExch.AVDoc")
 AcroXAVDoc.Open Filename, "Acrobat"
 Set AcroXPDDoc = AcroXAVDoc.GetPDDoc
 Set jsObj = AcroXPDDoc.GetJSObject
 jsObj.SaveAs DFilename, "com.adobe.acrobat.plain-text"


 AcroXAVDoc.Close False
 AcroXApp.Hide
 AcroXApp.Exit

Next Filename

End Sub

我想我开始理解你的问题了,这与Adobe无关。列出文件的代码工作不正常

首先,您结合了两种不同的列出文件的方法。(
Dir
FileSystemObject
s未一起使用

还有,为什么要在工作表上列出文件,然后从工作表中获取名称

我错误地认为您遵循了.A最小、完整且可验证的示例


如果代码中的某个部分出现问题,则需要从头开始

创建一个新程序,只添加查看问题所需的内容。对于您认为已经知道问题根源的大型系统,这可以更快

因此,首先看看转换PDF的代码是否能够自行工作:

Sub ONLYConvertPDF()

    Dim AcroXApp As Acrobat.acroApp
    Dim AcroXAVDoc As Acrobat.AcroAVDoc
    Dim AcroXPDDoc As Acrobat.AcroPDDoc

    Dim Filename As String, DFilename As String, jsObj As Object

    Filename = "C:\users\chanhc\desktop\test folder\__ENTER_FILENAME__.PDF"  '<<ENTER A FILEMNAME HERE
    DFilename = "C:\users\chanhc\desktop\test folder after\TEST_OUTPUT_FILE.TXT"
    Set AcroXApp = CreateObject("AcroExch.App")
    AcroXApp.Show  
    Set AcroXAVDoc = CreateObject("AcroExch.AVDoc")
    AcroXAVDoc.Open Filename, "Acrobat"
    Set AcroXPDDoc = AcroXAVDoc.GetPDDoc
    Set jsObj = AcroXPDDoc.GetJSObject
    jsObj.SaveAs DFilename, "com.adobe.acrobat.plain-text"

    AcroXAVDoc.Close False
    AcroXApp.Hide
    AcroXApp.Exit

End Sub
一旦该部分自身正常工作,就可以将这两段代码添加到一起


一旦上述过程正确地列出了源和目标,我们就可以考虑将它们放在一起

我认为,实际上,为了保持这些漂亮、整洁的过程分开,让我们将第一个过程更改为:

它将是独立的,并接受sFile和dFile的参数,我们可以在每次转换文件时调用它

Sub ConvertOnePDF(sFile As String, dFile As String)

    Dim AcroXApp As Acrobat.acroApp, AcroXAVDoc As Acrobat.AcroAVDoc
    Dim AcroXPDDoc As Acrobat.AcroPDDoc, jsObj As Object

    Set AcroXApp = CreateObject("AcroExch.App")
    'AcroXApp.Show
    Set AcroXAVDoc = CreateObject("AcroExch.AVDoc")
    AcroXAVDoc.Open sFile, "Acrobat"
    Set AcroXPDDoc = AcroXAVDoc.GetPDDoc
    Set jsObj = AcroXPDDoc.GetJSObject
    jsObj.SaveAs dFile, "com.adobe.acrobat.plain-text"

    AcroXAVDoc.Close False
    AcroXApp.Hide
    AcroXApp.Exit

End Sub

一旦这两个过程开始工作,就可以将其添加到
Test_Listfiles
中的MsgBox下:

ConvertOnePDF sName, dName

应该是这样的!

首先将
选项Explicit
放在模块顶部,然后编译(F9)确保所有内容都正确声明。另外,读卡器是否打开可见?您确定它打开的文件正确吗?请在导致错误的行前面加一行
MsgBox fileName
进行确认,新代码如下,但仍显示相同的消息。
MsgBox
显示错误时会说什么在错误发生之前,ps up?(我正在尝试确认您的文件名在变量中是否正确。)当我删除文件夹中的文件时,msgbox会工作。因此,对于编码的第一部分,它工作得很好。.ashleedawg,感谢您花时间详细解释。.我已经尝试了将pdf转换为文本的部分,它工作得很好。.那么如何从这里排除故障?请参阅我的答案。现在您尝试列出文件(不转换pdf)非常感谢!这两个代码工作得很好,我设法在另一列中列出了该文件!但是我如何合并它们才能工作呢?我没有做到。。
ConvertOnePDF sName, dName