循环遍历Excel工作表

8
我有以下代码,希望能在工作簿的其他25个表格中运行它,而不必重复25次代码,针对每个表格是否有一种循环的方法来实现呢?
有人能提供帮助吗?
Sub DeleteEmptyRows()
Dim ws As Worksheet
Dim strSearch As String
Dim lRow As Long

strSearch = "ressort"

Set ws = Sheets("01,02,03")

With ws
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row




    With .Range("A1:A" & lRow)
      .AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*"
      .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With

   ActiveSheet.Range("$A$1:$P$65536").AutoFilter Field:=1

End With
End Sub
2个回答

11

将处理代码放入循环中

for each ws in thisworkbook.sheets
    ' do something on each worksheet
next

例子

Sub DeleteEmptyRows()
    Dim ws As Worksheet
    Dim strSearch As String
    Dim lRow As Long

    strSearch = "ressort"

    For Each ws In ThisWorkbook.Sheets
        If (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") And (ws.Name <> "Sheet3") Then
            With ws
            lRow = .Range("A" & .Rows.Count).End(xlUp).Row
                With .Range("A1:A" & lRow)
                  .AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*"
                  .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
                End With
                ws.Range("$A$1:$P$65536").AutoFilter Field:=1
            End With
        End If
    Next
End Sub

现在,如果工作表的名称是Sheet1、Sheet2或Sheet3,它们将被跳过。


我可以添加一个异常吗?我有3个工作表,不希望宏在上面运行。 - adp
@adp 确定,让我快速调整答案。 - user2140173

1

您的代码需要存储在一个模块中,而不是包含在工作表中。以下说明了循环的工作原理:

Sub test()

Dim thisSheet As Worksheet
For Each sheet In Sheets
    thisSheet.Cells(1, 1) = 1
Next


End Sub

嘿,我能让它忽略其他工作表吗?我有三个工作表不想让它运行。 - adp
是的 - 你可以使用thisSheet.CodeName或thisSheet.Name来获取工作表的名称(注意,这两个名称可能不同)。一旦你获得了工作表的名称,你可以使用if语句来过滤掉你不希望它运行的三个工作表。 - RobinL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接