Usuário com melhor resposta
Executar macro ao atualizar o valor de uma célula com fórmula e não manualmente

Pergunta
-
Preciso de um código para chamar uma macro quando o valor de uma célula mudar. Essa célula é atualizada por fórmula, por isso o evento change não funciona. Tentei o evento calculate, mas quando executa, não para de calcular. Como posso executar essa macro? Obrigado.
Respostas
-
Experimente criar uma variável local e monitore-a regularmente:
'Altere o endereço da célula que deseja monitorar: Const mcsAddress As String = "A1" Dim mvCell As Variant Private Sub Worksheet_Activate() getValue End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Range(mcsAddress).Value2 <> mvCell Then Application.EnableEvents = False MsgBox "Valor alterado!", vbExclamation getValue Application.EnableEvents = True End If End Sub Private Sub getValue() mvCell = Range(mcsAddress).Value2 End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 11 de março de 2015 00:32
Todas as Respostas
-
Experimente criar uma variável local e monitore-a regularmente:
'Altere o endereço da célula que deseja monitorar: Const mcsAddress As String = "A1" Dim mvCell As Variant Private Sub Worksheet_Activate() getValue End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Range(mcsAddress).Value2 <> mvCell Then Application.EnableEvents = False MsgBox "Valor alterado!", vbExclamation getValue Application.EnableEvents = True End If End Sub Private Sub getValue() mvCell = Range(mcsAddress).Value2 End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 11 de março de 2015 00:32
-
-
Boa noite Felipe, estou tentando adaptar este código para quando o valor da célula A1 for 0 ou 1, ele acione a macro, porém a célula é alterado por fórmula como no exemplo anterior e preciso que ela acione a macro somente uma vez quando o valor da célula alterar pra 1
Const mcsAddress As String = "A1"
Dim mvCell As Variant
Private Sub Worksheet_Activate()
getValue
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Range(mcsAddress).Value2 <> mvCell Then
Application.EnableEvents = False
Call OpenProgram
getValue
Application.EnableEvents = True
End If
End Sub
Private Sub getValue()
mvCell = Range(mcsAddress).Value2
End Sub
- Editado José Barcelos sábado, 1 de setembro de 2018 01:25