粘贴时丢失表格样式

时间:2018-01-16 16:07:00

标签: vba word-vba

我正在尝试将表格单元格中的文本复制到新文档中。一切正常,但粘贴的文本已丢失复制文本的样式。样式是一种新的段落样式,带有一些常规的格式选择,例如字体类型,字体大小和文本缩进。要粘贴我使用...

Documents.Add.Content.PasteAndFormat (wdFormatOriginalFormatting)

我想我知道问题所在。如果我复制整个表格单元格并粘贴,它将使格式化文本保持所有段落的正确样式。但它会将其粘贴到表格单元格中,我只想要没有表格的文本。

因此我在复制时排除了“表格单元格结束标记(看起来像太阳)”。然后它只会粘贴文本(没有表格,因为我不想这样做),但最后一段失去了风格。

如果我站在表格单元格的末尾添加一个额外的段落标记(按Enter键)并复制没有“表格单元格结束标记”的单元格,它就像我不想做的那样......差不多。目标文档没有表格(是的!),所有段落都有正确的样式(是!),但最后还有一个不需要的额外段落标记。当然,表格单元格中还有一个不需要的额外空段落。

有任何建议如何解决?

1 个答案:

答案 0 :(得分:1)

首先,如果没有其他选择,你应该只使用复制/粘贴。为此,Range.FormattedText属性可以工作,因此不需要复制/粘贴。

由于你没有给出好的重复步骤,我不确定以下是否完全正确,但它适用于我测试的场景。我在文档中创建了一个表。我想在另一个文档中重用的文本位于第一行的第二个单元格中(Cell(1,2))。我创建了一个段落样式并将其应用于单元格。我使用单元格范围来获取此内容,并获取范围中的字符数。

然后我将Range.FormattedText分配给新文档的Content.FormattedText。如你所说,这带来了一个Chr(13),所以我从文本中删除了那个字符(inumchars-1)。原始样式被带入目标文档,只有一个段落标记(并且使用导入的样式进行格式化,应该如此)。

Sub CellContentToNewDoc()
    Dim rng As word.Range
    Dim rngNew As word.Range
    Dim newDoc As word.Document
    Dim lNumChars As Long

    Set rng = ActiveDocument.Tables(1).Cell(1, 2).Range
    inumchars = Len(rng)

    Set newDoc = Documents.Add
    Set rngNew = newDoc.content
    rngNew.FormattedText = rng.FormattedText
    rngNew.Characters(inumchars - 1).Delete
End Sub