Notifications
Clear all

Acionar Worksheet_Change via Macro

11 Posts
3 Usuários
0 Reactions
1,851 Visualizações
(@jorrobeh)
Posts: 0
New Member
Topic starter
 

Bom dia amigos,

Como faço para acionar o evento Worksheet_Change após o valor do Target.Address ser alterado via macro?
Explicando em detalhes: tenho uma planilha de cadastro de venda e quero que um e-mail específico seja disparado durante execução da macro "cadastrar_venda".
É ela (macro) que vai alterar o target.address com um valor especifico com base em condicões diversas, e esse valor alterado indica qual e-mail enviar para o cliente.
Até hoje tenho feito manualmente, ou seja, ao final da macro vou na celula e clico F2+Enter para acionar o Worksheet_Change e disparar o e-mail.
Mas estou reformulando a planilha e quero automatizar esse processo.
Espero que alguém possa me ajudar ;)

Agradeço a todos!

Configuração da sub Worsheet_Change:

Sub Worksheet_Change(ByVal Target As Range)
linha = ActiveCell.Row - 1
    If Target.Address = "$AY$" & linha Then 'Celula alterada na coluna AY
        Enviar_email
    End If
End Sub
 
Postado : 16/10/2016 7:17 am
(@basole)
Posts: 487
Reputable Member
 

Use o evento calculate.
Que é acionado quando o valor de uma celula é alterado através de formula.
Ex.: Na celula AZ2 insira a formula: =AY2

E substitua o evento Change pelo Calculate:

Private Sub Worksheet_Calculate()

 If Range("AZ2") = Range("Ay2") Then
 Enviar_email
 End If
 
End Sub
 
Postado : 16/10/2016 7:57 am
(@jorrobeh)
Posts: 0
New Member
Topic starter
 

Oi Basole,
Fiz como indicou, mas a cada recalculo da planilha, o e-mail é enviado novamente.
Ou seja, qualquer alteração na planilha ativa o Calculate, gostaria de disparar o e-mail somente quando alterada a coluna AY.
Obrigado pela ajuda e aguardo mais dicas...

 
Postado : 16/10/2016 8:42 am
(@mprudencio)
Posts: 0
New Member
 

Tente esse ajuste.


Private Sub Worksheet_Calculate()

If Target.Column <> 51 Then Exit Sub

If Range("AZ2") = Range("Ay2") Then

Enviar_email

End If

End Sub

 
Postado : 16/10/2016 8:52 am
(@jorrobeh)
Posts: 0
New Member
Topic starter
 

Já havia tentado MPrudencio e entrou em loop.
Pois uma celula é vinculo da outra.
Obrigado..

 
Postado : 16/10/2016 8:58 am
(@mprudencio)
Posts: 0
New Member
 

Nao deveria pq se vc nao altera a celula da coluna AY ele deve sair do codigo.

Faz o seguinte monte uma planilha de exemplo e poste o arquivo.

 
Postado : 16/10/2016 9:18 am
(@jorrobeh)
Posts: 0
New Member
Topic starter
 

Não, verdade... fazendo com o operador <> funcionou, mas terei que adicionar uma coluna para fazer esse controle.
Não queria alterar o layot da planilha, mas se não tiver outra solução, vai ser o jeito... :/

sobre o exemplo que pediu, basicamente a macro copia os dados de uma linha do formulário de cadastro e cola na planilha vendas.
Nessa de colar é que uma célula, através de fórmula, indica com uma sigla, qual e-mail que deve ser enviado.
Daí eu vou manualmente na célula e aperto f2+Enter.
Quero tornar o envio do email automático dentro da macro.
Agradeço a ajuda até então

 
Postado : 16/10/2016 9:25 am
(@mprudencio)
Posts: 0
New Member
 

No codigo que postei nao precisa alterar nada em sua planilha, ele apenas verifica se a coluna AY sofreu alguma alteração e se sim executa a macro do contrario sai.

Nao entendi pq vc vai precisar usar outra coluna para essse fim.

Eu utilizei o recurso para a coluna, mas vc pode utilizar para uma unica celula.

 
Postado : 16/10/2016 10:17 am
(@jorrobeh)
Posts: 0
New Member
Topic starter
 

Na minha planilha, a coluna AZ tem outras informações.
Faço o Worksheet_Change usando a coluna AY & linha como target.address.
Quem sugeriu alterar o evento para Calculate e comparar a coluna AY com a AZ foi o colega Basole.
Portanto, usando esse código teria que incluir uma coluna para fazer essa comparação, que hoje não existe.
Vou postar a parte do código que exemplifica, perai...

 
Postado : 16/10/2016 5:25 pm
(@jorrobeh)
Posts: 0
New Member
Topic starter
 

Esse é meu código como está hoje:

Evento Change:

Sub Worksheet_Change(ByVal Target As Range)
linha = ActiveCell.Row - 1
    If Target.Address = "$AY$" & linha Then 'Celula alterada na coluna AY
        Enviar_email
    End If
End Sub

Parte do código onde copio e colo a venda na planilha onde ativa o Worksheet_Change

...
Application.EnableEvents = True
Range("lincontrole").Copy Sheets("Controle").Cells(Rows.Count, 1).End(3)(2)
Cells(Rows.Count, 51).End(3).Select
'SendKeys "{F2}", True
'SendKeys "{ENTER}", True
Application.EnableEvents = False
...

Esses "sendkeys" foram uma tentativa de automatizar a ação que hoje faço manualmente após cada cadastro de venda, mas não funcionou :|

 
Postado : 16/10/2016 5:31 pm
(@mprudencio)
Posts: 0
New Member
 

Disponibilize seu arquivo com dados de exemplo,

 
Postado : 16/10/2016 5:40 pm