首页 > 解决方案 > 在活动工作簿目录中从 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 中使用活动工作簿目录的提示

如何在 VBA 中获取当前工作表的路径?

并试图将其放入我的代码中:

   pdf_path = Application.ActiveWorkbook.Path
   word_path = Application.ActiveWorkbook.FullName

但错误是完全一样的。

谁能帮我?我想在存储我的活动工作簿的同一目录中将 PDF 文件转换为 docx。

更新:

当我更改Dim fo as FolderDim fo As ObjectDim fo as Scripting.Folder收到另一个错误时,通知我,该文件已损坏。调试器显示以下行:

   Set doc = wa.Documents.Open(f.Path)

在此处输入图像描述

我认为,这个问题可能出在我的 excel 文档的某个地方,该文档已经打开并使用过了。通常,代码只执行第一个工作表而不是所有工作表。

在此处输入图像描述

标签: excelvbapdfms-word

解决方案


代码可能会失败,因为 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

推荐阅读