除了命名的工作表之外,在所有工作表上运行删除重复代码

时间:2014-07-09 13:28:22

标签: excel vba excel-vba

我有以下代码可以删除' ACHAL'工作表,其中在列M和列A之间找到匹配'存档'工作表。

我需要为所有工作表运行相同的脚本,但是,我的工作簿由几个工作表组成,其中工作表名称将经常更改;所以我不想将工作表名称添加到代码中。

在工作簿中,我有2个具有常量工作表名称的工作表(这些工作表名称不会更改),除了“所有数据”之外,代码还需要在所有工作表上运行。和'存档'。

是否有一种循环代码的方法,以便它可以在所有工作表上运行,而不是“所有数据”。和'存档'。代码在最后一个工作表上运行后需要停止。

Sub ArchiveMatch()

    Dim LR As Long, i As Long

    With Sheets("ACHAL")
        LR = .Range("M2:M" & Rows.Count).End(xlUp).Row
        For i = LR To 1 Step -1
            If IsNumeric(Application.Match(.Range("A" & i).Value, Sheets("Archive").Columns("A"), 0)) Then .Rows(i).Delete
        Next i

    End With

End Sub

2 个答案:

答案 0 :(得分:3)

您可以遍历所有工作表,然后检查当前工作表是不是所有数据或存档,如下所示:

Sub ArchiveMatch()

    Dim LR As Long, i As Long
    Dim sh As Worksheet

    For Each sh In ThisWorkbook.Worksheets
        If sh.Name <> "All Data" And sh.Name <> "Archive" Then
            LR = sh.Range("M2:M" & Rows.Count).End(xlUp).Row
            For i = LR To 1 Step -1
                If IsNumeric(Application.Match(sh.Range("A" & i).Value, Sheets("Archive").Columns("A"), 0)) Then sh.Rows(i).Delete
            Next i
        End If
    Next sh

End Sub

答案 1 :(得分:1)

您可以使用以下内容循环所有工作表:

Sub Main()
    Dim i As Integer
    For i = 1 To Sheets.Count
        Sheets(i).Activate
    Next
End Sub

如果您有一张或多张工作表的例外情况,请与此Sheets(i).Name

进行比较

希望它有效。