首页 > 解决方案 > 尝试遍历工作表并格式化其中的特定表格

问题描述

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

当前代码:(在代码前面定义和设置的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

我得到“运行时错误“9”:下标超出范围”。我知道它与第二个循环有关,我以前从未做过,所以不知道如何修复它。

标签: excelvbaloopsworksheet

解决方案


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

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

因此,我使用您的代码循环遍历数组中的每个工作表和每个表名 - 但不是在其上运行代码而是检查工作表tbl上的每个表()sh,如果名称与您正在寻找的名称匹配,然后代码运行。


如果要刷新每个工作表上的任何和所有表,那么这很简单:

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

推荐阅读