我有類似的問題。在發佈之前,我做了大量的研究。我創建一個空文檔,插在兩個小的表,嵌套它們中的一個與另一個表,並進行測試用以下代碼:
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
來「捕捉」表格中的單元格。
檢查(例如)'t.Range.Tables.Count'會告訴你't'是否包含任何嵌套表:然後你可以循環這些... –
@TimWilliams嗯,我試過了,例如[類似的東西這](https://stackoverflow.com/questions/12105718/how-to-access-a-table-within-a-range-nested-in-another-table),但目前無法理解它可能是如何在我的情況適應... –
@TimWilliams這是我的[半工作版本](https://jsfiddle.net/n5b00mod/)。但是,它僅適用於嵌套表的第一級。例如,如果我有表格普通,然後第二個表格正常裏面第一個,然後表格第二普通裏面小,這個小表格將不被格式化。據我瞭解,應該在這裏使用'Do While ... Loop',但我不明白它應該如何完成。 –