【问题标题】:VBA Excel .xlsx (.xlsm) to .docx conversionVBA Excel .xlsx (.xlsm) 到 .docx 的转换
【发布时间】:2020-12-07 20:15:23
【问题描述】:

下午好,

我想将 .xslx 文件转换成 word。因为我需要准确地获取所有内容(我有 27 张带有标签、标签、图像等的工作表),所以我决定先将其保存为 PDF 文档,这样可以正常工作。之后我想把它转换成 .docx 文件,因为 PDF 到 DOCX 的转换也保留了所有这些功能。

因为 PDF 将每个工作表都视为单页,所以我希望它在 Word 中完全一样,而原始 excel 文档中的所有内容都保持不变。

我在这里找到了不错的 PDF 到 DOCX 转换指南

https://www.youtube.com/watch?v=Op25fUfvIl0

并遵循所有这些步骤,我已使此代码正常工作。 然而接下来,当我将这段代码与保存为 PDF 宏的 XLSX 结合起来时,我遇到了一个错误:类型不匹配,指示以下行:

  Set fo = fso.GetFolder(pdf_path)

而我的完整代码如下所示:

  Sub xlstodoc()

 'SAVING XLSM FILE AS PDF

ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    ThisWorkbook.Path & "\" & ThisWorkbook.Name, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=True
    
    
    
'CONVERTING PDF FILE INTO DOCX
    
    
  Dim fso As New FileSystemObject
  Dim fo As Folder
  Dim f As File

  Dim wa As New Word.Application
  Dim doc As Word.Document

  wa.Visible = True

  Dim pdf_path As String
  Dim word_path As String

  pdf_path = ThisWorkbook.Path & "\" '& ThisWorkbook.Name & ".pdf"
  word_path = ThisWorkbook.Path & "\"

  Set fo = fso.GetFolder(pdf_path)

  For Each f In fo.Files

    Set doc = wa.Documents.Open(f.Path)
    doc.SaveAs2 (word_path & "\" & Replace(f.Name, ".pdf", ".docx"))
    doc.Close False
    
  Next

  wa.Quit

  Application.StatusBar = ""

  MsgBox "All done"


  Sheets("Frontsheet").Select

  End Sub

Youtube 示例适用于固定文件夹。就我而言,我需要与我正在处理的活动工作表相同的目标目录。如何使此代码成功?我认为,我非常接近解决方案。

【问题讨论】:

    标签: excel vba pdf ms-word


    【解决方案1】:

    我猜您引用了另一个具有文件夹对象的库。完全限定您的类型应该可以解决问题。

      Dim fso As New Scripting.FileSystemObject
      Dim fo As Scripting.Folder
      Dim f As Scripting.File
    

    您可以完全消除fo 对象:

      For Each f In fso.GetFolder(pdf_path).Files
        If fso.GetExtensionName(f) = "pdf" Then
            Set doc = wa.Documents.Open(f.Path)
            doc.SaveAs2 (word_path & "\" & Replace(f.Name, ".pdf", ".docx"))
            doc.Close False
        End If
      Next
      
    

    【讨论】:

    • If fso.GetExtensionName = "pdf" Then - 参数不是可选的
    • 解决办法是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多