Como executar um código em cada planilha a partir da planilha 4

0

Eu criei uma macro que chama outra macro e, em seguida, para executar em cada planilha da planilha 4. A macro é executada na primeira planilha (planilha 4), mas não é executada em todas as outras planilhas.

A macro inicial que deve percorrer todas as planilhas a partir da planilha 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

A macro a ser executada em cada planilha é a seguinte:

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

Por favor, deixe-me saber o que estou fazendo de errado, o que impede que a macro seja executada em cada planilha da planilha 4 para a última planilha.

    
por Habib Adam 29.12.2015 / 21:00

2 respostas

1

Você nunca altera a planilha na qual a planilha está trabalhando. Adicionar ActiveWorkbook.Worksheets(i).Activate diretamente acima de sua chamada para DeleteMacro deve ser suficiente.

Observe que usar Select e Activate é uma prática ruim. É ineficiente e facilmente leva a erros como este. Você deve considerar a leitura de como evite usar o select .

    
por 29.12.2015 / 22:02
0

Você só está executando a instrução For repetidamente, sem alterar a planilha ativa. Adicionando as Planilhas (i) .Ativar após For ... Deve corrigir isso.

    
por 29.12.2015 / 22:14