【问题标题】:Excel - VBA Macro - Stopping code at a specific sheetExcel - VBA 宏 - 在特定工作表处停止代码
【发布时间】:2020-08-25 08:20:08
【问题描述】:

我有许多具有相同模板的工作表,我想在其中对日期字段进行排序。我一直在手动操作,但我正在尝试 VBA 为我做这件事。我有下面的代码,但它适用于比我想要的更多的工作表。我试图弄清楚如何停止宏以在特定工作表处停止并在那里结束。

目标:从工作表 1-10 运行宏,在工作表 10 处停止,或者如果工作表 = 工作表 11,则停止。我使用表 1-10、11 作为简单参考。我会插入特定的工作表名称。

我在网上找到了一些答案 -

If ws.Name <> "" Then
end with

但不确定在下面的宏中输入它的位置。

Sub Macro1()
'
' sortbydate2 Macro
'

'
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets

    With ws
        With .Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("A2:a49"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange ws.Cells
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
Next ws
End Sub

谢谢, P1

【问题讨论】:

  • 感谢您的所有回答。很快就会试一试。

标签: excel vba


【解决方案1】:

操作除...之外的所有工作表

  • 您可以在您希望的地方实现一个“异常数组” 放置名称,或不需要的索引(不推荐) 工作表。
  • 然后您可以使用IsErrorApplication.Match 来检查当前工作表的名称是否已在“异常数组”中找到。

守则

Option Explicit

Sub Macro1()
'
' sortbydate2 Macro
'

'
    Dim Exceptions As Variant
    Exceptions = Array("Sheet11", "Sheet12") ' add more or less.
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If IsError(Application.Match(ws.Name, Exceptions, 0)) Then
            With ws
                With .Sort
                    .SortFields.Clear
                    .SortFields.Add Key:=Range("A2:a49"), _
                                    SortOn:=xlSortOnValues, _
                                    Order:=xlAscending, _
                                    DataOption:=xlSortNormal
                    .SetRange ws.Cells
                    .Header = xlYes
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
            End With
        End If
    Next ws

End Sub

【讨论】:

    【解决方案2】:

    您可以遍历工作簿中的所有工作表并将过滤器应用于所有工作表,例如:

    For Each ws In ActiveWorkbook.Worksheets
          if ws.Name <> "IDontWantFilters" Then
              with ws
                ....
              end with
         end if
    next ws
    

    【讨论】:

      【解决方案3】:

      我认为这应该可行。我假设一旦它到达 sheet11,你只想让它完全停止

      Sub Macro1()
      
      
      Dim ws As Worksheet
      For Each ws In ThisWorkbook.Worksheets
      
          if ws.name = "Sheet11" then
              exit sub
          end if
      
          With ws
              
              With .Sort
                  .SortFields.Clear
                  .SortFields.Add Key:=Range("A2:a49"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                  .SetRange ws.Cells
                  .Header = xlYes
                  .MatchCase = False
                  .Orientation = xlTopToBottom
                  .SortMethod = xlPinYin
                  .Apply
              End With
          End With
      Next ws
      End Sub
      

      【讨论】:

        【解决方案4】:

        如果您只想对前 10 个工作表进行排序,您可以执行一个基本循环来完成您的任务...

        Dim ws As Worksheet
        For i = 1 To 10
            Set ws = Sheets(i)
                
            With ws.Sort
                .SortFields.Clear
                .SortFields.Add Key:=Range("A2:A49"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .SetRange Sheets(i).Cells
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        Next i
        

        【讨论】:

          猜你喜欢
          • 2019-09-25
          • 2017-04-21
          • 1970-01-01
          • 2019-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-18
          • 1970-01-01
          相关资源
          最近更新 更多