首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在活动工作簿目录中从PDF转换为Word

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

Stack Overflow用户
提问于 2020-08-19 09:14:53
回答 1查看 209关注 0票数 1

早上好,

我想使用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/

但问题是,该示例基于某些单元格,包括固定的文件目录:

代码语言:javascript
复制
  pdf_path = sh.Range("E4").Value
  word_path = sh.Range("E5").Value

我希望始终拥有与我正在工作的活动工作簿相同的目录。

在这种情况下,我尝试了以下代码:

代码语言:javascript
复制
    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

我收到一个错误“类型错配”,指向以下一行:

代码语言:javascript
复制
   Set fo = fso.GetFolder(pdf_path)

我找到了一些关于在VBA中使用活动工作簿目录的提示。

How to get the path of current worksheet in VBA?

试着把它写进我的代码里:

代码语言:javascript
复制
   pdf_path = Application.ActiveWorkbook.Path
   word_path = Application.ActiveWorkbook.FullName

但是错误是完全一样的。

有谁可以帮我?我希望将PDF文件转换为存储活动工作簿的同一个目录中的docx。

更新:

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

代码语言:javascript
复制
   Set doc = wa.Documents.Open(f.Path)

我想,这个问题可能与我的excel文档有关,因为excel文档已经打开并使用了。通常,代码只执行第一个工作表,而不是所有的工作表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 09:53:54

代码可能会失败,因为ActiveWorkbook.Path包含一些无效的内容:

如果ActiveWorkbook是一个尚未保存的新工作簿,则Path为空-您将得到运行时错误5(无效参数)。

如果ActiveWorkbook位于共享点站点或类似的站点上,Path可能是一个URL --您将得到运行时错误76 (路径未找到)

但是,在您的示例中,GetFolder-method的返回对象似乎返回了一些VBA运行时不需要的内容。可能的情况是,在某个地方有一个类型定义Folder,它隐藏了脚本库的Folder-type。声明您的变量合格:

代码语言:javascript
复制
Dim fo as Scripting.Folder

对所有其他脚本对象(例如f)执行此操作

如果添加对Microsoft Word 16 Object Library的引用,还可以声明具有正确类型的单词对象,例如

代码语言:javascript
复制
Dim wa as Word.Application
Dim doc as Word.Document

Update:如果循环遍历文件夹的所有文件,请确保只打开带有Word.Application的Word文件。打开其他类型的文件会引发错误,比如您看到的错误(可能是损坏的)。

在打开文件类型之前添加一个文件类型检查--您只想转换word文件:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63483739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档