excel - 在活动工作簿目录中从 PDF 转换为 Word
问题描述
早上好,
我想使用 Excel 宏将 PDF 文件转换为 Word 一(从 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 中使用活动工作簿目录的提示
并试图将其放入我的代码中:
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 文档的某个地方,该文档已经打开并使用过了。通常,代码只执行第一个工作表而不是所有工作表。
解决方案
代码可能会失败,因为 ActiveWorkbook.Path 包含无效的内容:
如果 ActiveWorkbook 是尚未保存的新工作簿,Path
则为空 - 您将收到运行时错误 5(无效参数)
如果 ActiveWorkbook 位于 Sharepoint 站点或类似站点上,则Path
可能是 URL - 您将收到运行时错误 76(找不到路径)
但是,在您的情况下,-method 的返回对象似乎GetFolder
返回了 VBA 运行时不期望的内容。可能是您在Folder
某处有一个隐藏Folder
脚本库的 -type 的类型定义。声明您的变量合格:
Dim fo as Scripting.Folder
对所有其他脚本对象执行此操作(f
例如)
如果添加对 的引用Microsoft Word 16 Object Library
,还可以使用正确的类型声明单词 objects,例如
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
推荐阅读
- rust - 没有外部板条箱拍手 - clap-v3 生锈错误
- apple-developer - 在为商店分发创建新应用程序时无法选择我的应用程序的捆绑 ID
- c# - 如何为 ReadAsStringAsync 编写单元测试
- c# - 为什么我收到错误消息 RuntimeBinderException:无法对空引用执行运行时绑定
- c++ - 如何使用 node 和 ffi-napi 从 c++ dll 接收字符串?
- laravel - 如何在 laravel 中设置自定义域
- python - 如何从用空格和逗号分隔的字符串中提取数字并接收列表列表?
- python - Python 跟踪不会在 jupyter 笔记本中跟踪
- c++ - 运行时加载的共享库中的未定义符号错误
- c# - Asp.net Core 3.1-如何从控制器返回到 Razor 页面?