Notifications
Clear all

[Resolvido] Executar macro ao modificar range com fórmula

6 Posts
3 Usuários
1 Reactions
1,916 Visualizações
(@viniciusfe)
Posts: 3
New Member
Topic starter
 

Olá pessoal,

 

Tenho uma planilha com dados de um grafico no range A2:E6, porém esses dados sao modificados através de fórmula. Gostaria que a macro abaixo executasse sempre que esse range fosse alterado. Alguém pode me ajudar?

 

'Método disparado ativação da planilha, quando ativa realiza a atualização do gráfico
Private Sub Worksheet_Activate()
    lsAtualizarGrafico
End Sub

'Função que calcula a altura do eixo Y
Private Sub lsAtualizarGrafico()
    'Seleciona o gráfico
    ActiveSheet.ChartObjects("Gráfico 1").Activate
    'Seleciona o eixo Y do gráfico
    ActiveChart.Axes(xlValue).Select
    'O valor mínimo da escala do eixo Y recebe o valor mínimo da tabela dinâmica - 5%
    ActiveChart.Axes(xlValue).MinimumScale = WorksheetFunction.Small(Sheets("Gráfico").Range("b35:z50"), 1) * 0.95
    'O valor máximo da escala do eixo Y recebe o valor máximo da tabela dinâmica + 2%
    ActiveChart.Axes(xlValue).MaximumScale = WorksheetFunction.Large(Sheets("Gráfico").Range("b35:z50"), 1) * 1.02
End Sub
'Método chamado em alterações realizadas na planilha
Private Sub Worksheet_Change(ByVal Target As Range)
  lsAtualizarGrafico
End Sub

 

 
Postado : 15/12/2020 2:03 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

 Bem vindo ao Planilhando, @viniciusfe!

 

Postado por: @viniciusfe

...porém esses dados sao modificados através de fórmula.

 Vc tentou chamar a macro no evento Worksheet_Change, mas ele só é disparado através de entrada manual, não de recálculo. Para disparar em alterações provenientes de resultados de fórmulas, obrigatoriamente tem de ser no evento Calculate:

Private Sub Worksheet_Calculate()
   lsAtualizarGrafico
End Sub

 
Postado : 15/12/2020 8:52 am
Anderson reacted
(@viniciusfe)
Posts: 3
New Member
Topic starter
 

@edsonbr Muito obrigado, funcionou perfeitamente. Problema resolvido.

 
Postado : 15/12/2020 4:55 pm
(@viniciusfe)
Posts: 3
New Member
Topic starter
 

Bom dia pessoal, surgiu um novo problema e gostaria que me ajudassem. Na macro acima qualquer planilha que seja alterada, a macro é chamada, assim a cada célula que estou lançando no planilha (banco de dados), a macro sempre envia para planilha (Gráfico) onde o gráfico se encontra. Gostaria que só quando fosse alterado alguma célula na planilha (Gráfico) que a macro fosse chamada. É possível?

 
Postado : 17/12/2020 8:39 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 
Postado por: @viniciusfe

Na macro acima qualquer planilha que seja alterada, a macro é chamada,

Isso pode estar acontecendo porque a planilha onde vc inseriu o código _Calculate está na cadeia de dependência das outras planilhas que estão sendo alteradas, mesmo que indiretamente.

 
Postado : 17/12/2020 9:00 am
(@anderson)
Posts: 203
Reputable Member
 

Desde o início, suas dúvidas estão relacionadas a Eventos.

A planilha possui vários eventos. Os mais usados são: SelectionChance, Change, Activate, Calculate.

O evento SelectionChange é acionado quando muda de célula/intervalo selecionado.

O evento Change é acionado quando existe alguma alteração na planilha.

O evento Activate é acionado quando a planilha é ativada (saindo de uma planilha e entrando em outra, por exemplo).

O evento Calculate é acionado quando há alteração no resultado de alguma fórmula.

Se a fórmula depender de outras planilhas, o evento Calculate vai ser acionado, mesmo alterando outras planilhas.

Coloque em outro evento que atenda sua necessidade, vai testando até ficar do modo desejado.

Pode, inclusive, colocar em mais de um evento.

Se em nenhum evento ficar do modo desejado, é porque não é possível.

 

 

Private Sub Worksheet_SelectionChange()


lsAtualizarGrafico

End Sub

Private Sub Worksheet_Activate()

lsAtualizarGrafico

End Sub
Este post foi modificado 4 anos atrás 7 vezes por Anderson

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 17/12/2020 9:07 am