【问题标题】:How to place one table directly after another如何将一张桌子直接放在另一张桌子上
【发布时间】:2019-01-28 15:11:57
【问题描述】:

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

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    我必须“充实”您的代码才能进行测试 - 我已将整个测试代码粘贴在下面。

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

    需要折叠表格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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2020-07-29
      • 2015-11-28
      相关资源
      最近更新 更多