早上好
我想使用Excel宏将PDF文件转换为Word 1(从PDF转换为DOCX)。
到目前为止,我已经从该视频中学到了这一过程:
https://www.youtube.com/watch?v=Op25fUfvIl0
和此链接:
https://www.pk-anexcelexpert.com/pdf-to-word-converter-macro-in-excel-vba/
但是问题是,该示例基于某些单元格,包括固定文件目录:
pdf_path = sh.Range("E4").Value
word_path = sh.Range("E5").Value
我希望始终将目录与我正在工作的活动工作簿相同。
在这种情况下,我尝试了以下代码:
Sub Wort_To_PDF()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.DisplayStatusBar = True
Dim pdf_path As String
Dim word_path As String
pdf_path = ThisWorkbook.Path & "\"
word_path = ThisWorkbook.Path & "\"
Dim fso As New FileSystemObject
Dim fo As Folder
Dim f As File
Set fo = fso.GetFolder(pdf_path)
Dim wa As Object
Dim doc As Object
Set wa = CreateObject("word.application")
wa.Visible = True
Dim file_Count As Integer
For Each f In fo.Files
Application.StatusBar = "Converting - " & file_Count + 1 & "/" & fo.Files.Count
Set doc = wa.Documents.Open(f.Path)
doc.SaveAs2 (word_path & "\" & Replace(f.Name, ".pdf", ".docx"))
doc.Close False
file_Count = file_Count + 1
Next
wa.Quit
MsgBox "All PDF files have been converted in to word", vbInformation
Application.StatusBar = ""
End Sub
我遇到错误“ 类型不匹配”,指向以下行:
Set fo = fso.GetFolder(pdf_path)
我发现了一些有关在VBA中使用活动工作簿目录的提示
How to get the path of current worksheet in VBA?
并尝试将其放入我的代码中
pdf_path = Application.ActiveWorkbook.Path
word_path = Application.ActiveWorkbook.FullName
但错误完全相同。
有人可以帮助我吗?我想将PDF文件转换为存储活动工作簿的目录中的docx。
更新:
当我将Dim fo as Folder
更改为Dim fo As Object
或Dim fo as Scripting.Folder
时,出现另一个错误,通知我该文件已损坏。调试器显示以下行:
Set doc = wa.Documents.Open(f.Path)
我认为,该问题可能存在于我已打开并使用过的excel文档中。通常,代码仅执行第一张表,而不是全部执行。
答案 0 :(得分:2)
代码可能会失败,因为ActiveWorkbook.Path包含无效的内容:
如果ActiveWorkbook是尚未保存的新工作簿,则Path
为空-您将收到运行时错误5(无效参数)
如果ActiveWorkbook在Sharepoint网站上或类似的网站上,则Path
可能是URL-您将收到运行时错误76(找不到路径)
但是,在您的情况下,似乎GetFolder
方法的返回对象返回的内容不是VBA运行时所期望的。在某些情况下,您可能在某个类型定义Folder
中隐藏了脚本库的Folder
类型。声明您的变量合格:
Dim fo as Scripting.Folder
对所有其他脚本对象(例如f
)这样做
如果您添加对Microsoft Word 16 Object Library
的引用,则还可以使用正确的类型声明单词对象,例如
Dim wa as Word.Application
Dim doc as Word.Document
更新:如果您遍历文件夹的所有文件,请确保仅使用Word.Application打开Word文件。打开其他类型的文件会引发类似您看到的错误(可能已损坏)
在打开文件类型之前先对其进行检查-您只想转换word文件:
For Each f In fo.Files
if fso.GetExtensionName(f.Name) like "doc*" Then
Set doc = wa.Documents.Open(f.Path)
doc.SaveAs2 (word_path & "\" & Replace(f.Name, ".pdf", ".docx"))
doc.Close False
file_Count = file_Count + 1
End If
Next f