在我的文档中,我有一种名为“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
问题是,它不适用于嵌套表。在下图所示,黑色表是“正常”,蓝色表是“小”。如何解决?
答案 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.Tables
与oTable.Range.Tables
之间的差异相似。 - 嵌套表嵌套到父Table
,它嵌套到上层Cell
,但不嵌套到表或单元格Range
!
因此,我认为所选择的答案确实提供了一种利用Collection
(这是vba独有的,我似乎记得在某处阅读)的奇妙方式,并且确实可以解决问题,但是,它没有指出问题的“铰链”或“诀窍”。再一次,“诀窍”是您可以使用oTable.Tables
而不是oTable.Range.Tables
“捕获”嵌套表格;相比之下,您可以使用oTable.Range.Cells
而不是oTable.Cells
“捕获”表格中的单元格。