【问题标题】:Trying to loop through worksheets and format specific tables in them尝试遍历工作表并格式化其中的特定表格
【发布时间】:2019-09-20 03:07:41
【问题描述】:

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

当前代码:(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”:下标超出范围”。 我知道它与第二个循环有关,我以前从未这样做过,所以不知道如何修复它。

【问题讨论】:

  • 哪一行错误?可能您没有具有该名称的表。
  • 您正在尝试刷新 每个 工作表上的所有表。每个工作表上是否有所有 5 个表格的副本?
  • 要添加到@CLR 的评论中,表名具有工作簿范围,因此即使您在每张工作表上都有一个副本,名称也会有所不同。
  • 如果每张纸上只有一个表格,则根本不需要第二个循环。只需使用索引。
  • sh.ListObjects(1).DataBodyRange.Font.Size = 10.

标签: excel vba loops worksheet


【解决方案1】:

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

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

【讨论】:

  • 这似乎是最好的方法,因为我还有其他带桌子的床单。我现在得到一个不同的错误:“'91'对象变量或未设置块变量。”在以下行上:“ tbl.DataBodyRange.Font.Size = 10 ”
  • 列出工作表名称然后循环浏览这些工作表并格式化其中的任何表格会更容易吗?
  • 尝试在字体大小更改之前添加Debug.print sh.Name, tbl.Name 行,这样您就可以看到它卡在了哪个工作表和表格上。
  • 我得到一个列表,其中包含 5 张纸中的 3 张。
  • @CLR 它卡在一张空桌子上,所以我只输入了On Error Resume Next,它成功了,非常感谢你的帮助!
【解决方案2】:

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

如果你有其他表,使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2016-08-02
    • 2023-02-08
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多