在活动工作簿目录中从PDF转换为Word

时间:2020-08-19 09:14:53

标签: excel vba pdf ms-word

早上好

我想使用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 ObjectDim fo as Scripting.Folder时,出现另一个错误,通知我该文件已损坏。调试器显示以下行:

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

enter image description here

我认为,该问题可能存在于我已打开并使用过的excel文档中。通常,代码仅执行第一张表,而不是全部执行。

enter image description here

1 个答案:

答案 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