首先,我通过用户表单上的按钮将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)的格式。 有很多的网上资料,但我没有找到一个可能是有益的。
答案 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