如何将一张桌子直接放在另一张桌子上

时间:2019-01-27 23:45:57

标签: vba ms-word

我正在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可以在表格后正确插入空白段落,但是插入点则在段落标记之前。 我也尝试过插入分页符,但是有同样的问题。我不知道如何将插入点移到末尾。

1 个答案:

答案 0 :(得分:0)

为了测试,我不得不“充实”您的代码-我在下面粘贴了整个测试代码。

在第一个表之后插入第二个表的关键,以段落标记分隔以确保两个表不会合并:

有必要折叠表Range 两次:在插入新段落之前和之后一次。

问题中的代码使用.Move,尚不清楚Range的更改方式。如果要使用“移动”,我将使用.MoveStart,它将使收缩范围保持收缩,但是对于这个问题,我更喜欢Collapse。 (还有MoveEnd,它将扩展折叠范围以包括内容。)

我的版本也有不同之处:

  • 它使用的“工作范围”与任何表格范围无关-这是个人喜好
  • 它使用InsertAfter vbCr插入新段落-同样,个人喜好:我一直知道插入的内容是Range对象的一部分。有时,使用Insert方法,新内容可能不属于Range的一部分,但是我知道它属于InsertAfterInsertBefore

代码:

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