Notifications
Clear all

Macro rodando sem parar

17 Posts
5 Usuários
0 Reactions
2,763 Visualizações
 esbs
(@esbs)
Posts: 8
Active Member
Topic starter
 

Pessoal ,tudo bem?

Meus conhecimentos em macro realmente não são avançados, mas até consigo fazer algo. Gostaria de entender poque a macro fica rorando sem parar.
A macro roda perfeitamente mas fica calculando e preciso apertar "ESC" para parar. Alguém pode me ajudar nessa?

O código que estou usando é:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

On Error Resume Next

If ActiveSlicer.Name = "SEGMENTAÇÃODEDADOS_OPÇÃO_8" Then
 Call Macro2
 
Exit Sub
End If
End Sub

_______
Sub Macro2()
Application.ScreenUpdating = False
If Range("O1") = "(Tudo)" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = True
         .PivotItems("2016").Visible = True
          .PivotItems("2017").Visible = True
                
    End With
    Range("D20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(3), 1
End If


If Range("O1") = "1° tri" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = False
         .PivotItems("2016").Visible = True
          .PivotItems("2017").Visible = True
                
    End With
    Range("C20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(2), 1
End If

If Range("O1") = "2° tri" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = True
         .PivotItems("2016").Visible = True
                
    End With
    Range("C20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(2), 1
End If

If Range("O1") = "3° tri" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = True
         .PivotItems("2016").Visible = True
                
    End With
    Range("C20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(2), 1
End If
If Range("O1") = "4° tri" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = True
         .PivotItems("2016").Visible = True
                
    End With
    Range("C20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(2), 1

End If
Application.ScreenUpdating = True
End Sub
 
Postado : 21/03/2017 1:45 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Olá esbc, tudo bem...

1ª- Se puder disponibilizar a planilha como exemplo, fica mais fácil de ajudar.

2ª- Depure o código VBA da Macro linha a linha, assim, você vai conseguir ver onde deveria ter alguma instrução de parada ou pausa ou encerramento do processo.
como.:
Coloque as duas janelas (do Excel e VBA) lado a lado, vai na Macro e clica na frente de uma linha de código logo no início no trecho de execução, colocando uma bolinha vermelha, tecle Ctrl+F8 (ou vai em DeputarExecutar até cursor) ele vai executar a macro até a marcação e vai ficar te esperando você clicar no F8 (ou F5) para ir executando instrução à instrução, uma por uma. Com isso você verá onde ele deveria parar e o porque nao está parando.

At;
Danilo.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 21/03/2017 2:49 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

esbs

Como você é novato, para facilitar a tua participação no fórum, sugiro tomar conhecimento do conteúdo dos links abaixo:
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

[]s

Patropi - Moderador

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 21/03/2017 3:03 pm
 esbs
(@esbs)
Posts: 8
Active Member
Topic starter
 

Olá danilobtos, tudo certo?

Valeu pela atenção cara

Como realmente tenho não tenho conhecimentos avançados, ver pq continua a executar a macro é uma coisa que não sei fazer, pois apesar da sua dica, não vou saber o que fazer.

Segue uma planilha exemplo. Anexei como zip para compactar o arquivo que estava muito grande.

Abs,

 
Postado : 21/03/2017 3:18 pm
(@mprudencio)
Posts: 2749
Famed Member
 

KD os codigos?

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 21/03/2017 3:38 pm
 esbs
(@esbs)
Posts: 8
Active Member
Topic starter
 

Olá MPrudencio, tudo certo?

Valeu pela atenção cara.

Eu deixei o código no próprio arquivo do excel. Segue novamente:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

On Error Resume Next

If ActiveSlicer.Name = "SEGMENTAÇÃODEDADOS_OPÇÃO_8" Then
 Call Macro2
 
End If
Exit Sub
End Sub
____
Sub Macro2()
Application.ScreenUpdating = False
If Range("O1") = "(Tudo)" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = True
         .PivotItems("2016").Visible = True
          .PivotItems("2017").Visible = True
                
    End With
    Range("D20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(3), 1
End If

If Range("O1") = "1° tri" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = False
         .PivotItems("2016").Visible = True
          .PivotItems("2017").Visible = True
                
    End With
    Range("C20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(2), 1
End If

If Range("O1") = "2° tri" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = True
         .PivotItems("2016").Visible = True
                
    End With
    Range("C20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(2), 1
End If

If Range("O1") = "3° tri" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = True
         .PivotItems("2016").Visible = True
                
    End With
    Range("C20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(2), 1
End If
If Range("O1") = "4° tri" Then

    With ActiveSheet.PivotTables("Mantido").PivotFields("opção 6")
        .PivotItems("2015").Visible = True
         .PivotItems("2016").Visible = True
                
    End With
    Range("C20").Select
    ActiveSheet.PivotTables("Mantido").PivotFields("Cliente Ajustado").AutoSort _
        xlDescending, "Soma de Soma de VALOR LIQUIDO", ActiveSheet.PivotTables( _
        "Mantido").PivotColumnAxis.PivotLines(2), 1

End If
Application.ScreenUpdating = True
End Sub
 
Postado : 21/03/2017 3:42 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite esbs,

O que acontece é que quando a tabela dinâmica é atualizada, o seu código para esse evento é ativado e tem uma linha escrito: 'On Error Resume Next'
Quando ocorre um erro na 'Macro2' o comando vai no código para erro e começa de novo, indo num loop infinito.

O que recomendo é você parar e pensar em como seria toda a estrutura da sua tabela, e em caso de erros o que deveria (ou não deveria) acontecer.

att,

 
Postado : 21/03/2017 4:06 pm
 esbs
(@esbs)
Posts: 8
Active Member
Topic starter
 

Olá brunoxro, tudo certo?

Mas eu rodei a macro2 à parte e ela não tem erro nenhum, executa perfeitamente. Eu realmente não sei oque fazer.

Abs

 
Postado : 21/03/2017 4:21 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

esbs,

Se a 'Macro2' traz o resultado desejado nos seus testes então delete o comando 'On Error Resume Next'.

att,

 
Postado : 21/03/2017 4:35 pm
 esbs
(@esbs)
Posts: 8
Active Member
Topic starter
 

brunoxro,

A ideia é que quando eu clicar no slicer a macro2 rode entendeu? Ou seja não posso deletar esse evento.

E se eu deletar 'On Error Resume Next", aparece um erro:

Erro de tempo de execução '424' . O objeto é obrigatório.

Abs,

 
Postado : 21/03/2017 4:40 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite esbs,

Não escrevei para deletar o Evento e sim a linha 3, 'On Error Resume Next'.

att,

 
Postado : 21/03/2017 4:44 pm
 esbs
(@esbs)
Posts: 8
Active Member
Topic starter
 

Desculpa brunoxro já que tinha entendido errado.

Eu fiz isso nesse exato momento.

Se eu deletar 'On Error Resume Next", aparece um erro:

Erro de tempo de execução '424' . O objeto é obrigatório.

Abs,

 
Postado : 21/03/2017 4:48 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite esbs,

Note que esse erro ocorre no começo do IF, não conheço muito sobre eventos mas esse IF é mesmo necessário para o seu caso? Chamar a macro não resolve?

att,

 
Postado : 21/03/2017 6:40 pm
(@teleguiado)
Posts: 142
Estimable Member
 

Boa Noite!!

esbs, desabilitei a o evento update e não entendi qual o sentido dela pois quando clico em algum item da opção 8 a tabela mantido atualiza automaticamente, então não vi utilidade para criar uma macro para atualizar a tabela mantido sendo que ela ja atualiza automaticamente de acordo com o que você seleciona na opção 8. Ou se vc alterar a célula B15 também atualiza sua tabela mantido.

Desculpe se não te ajudei porem foi o que percebi. ;) Se tiver falando besteira espero que alguém conserte o que postei aqui. :D

Obrigado.

Teleguiado.
E-mail: [email protected]

 
Postado : 21/03/2017 8:37 pm
 esbs
(@esbs)
Posts: 8
Active Member
Topic starter
 

Brunoxro e Teleguiado, tudo bem?

Deixa eu ver se consigo explicar os porquês. Eu uso o IF pois é o seguinte:

No slicer "opção 8"
Se for ano ("TUDO"), preciso que apareça os anos de 2015, 2016 e 2017;
Se for 1° TRI, preciso que apareça os anos de 2016 e 2017;
Se for 2° TRI, preciso que apareça os anos de 2015 e 2016;
Se for 3° TRI, preciso que apareça os anos de 2015 e 2016;
Se for 4° TRI, preciso que apareça os anos de 2015 e 2016.

Ou seja é um filtro específico para cada trimestre, por isso uso o condicional IF, conforme filtro no slicer "opção 8".

Abs,

 
Postado : 22/03/2017 7:00 am
Página 1 / 2