尝试遍历工作表并格式化其中的特定表格
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
我不想为每个特定的工作表编写代码来格式化特定的表格,而是想创建一个循环,在不同的工作表上只格式化列表中的表格。
当前代码:(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