在不更改VBA格式的情况下将Word文档插入另一个Word文档

时间:2019-02-02 19:07:40

标签: vba ms-word format

首先,我通过用户表单上的按钮将Word文档doc1复制到具有其格式的新Word文档中。其次,我在这个word文档的末尾(用doc1填充)插入一个新的word文档doc2(doc1和doc2得到了文本,表格和各种颜色)。每次我在另一个用户表单上按下按钮以放置doc2时,都会丢失doc2的格式。

这是我的代码:

Dim docSource As Document
Dim docTarget As Document
Set docTarget = ActiveDocument
Set docSource = Documents.Open(strFilename)
' Add the content of docSource to docTarget
docTarget.Range.Collapse Direction:=wdCollapseEnd
docTarget.Content.InsertAfter (docSource.Range.FormattedText)
docSource.Close (0)

我只是不想丢失来自另一个Word文档(doc2)的格式。 有很多的网上资料,但我没有找到一个可能是有益的。

2 个答案:

答案 0 :(得分:4)

FWIW将一个文档插入另一个文档最直接的方法是使用InsertFile方法,这样甚至不需要打开要插入的文档。

问题中方法的问题是这个

docTarget.Content.InsertAfter (docSource.Range.FormattedText)

必须在两边都使用FormattedText属性。最好至少在“目标”端使用Range对象,因为InsertAfter无法与FormattedText一起使用。 (CollapseEnd在问题代码中不做任何事情,因为它没有应用于独立的Range对象。)

以下应该可以工作

Dim rngTarget as Word.Range
Set rngTarget = docTarget.Content
rngTarget.Collapse wdCollapseEnd
rngTarget.FormattedText = docSource.Content.FormattedText

这将比使用Selection更快,并且屏幕不会“闪烁”。它还将使用户的剪贴板完整无缺。

只有Selection.Copy是需要使用文档属性的时候,才是正确的选择:页眉,页脚,页面大小等。FormattedText不会复制节级属性,仅复制Range属性。

答案 1 :(得分:0)

您应该尝试使用特殊复制和粘贴:

尝试以下操作:

    Sub PasteWithFormat()

        Dim docSource As Document
        Dim docTarget As Document
        Set docTarget = ActiveDocument
        Set docSource = Documents.Open(strFileName)

        docSource.Select
        Selection.HomeKey Unit:=wdStory
        Selection.EndKey Unit:=wdStory, Extend:=wdExtend
        Selection.Copy
        docTarget.Select
        Selection.EndKey Unit:=wdStory
        Selection.PasteAndFormat (wdPasteDefault)

        docSource.Close

        Set docSource = Nothing
        Set docTarget = Nothing
    End Sub