VBA Excel.xlsx(.xlsm)到.docx的转换

VBA Excel.xlsx(.xlsm)到.docx的转换,excel,vba,pdf,ms-word,Excel,Vba,Pdf,Ms Word,下午好 我想将.xslx文件转换为word。因为我需要准确地获取所有内容(我有27张带有标签、选项卡、图像等的表单),所以我决定先将其保存为PDF文档,这样效果很好。之后,我希望将其转换为.docx文件,因为PDF到docx的转换也保留了所有这些功能。 因为PDF将每个工作表视为一个单独的页面,所以我希望它在Word中完全相同,所有内容都保持原始excel文档的完整性 我在这里找到了很好的PDF到DOCX转换指南 按照所有这些步骤,我已经使代码正常工作了。 但是,接下来,当我尝试将此代码与另

下午好

我想将.xslx文件转换为word。因为我需要准确地获取所有内容(我有27张带有标签、选项卡、图像等的表单),所以我决定先将其保存为PDF文档,这样效果很好。之后,我希望将其转换为.docx文件,因为PDF到docx的转换也保留了所有这些功能。

因为PDF将每个工作表视为一个单独的页面,所以我希望它在Word中完全相同,所有内容都保持原始excel文档的完整性

我在这里找到了很好的PDF到DOCX转换指南

按照所有这些步骤,我已经使代码正常工作了。 但是,接下来,当我尝试将此代码与另存XLSX为PDF宏组合时,我遇到了一个错误:类型不匹配,指示以下行:

  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示例适用于固定文件夹。在我的例子中,我需要与我正在处理的活动工作表相同的目标目录。如何才能使此代码成功?我想,我已经非常接近解决方案了。

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

  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
  

如果fso.GetExtensionName=“pdf”,那么-argument not optional它的解决方案是什么?