【问题标题】:Loop through all worksheets循环遍历所有工作表
【发布时间】:2016-01-08 18:08:57
【问题描述】:

下面的代码在执行时处于活动状态的工作表上一遍又一遍地执行,而不是遍历所有工作表(例外除外)。

我做错了什么?

Dim wsSheet As Worksheet

  For Each wsSheet In ThisWorkbook.Worksheets
    Select Case wsSheet.Name
        Case "Affiliates", "New Report", "Pasted Report", "New Month Or Client", "Set Up Data"
            'Do nothing.

        Case Else
            With wsSheet
  Range("B72").Select
  Range("B72:L86").Sort Key1:=Range("I72"), Order1:=xlDescending, Header:= _
  xlGuess, OrderCustom:=1, MatchCase:=False, _
  Orientation:=xlTopToBottom, _
  DataOption1:=xlSortNormal

  Range("B72:L72,B74:L74,B76:L76,B78:L78,B80:L80,B82:L82,B84:L84,B86:L86").Select
  Range("B86").Activate
  ExecuteExcel4Macro "PATTERNS(,0,1,TRUE,2,4,0,0)"
  Range("B73:L73,B75:L75,B77:L77,B79:L79,B81:L81,B83:L83,B85:L85").Select
  Range("B85").Activate
  ExecuteExcel4Macro "PATTERNS(,0,10,TRUE,2,4,0,0.799981688894314)"
  Range("C93").Select

            End With
    End Select

  Next wsSheet

End Sub

【问题讨论】:

  • 它是循环的,但是当使用With 块时,必须在那些应该由With 限定的对象/函数之前放置一个.。儿子在你所有的Ranges 前面放一个. 喜欢.Range(...)
  • 借鉴@Scott 的出色评论- 在使用Range()Cells()Row() 等时,您应该始终明确,尤其是在使用多个电子表格时。使用With 会有所帮助,因为您只需要占位符.。只是注意到你应该总是使用它,所以你甚至可以像.Range(.cells(2,1),.Cells(.Rows.Count,2)) ...
  • 我在所有Ranges 前面都放了一个.,但现在我得到了 - 运行时错误'1004':对象'范围'的方法'选择'失败
  • 所以请发布您更正的代码。
  • 那是因为您试图在工作表上选择不是ActiveSheet 的区域。从技术上讲,您可以通过在尝试选择任何范围之前激活或选择工作表来纠正此问题,但我强烈建议避免在宏中使用 Select 语句:stackoverflow.com/questions/10714251/…

标签: vba excel


【解决方案1】:

更正后,您的代码应如下所示:

Dim wsSheet As Worksheet

For Each wsSheet In ThisWorkbook.Worksheets
    Select Case wsSheet.Name
        Case "Affiliates", "New Report", "Pasted Report", "New Month Or Client", "Set Up Data"
            'Do nothing.
        Case Else
            wsSheet.Select
            With ActiveWorksheet
                .Range("B72").Select
                .Range("B72:L86").Sort Key1:=Range("I72"), Order1:=xlDescending, Header:= _
                    xlGuess, OrderCustom:=1, MatchCase:=False, _
                    Orientation:=xlTopToBottom, _
                    DataOption1:=xlSortNormal

                .Range("B72:L72,B74:L74,B76:L76,B78:L78,B80:L80,B82:L82,B84:L84,B86:L86").Select
                .Range("B86").Activate
                ExecuteExcel4Macro "PATTERNS(,0,1,TRUE,2,4,0,0)"
                .Range("B73:L73,B75:L75,B77:L77,B79:L79,B81:L81,B83:L83,B85:L85").Select
                .Range("B85").Activate
                ExecuteExcel4Macro "PATTERNS(,0,10,TRUE,2,4,0,0.799981688894314)"
                .Range("C93").Select
            End With
    End Select
Next wsSheet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 2023-03-23
    • 2022-11-10
    • 2017-03-09
    • 2018-08-23
    • 1970-01-01
    • 2016-08-06
    • 2017-11-26
    相关资源
    最近更新 更多