如何从工作表 4 开始在每个工作表中运行代码

如何从工作表 4 开始在每个工作表中运行代码

我创建了一个宏,它调用另一个宏,然后在从工作表 4 开始的每个工作表上运行。该宏在第一个工作表(工作表 4)上运行,但不会在所有其他工作表上运行。

从工作表 4 开始循环遍历所有工作表的初始宏是:

Sub DeleteLoop()
Dim WS_Count As Integer
Dim i As Integer

If MsgBox("Do you want to continue", vbYesNo, "User Input") = vbNo Then
        Exit Sub
    Else
    If MsgBox("Are you sure? Have you taken a backup of your spreadsheet?", vbYesNo, "User Input") = vbNo Then
        Exit Sub
        Else
        ActiveWorkbook.Worksheets(4).Activate
        For i = ActiveSheet.Index To Sheets.Count
        Call DeleteMacro
        MsgBox "I'm currently on sheet " & ThisWorkbook.Sheets(i).Name
        Next i
    End If
End If
End Sub

每个工作表上运行的宏如下:

Sub DeleteMacro()
Dim x As Integer
Dim y As Integer

Call UnProtectSheet
Range("F12").AutoFilter Field:=6, Criteria1:=Array("Paid", "Cancelled", " "), Operator:=xlFilterValues
y = Cells.Item(3, "L")
x = Cells.Item(8, "E")
    If x > 0 Then

    Application.Goto Reference:="R12C1"
    Call NextVisibleRow

    If y > 1 Then
    Range(Selection, Selection.End(xlDown)).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.EntireRow.Delete
    Else
    Selection.EntireRow.Delete
    End If

    End If

ActiveSheet.ShowAllData
Application.Goto Reference:="R12C1"
Call NextVisibleRow
Selection.End(xlDown).Select

If ActiveCell.Value = "Balance" Then
            Selection.End(xlUp).Select
End If

Call NextVisibleRow
Call ProtectSheet
End Sub

你能告诉我我做错了什么吗,导致宏无法在从工作表 4 到最后一张工作表的每个工作表上运行。

答案1

您永远不会更改宏正在运行的工作表。ActiveWorkbook.Worksheets(i).Activate直接在调用上方添加DeleteMacro即可。

请注意,使用SelectActivate是不好的做法。它效率低下,而且很容易导致类似这样的错误。你应该考虑阅读如何避免使用选择

答案2

您只是一遍又一遍地运行 For 语句,而从未更改活动工作表。在 For... 之后添加 Worksheets(i).Activate 应该可以解决这个问题。

相关内容