早上好,
我想使用Excel宏将PDF文件转换为Word one (从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文档有关,因为excel文档已经打开并使用了。通常,代码只执行第一个工作表,而不是所有的工作表。

发布于 2020-08-19 09:53:54
代码可能会失败,因为ActiveWorkbook.Path包含一些无效的内容:
如果ActiveWorkbook是一个尚未保存的新工作簿,则Path为空-您将得到运行时错误5(无效参数)。
如果ActiveWorkbook位于共享点站点或类似的站点上,Path可能是一个URL --您将得到运行时错误76 (路径未找到)
但是,在您的示例中,GetFolder-method的返回对象似乎返回了一些VBA运行时不需要的内容。可能的情况是,在某个地方有一个类型定义Folder,它隐藏了脚本库的Folder-type。声明您的变量合格:
Dim fo as Scripting.Folder对所有其他脚本对象(例如f)执行此操作
如果添加对Microsoft Word 16 Object Library的引用,还可以声明具有正确类型的单词对象,例如
Dim wa as Word.Application
Dim doc as Word.DocumentUpdate:如果循环遍历文件夹的所有文件,请确保只打开带有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 fhttps://stackoverflow.com/questions/63483739
复制相似问题