【问题标题】:merge word documents合并word文档
【发布时间】:2020-02-28 19:09:59
【问题描述】:

我正在尝试将 6 个文档(在一个文件夹中)粘贴/合并到一个包含所有这些文档的新文档中。 VBA 代码应该从创建所有文档的 Excel 模板运行,然后应该通过宏合并在一起。

但是,我明白了

运行时错误 438:对象不支持此属性或方法

每次我尝试运行InsertFile 行。我猜问题在于从 Excel 到 Word VBA 的过渡(?)

有什么想法或想法吗?

  Sub MergeALL()
       Dim objWord
       Dim objDoc
       Set objWord = CreateObject("Word.Application")
       Set objDoc = objWord.Documents.Add
       objWord.Visible = True

'opens a new word document
Documents.Add
Dir "\\rz_sixt\user\Home\Pictures" 'change to OutputFilePath ?
MyName = Dir("*.docx")
While MyName <> ""
 With Selection
 .InsertFile Filename:=MyName, ConfirmConversions:=False, Link:=False, Attachment:=False
 .InsertParagraphAfter
 .InsertBreak Type:=wdSectionBreakNextPage
 .Collapse Direction:=wdCollapseEnd
 End With
 MyName = Dir()
Wend
End Sub

【问题讨论】:

  • Selection 在 Word 和 Excel 中完全不同,因此请尝试使用 objWord.Selection
  • 您好 Asger,感谢您的回答。我将其更改为 objWord.Selection,现在出现错误:文档路径或名称无效。

标签: excel vba ms-word


【解决方案1】:

当您遍历Dir 找到的所有文档时,
你必须再次添加文件路径,当你InsertFile每个文件时:

Sub MergeALL()
    Dim objWord As Object
    Dim objDoc As Object
    Dim myPath As String, myFile As String

    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True

    Set objDoc = objWord.Documents.Add
    myPath = "\\rz_sixt\user\Home\Pictures\"
    myFile = Dir(myPath & "*.docx", vbNormal + vbReadOnly + vbHidden)
    While myFile <> ""
        With objDoc.Bookmarks("\StartOfDoc").Range
            .InsertFile Filename:=myPath & myFile, _
                ConfirmConversions:=False, Link:=False, Attachment:=False
            .InsertBreak Type:=2    ' wdSectionBreakNextPage = 2
        End With
        myFile = Dir()
    Wend
    objDoc.Characters(1).Delete
End Sub

如果您添加对“Microsoft Word x.x 对象库”的引用以进行早期绑定,则可以使用 ENUM 值,如wdCollapseEnd,否则使用其对应值。

【讨论】:

  • 非常感谢,您的代码有效!但是,它现在以相反的顺序插入文档:首先插入 5.docx,然后插入 4.docx 等。你知道我怎样才能颠倒订单吗?其次,我现在在我的文档末尾有一个空页面,我想避免(由于分页符)。如果所有文档都已插入,是否可以避免这个空白页面?
  • 我编辑了我的答案:现在它添加了一个分页符,并且找到的文档总是在开头。最后它会删除第一个字符(这是不必要的分页符)。
  • 谢谢。唯一困扰我的是,如果文档以不同的名称保存(但在同一个文件夹中),代码将不再识别它们。是否可以查找所有docx。文件,与他们的名字无关?
  • Dir-Function 应该可以找到所有文件,但也可以查找只读或隐藏文件,所以我添加了一个示例来查找这些文件。如果仍未找到,则说明您的文件共享已被缓存。
  • 由于Dir不能保证任何排序顺序,您可以在插入文件之前将其输出排序到一个列表中,请看这里:stackoverflow.com/q/4282940/10908769
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多