尝试遍历工作表并格式化其中的特定表格

Trying to loop through worksheets and format specific tables in them

我不想为每个特定的工作表编写代码来格式化特定的表格,而是想创建一个循环,在不同的工作表上只格式化列表中的表格。

当前代码:(sh 和 wbTemplate 在代码前面定义和设置)

Dim AllTableNames As String
Dim TableNames As Variant
Dim i As Long

    AllTableNames = "Table_Dormant_Stock,Table_Overstock,Table_Negative_Stock,Table_Outdated_Stock_Counts,Table_Waste_Returns"
    TableNames = Split(AllTableNames, ",")

    For Each sh In wbTemplate.Worksheets
        For i = LBound(TableNames) To UBound(TableNames)
           sh.ListObjects(TableNames(i)).DataBodyRange.Font.Size = 10
        Next i
    Next sh

我得到 "Run-time Error "9“:下标超出范围”。 我知道它与第二个循环有关,我以前从未做过所以不确定如何修复它。

这是修复代码的一种方法:

For Each sh In wbTemplate.Worksheets
    For i = LBound(TableNames) To UBound(TableNames)

        For Each tbl In sh.ListObjects
            If tbl.Name = TableNames(i) Then
                tbl.DataBodyRange.Font.Size = 10
            End If
        Next tbl

    Next i
Next sh

所以我使用你的代码循环遍历数组中的每个 sheet 和每个 table 名称 - 但是 运行 上的代码而不是 ,我们检查 sheet sh 上的每个 table (tbl),如果名称与您要查找的名称匹配,然后代码运行。


如果你想刷新每个作品table的所有sheet,那么这很简单:

For Each sh In wbTemplate.Worksheets
    For Each tbl In sh.ListObjects
        tbl.DataBodyRange.Font.Size = 10
    Next
Next sh

如果每个 sheet 上只有一个 table,则可以完全省去第二个循环和名称数组,而只使用集合的索引 (1)。

如果您有其他 table,请使用 CLR 的方法。

Sub x()

Dim wbTemplate As Workbook
Dim sh As Worksheet

For Each sh In wbTemplate.Worksheets
    sh.ListObjects(1).DataBodyRange.Font.Size = 10
Next sh

End Sub