vba将文件夹中的多个pdf转换为文本文件
我试图运行vba将一个文件夹中的多个pdf文件转换为另一个文件夹中的txt文件。但是,我遇到了以下无法解决的错误 错误位于Set jsObj=AcroXPDDoc.GetJSObject,这给了我一个运行时错误91:“未设置对象变量或带块变量” 有人能帮忙吗? 谢谢 :使用新代码更新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
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