【问题标题】:Creating array from worksheets and using For Each loop从工作表创建数组并使用 For Each 循环
【发布时间】:2021-09-19 02:44:18
【问题描述】:

我正在从几个工作表创建一个数组,并使用 For Each 循环访问它们。通过这种方法我已经完成了很多工作,最后一个小任务是对工作表上的表格进行排序。 有人可以帮我理解为什么这段代码不起作用,是否有可能实现这一点,或者我做错了什么? 如果我直接使用工作表 CodeName(例如 Sheet1)一切正常。对于循环中的大部分任务,我仅使用 sh 变量来引用工作表的 CodeName,并且仅在少数情况下,如果 sh 不工作,则 sh.CodeName 正在完成这项工作,但不适用于此任务。 Watches 窗口显示如下:

sh 是类型 Variant/Object/Sheet1 sh.CodeName 是 Variant/String 类型,值为 "Sheet1"

提前高度感谢任何帮助。

Sub test()

    ' Create array from all worksheets using the Code Names
    Dim arr As Variant
    arr = Array(Sheet1, Sheet2, Sheet3, Sheet4, Sheet5, Sheet6, Sheet7)
    
    Dim sh As Variant
    Dim Table As String
    
    ' Loop trough the sheets
    For Each sh In arr
            
            ' Table 1 of Sheet1 and so on...
            Table = "Table " & Right(sh.CodeName, 1)
    
            sh.ListObjects(Table).Sort. _
                SortFields.Clear
            sh.ListObjects(Table).Sort. _
                SortFields.add key:=Range(Table & "[[#All],[ID]]"), SortOn:= _
                xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With sh.ListObjects(Table). _
                Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
    
    Next sh

End Sub

【问题讨论】:

  • 如果我设置表格以匹配您的代码,您的代码就可以工作。我注意到您在表名称中包含一个空格。这不是默认命名。因此,除非您自己更改了表名,否则工作表上不会有这些名称的表。
  • 如果每张纸上只有一张桌子,使用sh.ListObjects(1)而不是sh.ListObjects(Table)会更可靠
  • stackoverflow.com/users/445425/chris-neilsen - 你是对的,这只是发布代码时的拼写错误。我把代码手动听到为了使用更友好的名字。
  • 谢谢克里斯尼尔森。我会试试看 - 看起来更干净,更有意义。

标签: arrays excel vba object


【解决方案1】:

Excel 在焦点方面很挑剔,因此您可能需要确保您正在处理的工作表是活动工作表或将焦点设置为它。 我会尝试 ' 循环穿过床单 对于每个 sh 在 arr sh.activate

或: 对于每个 sh 在 arr sh.SetFocus

' Loop trough the sheets
For Each sh In arr
        

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2011-12-06
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多