我正在尝试使用VBA在Word中复制表格行,不使用选择对象或剪贴板。也就是说,我想要一个新的行,其内容与现有行相同。
为此,我首先创建一个新的(空)行,并循环遍历源行中的每个单元格,并将其内容复制到目标行中相应的单元格中。
要复制每个单元格,我获取一个引用源单元格整个内容的
这在Office 2003上运行得很好,在Office 2010上大多数情况下也能运行。但是,我在一个特定的场景中遇到了一个真正的问题。我已经(大大)简化了这个场景,以展示问题的核心。
在下面的图片中,外部(灰色的)2R x 1C表中有两个单元格。第二行是要复制的行。第一行是我创建的新行,我想将第二行的内容复制到其中。
你会注意到,第二行包含一个嵌套表格。
当我在Word 2003中运行下面的代码时,它完美地工作,我得到以下结果:
但是,在Word 2010中,同样的代码产生了这个结果:
正如你所看到的,单元格内容被插入到目标表格单元格的前面(和外部)。
值得一提的是,如果我在嵌套表格后面放置一些东西,使其不再是源单元格中的最后一件事,那么这个问题就不会发生。
这是我使用的完整VBA代码:
为此,我首先创建一个新的(空)行,并循环遍历源行中的每个单元格,并将其内容复制到目标行中相应的单元格中。
要复制每个单元格,我获取一个引用源单元格整个内容的
Range
对象,以及目标单元格的等效Range
,然后执行以下操作:oToRange.FormattedText = oFromRange.FormattedText
这在Office 2003上运行得很好,在Office 2010上大多数情况下也能运行。但是,我在一个特定的场景中遇到了一个真正的问题。我已经(大大)简化了这个场景,以展示问题的核心。
在下面的图片中,外部(灰色的)2R x 1C表中有两个单元格。第二行是要复制的行。第一行是我创建的新行,我想将第二行的内容复制到其中。
你会注意到,第二行包含一个嵌套表格。
当我在Word 2003中运行下面的代码时,它完美地工作,我得到以下结果:
但是,在Word 2010中,同样的代码产生了这个结果:
正如你所看到的,单元格内容被插入到目标表格单元格的前面(和外部)。
值得一提的是,如果我在嵌套表格后面放置一些东西,使其不再是源单元格中的最后一件事,那么这个问题就不会发生。
这是我使用的完整VBA代码:
Dim oDoc As Word.Document
Set oDoc = ThisDocument
Dim oFromRange As Range
Set oFromRange = ThisDocument.Tables(1).Cell(2, 1).Range
oFromRange.End = oFromRange.End - 1
Dim oToRange As Range
Set oToRange = ThisDocument.Tables(1).Cell(1, 1).Range
oToRange.End = oToRange.End - 1
oToRange.FormattedText = oFromRange.FormattedText
注意:需要调整源和目标范围的末尾,因为Cell.Range
包括单元格结束标记,我不想复制它。
我该怎么做才能说服它将内容放在目标单元格内(就像Word 2003一样),而不是在它之前呢?