为嵌套表格应用格式

在我的文档中,我有称为“小”的表格样式。这里是宏,这将在这种风格的每个表改变字体大小:为嵌套表格应用格式

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.TablesoTable.Range.Tables的区别类似。 - 嵌套表嵌套到父代Table,它嵌套到上层Cell,但不嵌套到表格或单元的Range

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

以上是 为嵌套表格应用格式 的全部内容, 来源链接: utcz.com/qa/259909.html

回到顶部