Notifications
Clear all

Planilha não chama macro ao ser alterada (dentro do VBE sim)

3 Posts
2 Usuários
0 Reactions
970 Visualizações
(@alecosta)
Posts: 4
New Member
Topic starter
 

Meus Caros,

Boa noite.
Esta é a primeira vez que posto aqui no Planilhando.

Estou recorrendo ao fórum para tentar resolver um código VBA aqui.
Por favor, poderiam dar uma olhada?

Explicando: Segue anexo uma planilha de lançamentos. A cada linha lançada, a coluna F pode conter, entre outras, as palavras "Compra" ou "Venda". Toda vez que aparecer "Compra" ou "Venda" na coluna F, as fórmulas da planilha preenchem a linha imediatamente abaixo da linha lançada, que aqui eu chamo de "linha gerada". Até aqui tudo funciona.

Na linha gerada, na coluna O, tem uma fórmula que resulta em um número. Exatamente neste ponto, eu preciso que a fórmula deixe de existir e permaneça apenas o resultado da fórmula. Depois de horas de tentativas e erros eu consegui um resultado parcial com este código:

Sub ProcCompraVenda()

Dim i As Long
Dim LastLine As String

'Localiza a última linha preenchida da planilha na coluna F
'LastLine = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastLine = Plan1.Cells(Rows.Count, 6).End(xlUp).Row

'Determina onde inicia-se a localização na coluna F
For i = 3 To LastLine

'Procura por Compra ou Venda na coluna F
If Plan1.Cells(i, 6) = "Compra" Or Plan1.Cells(i, 6) = "Venda" Then

'Seleciona célula que receberá a macro
Plan1.Cells(i + 1, 17).Select
'Executa a macro que elimina a fórmula de deixa o seu resultado
Call Macro1_EliminarFormula

End If

Next i
End Sub

O que fiz até aqui foi um código que chama uma macro e transforma uma formula em seu resultado. Agora eu preciso que a cada linha lançada, isto seja verificado. Assim:

- A cada linha lançada o código verifique se na coluna F existe as palavras "Compra" ou "Venda". Em caso positivo, o código precisa ir até a coluna O, imediatamente abaixo da linha lançada, e executar a macro contida no código acima (que transforma uma formula em seu resultado).

A inteligência esperada aqui é justamente reconhecer, a cada linha lançada, os lançamentos de "Compra" ou "Venda" na coluna F e que estes dois lançamentos representem a condição para executar a macro na coluna O da linha gerada. Isso deve resolver o problema.

OBSERVAÇÃO: O código acima quando executado de dentro do Editor VBA funciona. Ele percorre a condição por toda a planilha e executa a macro nas células corretas, MAS quando lanço uma nova linha, a macro/código (ainda não sei o que acontece) não é acionada. A condição para a macro ser acionada deveria ser orgânica, transparente para o usuário, sem eu precisar entrar no Editor VBA para disparar a macro.

NOTA1: Para não perder as fórmulas da planilha eu repiquei a coluna O na coluna Q e apliquei o código acima na coluna repicada (Q).

NOTA2: eu também gostaria de acrescentar uma tarefa a mais no código antes dele executar a macro. Hoje quando existe o lançamento de uma Compra ou Venda na coluna F, a planilha, por fórmula, multiplica, na mesma linha as células O por k (quantidade x Cotação), só depois a planilha chama a execução da macro. Eu gostaria que o código passasse a fazer esta conta antes de chamar a macro e não mais as fórmulas da planilha.

Alguém pode ajudar, por favor?

Obrigado.

Estou há dias tentando resolver isso.
Espero que possam me ajudar e desde já eu agraço imensamente!

 
Postado : 25/04/2018 7:32 pm
(@klarc28)
Posts: 971
Prominent Member
 

Se você anexar o arquivo e conseguir explicar com, no máximo, cinquenta palavras, vai agilizar para você.
Se você tiver vontade de estudar o assunto, pesquise no Youtube por:
vba executar macro ao alterar planilha

 
Postado : 25/04/2018 10:03 pm
(@alecosta)
Posts: 4
New Member
Topic starter
 

Obrigado pelo retorno Klarc28.
Vou pesquisar.

 
Postado : 26/04/2018 8:18 am