应用嵌套表的格式

时间:2017-12-03 07:32:24

标签: vba ms-word ms-office word-vba

在我的文档中,我有一种名为“Small”的表格样式。这是宏,它将改变这种风格的每个表中的字体大小:

Sub FormatTables()
    Dim t As Table
    For Each t In ActiveDocument.Tables
        If t.Style = "Small" Then
            t.Range.Font.Size = 8
        End If
    Next
End Sub

问题是,它不适用于嵌套表。在下图所示,黑色表是“正常”,蓝色表是“小”。如何解决?

enter image description here

2 个答案:

答案 0 :(得分:1)

这应该处理每个表,甚至是那些嵌套到任意深度的表。

Sub FormatTables()

    Dim t As Table, col As New Collection
    Dim n As Table

    'add all top-level table(s) to collection
    For Each t In ActiveDocument.Tables
        col.Add t
    Next

    'process each table from the collection
    Do While col.Count > 0
        Set t = col(1) '<< reference the first table from the collection
        col.Remove 1   '<< remove it from collection
        Debug.Print "Table has " & t.Rows.Count & " rows", t.Style

        If t.Style = "Small" Then t.Range.Font.Size = 8

        'gather any nested table(s) for checking
        For Each n In t.Tables
            col.Add n
        Next n
    Loop

End Sub

答案 1 :(得分:1)

我有一个类似的问题。在发布之前我做了很多研究。我创建了一个空文档,插入了两个小表,其中一个表与另一个表嵌套,并使用以下代码进行测试:

Sub testtest()

Dim aRange As Range

MsgBox ThisDocument.Tables.Count
For Each oTable In ThisDocument.Tables
    For Each oCell In oTable.Range.Cells
        Set aRange = oCell.Range
        aRange.MoveEnd Count:=-2
        aRange.Select
        MsgBox aRange.Tables.Count
        MsgBox oCell.Tables.Count
    Next oCell
Next oTable



End Sub

解释:首先,我将单元格范围的末尾移动-1并且之后移动-2的原因是排除单元格末尾的可疑Chr(13)Chr(7)。现在通过上面的测试解释说,即使没有表嵌套在单元格中,我发现aRange.Tables.Count总是1(并且永远不会为0)。在我通过oCell.Tables.Count检查MsgBox之前,我感到很困惑。 - oTable.TablesoTable.Range.Tables之间的差异相似。 - 嵌套表嵌套到父Table,它嵌套到上层Cell,但不嵌套到表或单元格Range

因此,我认为所选择的答案确实提供了一种利用Collection(这是vba独有的,我似乎记得在某处阅读)的奇妙方式,并且确实可以解决问题,但是,它没有指出问题的“铰链”或“诀窍”。再一次,“诀窍”是您可以使用oTable.Tables而不是oTable.Range.Tables“捕获”嵌套表格;相比之下,您可以使用oTable.Range.Cells而不是oTable.Cells“捕获”表格中的单元格。