Ir ao conteúdo
  • Cadastre-se
tiagonmuniz

Ativando Macro quando o valor de uma celula mudar

Recommended Posts

Bom dia!

Preciso de uma macro que ative outra macro, sempre que o valor de uma celula mudar.

Exemplo,

Sempre que alterar o valor inserido em E4 a macro deve ativar a macro COPI_01

Obs: Já tenho um evento na planilha ativando outras macros, porém com resultados expecificos.

AGORA QUERO APENAS QUE QUANDO A CELULA E4 FOR ALTERADA QUE EXECUTE A MACRO.

OBS: M4 É O RESULTADO DE UM PROCV INSERIDO EM E4. POR ISSO TODA VEZ QUE MUDAR E4 VAI DAR UM RESULTADO DIFERENTE, ESTE POR VEZ É COPIADO E COLADO NA CELULA G19 ONDE VAI ATIVAR OUTRA MACRO.

A IDEIA É QUE ESTA MACRO COPIA_1 SEJA ATIVADA SEMPRE QUE ALTERAR O E4.

ELA FUNCIONA COM UM RESULTADO, porém SE EU ALTERAR PARA OUTRO ELE NAO FUNCIONA.

Sub COPIA_01()

'

' COPIA CELULA E COLA APENAS VALOR SEM FORMULA

'

Range("M4").Select

Selection.Copy

Range("G19").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

End

End Sub

INSERI NA PLANILHA O SEGUINTE CODIGO.

Private Sub Worksheet_Change(ByVal Target As Range, ByVal o_que_mudou As Range)

Select Case Target.Address

Case "$G$19"

If UCase(Target.Value) = "-2032" Then Call MI_2032_000000000000001

End Select

Select Case Target.Address

Case "$G$19"

If UCase(Target.Value) = "-876" Then Call XXX_ORG_DESDOBRAMENTO_1

End Select

Select Case Target.Address

Case "$G$19"

If UCase(Target.Value) = "-922" Then Call XXX_ORG_DESDOBRAMENTO_1

End Select

Select Case Target.Address

Case "$G$19"

If UCase(Target.Value) = "-1155" Then Call XXX_ORG_DESDOBRAMENTO_1

End Select

Select Case Target.Address

Case "$G$19"

If UCase(Target.Value) = "-3565" Then Call XXX_ORG_DESDOBRAMENTO_1

End Select

Select Case Target.Address

Case "$G$19"

If UCase(Target.Value) = "-2439" Then Call XXX_ORG_DESDOBRAMENTO_1

End Select

Select Case Target.Address

Case "$G$19"

If UCase(Target.Value) = "-2850" Then Call XXX_ORG_DESDOBRAMENTO_1

End Select

Select Case Target.Address

Case "$G$19"

If UCase(Target.Value) = "-3482" Then Call XXX_ORG_DESDOBRAMENTO_1

End Select

End Sub

' ATIVA A MACRO COPIA_01

If o_que_mudou.Address = "$E$4" Then

Application.EnableEvents = False ' importantíssimo !!

Call COPIA_01

Application.EnableEvents = True ' importantíssimo !!

End If

End Sub

AGUARDO AJUDA DOS AMIGOS.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então meu amigo. eu tenho buscado uma forma de fazer esse processo, achei esta uma forma que pode dar certo, o que preciso na verdade é que o resultado da PROCV execute a macro, porém nao acontece isso. e cada vez que mudo C4 eu troco o codigo de busca do procv. por isso achei que seria a forma mais fácil.

mas aceito sugestão, desde que funcione o que preciso, eu tinha em G19 a validação de dados e selecionando a macro executa, se eu digitar na celula tb executa, porém como resultado de procv não executa macro, então toda vez que M4 mudar (resultado) ele vai disparar uma macro, e o que comanda é C4, desta forma, se tiver uma ideia melhor que resolva eu aceito de todo coração ahsuahsahs.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia !!

Lembre se, caso dependa de um resultado de formula acione uma macro o evento para isso tem que ser o Evento Calculate.

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então amigo, eu nao sei usar o calculate.

Minha planilha ta bem complexa, mas ainda estou no arroz com feijão.

não faço ideia de como funciona uma macro com o Calculate.

Se puder explicar ou dar uma ideia. preciso que o M4 ative as macros...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia!!

Quando se usa Worksheet_Change, espera se que haja alguma alteração em um célula.

Mas as formulas retornam resultado, para ter o efeito de mudança ou alteração em uma célula com formulas, usa se outros metodos.

Leia:

http://pplware.sapo.pt/pessoal/informatica/dicas-de-vba-%E2%80%93-eventos-em-excel/

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

então e e consigo usar ele em varias opções, exemplo, eu ja tenho umas macros que são ativadas porém ao digitar, agora para o resultado da procv é que ta complicando eu n to entendendo como funciona! achei uns exemplos porém para toda a planilha, eu preciso de um que execute apenas a celula expecifica e com o calculate é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dim Numero As Integer

Private Sub Worksheet_Calculate()

'Application.EnableEvents = False

' esta instrução deixa de ser necessária por a condição seguinte deixar de se verificar

If Numero <> Range("M4") Then

Numero = Range("M4")

Select Case Numero

Case 1

Call COPIA_01

Case Else

End Select

End If

'Application.EnableEvents = True

End Sub

ACHO QUE ASSIM VAI DAR CERTO... VOU TESTAR HJE A NOITE NA EMPRESA.

COLOCO NO WORKSHEET NÉ? OU EM MODULO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia!!

Veja um exemplo generico..

Private Sub Worksheet_Calculate()
Static OldVal1 As Variant
If Range("E4").Value <> OldVal1 Then
OldVal1 = Range("B42").Value
Call Macro1
'.....
End If
End Sub

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, a macro funcionou, porém fica em loop constantemente. Por que serÁ? A ideia era que ela acionace apenas quando fosse alterado o valor em c4, mas parace que ela segue sempre em loop atÉ dar erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com o mesmo problema, ele entra em um looping infinito até dar erro.

Como poderia fazer para rodar a macro 1 vez quando os valores estiverem iguais, no meu caso o valor varia entre 0 e 1, quando estiver em 1 gostaria que rode uma vez, depois volta para 0 não roda e quando voltar em 1 roda novamente mais somente uma execução. Segue programação e arquivo.

 

Private Sub Worksheet_Calculate()
Static OldVal1 As Variant
If Range("C33").Value <> OldVal1 Then
    OldVal1 = Range("H24").Value
    Application.Goto Reference:="Tab_Ciclo"
    ActiveWindow.SmallScroll Down:=3
    Selection.Copy
    Application.Goto Reference:="A_fim"
    Selection.End(xlUp).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Sheet1").Select
    ActiveCell.Offset(0, 5).Range("A1").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
    ActiveCell.Offset(1, 0).Range("A1").Select
End If
End Sub
 

Teste 1_macro.xlsx

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×