如果存在合并行

时间:2018-01-30 13:04:16

标签: vba ms-word heading

我想在ms-Word文件中设置所有表格,并在每个页面上显示重复的标题。

但是我发现如果一个表(在下面的代码中有一个idx索引)合并了行,那么 ActiveDocument.Tables(idx).Rows(1).HeadingFormat = True 失败并说

  

方法"项目"对象"行"失败

任何提示?感谢

1 个答案:

答案 0 :(得分:0)

您可以通过选择要重复的单元格(行)来解决这个问题 - 这就是它在用户界面中的工作方式/原因。当然,棘手的部分是知道表格的“形状”,以便正确地进行选择。

如果您不知道这种情况,也许最好的方法是使用错误处理,以便宏可以“提示”您提供构成重复行的单元格数。这是一种方法。

(注意:除了显示某种消息之外,暂停宏的执行是不可能的。如果你想等到用户实际可以在表中进行选择,那么宏需要重新启动。 )

Sub SetHeaderRepeatWithMergedRows()
    Dim tbl As word.Table
    Dim errNr As Long
    Dim nrCells As Variant
    Dim startCell As word.Range
    Dim endCell As word.Range

    'Cannot access individual rows in this collection because
    'table has vertically merged cells
    errNr = 5991 'or? method "item" of object "rows" failed
    nrCells = "none"
    On Error GoTo handler
    For Each tbl In ActiveDocument.Tables
        tbl.Rows(1).HeadingFormat = True
    Next

    Exit Sub

handler:
    Select Case Err.Number
        Case errNr
            'Rows with vertically merged cells can only be set
            'as Header Rows on the Selection, so select the
            'necessary number of cells by prompting the user
            Do
                'Make sure the table is visible to the user:
                tbl.Range.Document.ActiveWindow.ScrollIntoView tbl.Range, True
                nrCells = InputBox("How many cells make up the table header:")
                If IsNumeric(nrCells) Then
                    tbl.Cell(1, 1).Range.Select
                    Selection.MoveEnd wdCell, nrCells - 1
                    Selection.Rows.HeadingFormat = True
                End If
            Loop Until IsNumeric(nrCells)
            nrCells = "none"
            Resume Next
        Case Else
            MsgBox Err.Number & vbCr & Err.Description & _
              vbCr & "The macro will end, now"
    End Select
End Sub