Я создал макрос, который вызывает другой макрос, который затем запускается на каждом листе из листа 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 до последнего листа.

2 ответа2

1

Вы никогда не меняете лист, на котором лист макрос работает. Добавление ActiveWorkbook.Worksheets(i).Activate прямо над вашим звонком на DeleteMacro чтобы добиться цели .

Обратите внимание, что использование Select и Activate - плохая практика. Это неэффективно и легко приводит к таким ошибкам. Вы должны рассмотреть вопрос о том, как избежать использования выбора.

0

Вы только снова и снова выполняете оператор For, не меняя активную рабочую таблицу. Добавление рабочих листов (i).Активировать после For ... Должен исправить это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .