Запуск кода на каждом листе, начиная с листа 4

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

11
задан karel
11.04.2023 1:38 Количество просмотров материала 3289
Распечатать страницу

2 ответа

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

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

1
отвечен Kyle 2023-04-12 09:26

оператор For выполняется только снова и снова, без изменения активного листа. Добавление листов (i).Активировать после... Это надо исправить.

0
отвечен Joel Keene 2023-04-12 11:43

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх