我正在VBA中构建Word文档。我逐行添加一个表格;完成后,我想插入一个空白行/段落,然后启动一个新表。但是,当我在表格后面添加段落时,插入点出现在段落标记之前,因此下一个表格将添加到该位置,并成为第一个表格的一部分。
Set HeaderTableId = WordDoc.Tables.Add(Range:=wrdSel.Range, numcolumns:=3, numrows:=1, AutoFitBehavior:=wdWord9TableBehavior)
Set RowId = HeaderTableId.Rows(1)
RowId.Cells(1) = LeftHeader
RowId.Cells(2).Range.Font.Bold = True
RowId.Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
RowId.Cells(2) = CentreHeader
RowId.Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
RowId.Cells(3) = RightHeader
' (this table only has one row)
With HeaderTableId.Range
.Collapse (WdCollapseDirection.wdCollapseEnd)
.Move Unit:=wdCharacter, Count:=3
.Select
.InsertParagraph
End With
最终的.InsertParagraph可以在表格后正确插入空白段落,但是插入点则在段落标记之前。 我也尝试过插入分页符,但是有同样的问题。我不知道如何将插入点移到末尾。
答案 0 :(得分:0)
为了测试,我不得不“充实”您的代码-我在下面粘贴了整个测试代码。
在第一个表之后插入第二个表的关键,以段落标记分隔以确保两个表不会合并:
有必要折叠表Range
两次:在插入新段落之前和之后一次。
问题中的代码使用.Move
,尚不清楚Range
的更改方式。如果要使用“移动”,我将使用.MoveStart
,它将使收缩范围保持收缩,但是对于这个问题,我更喜欢Collapse
。 (还有MoveEnd
,它将扩展折叠范围以包括内容。)
我的版本也有不同之处:
InsertAfter vbCr
插入新段落-同样,个人喜好:我一直知道插入的内容是Range
对象的一部分。有时,使用Insert方法,新内容可能不属于Range
的一部分,但是我知道它属于InsertAfter
和InsertBefore
代码:
Sub InsertSuccessiveTables()
Dim HeaderTableId As word.Table, nextTable As word.Table
Dim RowId As word.Row
Dim workRange As word.Range
Dim WordDoc As word.Document
Set WordDoc = ActiveDocument
Set workRange = Selection.Range
Set HeaderTableId = WordDoc.Tables.Add(Range:=workRange, numcolumns:=3, numrows:=1, AutoFitBehavior:=wdWord9TableBehavior)
Set RowId = HeaderTableId.Rows(1)
RowId.Cells(1).Range.text = "Left"
RowId.Cells(2).Range.Font.Bold = True
RowId.Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
RowId.Cells(2).Range.text = "Center"
RowId.Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
RowId.Cells(3).Range.text = "Right"
' (this table only has one row)
Set workRange = HeaderTableId.Range
With workRange
.Collapse WdCollapseDirection.wdCollapseEnd
.InsertAfter vbCr 'ANSI 13
.Collapse WdCollapseDirection.wdCollapseEnd
End With
Set nextTable = workRange.Tables.Add(workRange, 1, 4, AutoFitBehavior:=wdWord9TableBehavior)
End Sub