为嵌套表格应用格式
在我的文档中,我有称为“小”的表格样式。这里是宏,这将在这种风格的每个表改变字体大小:为嵌套表格应用格式
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
的问题是,它不会对嵌套表工作。如下图所示,黑色表格为“正常”,蓝色表格为“小型”。它如何被修复?
回答:
这应该处理每一个表,即使是那些嵌套到任意深度表。
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
回答:
我有类似的问题。在发布之前,我做了大量的研究。我创建一个空文档,插在两个小的表,嵌套它们中的一个与另一个表,并进行测试用以下代码:
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),即使没有表嵌套在单元格中。直到我通过MsgBox
检查了oCell.Tables.Count
之后,我才感到困惑。 - oTable.Tables
与oTable.Range.Tables
的区别类似。 - 嵌套表嵌套到父代Table
,它嵌套到上层Cell
,但不嵌套到表格或单元的Range
!
因此,我认为所选答案的确利用了Collection
(这对vba来说是独一无二的,我似乎记得在某处阅读),并且确实可以解决这个问题,但它有没有指出问题的“铰链”或“诀窍”。再一次,“诀窍”是你可以使用oTable.Tables
而不是oTable.Range.Tables
“捕捉”嵌套表格;相比之下,您可以使用oTable.Range.Cells
而不是oTable.Cells
来“捕捉”表格中的单元格。
以上是 为嵌套表格应用格式 的全部内容, 来源链接: utcz.com/qa/259909.html