Ir ao conteúdo
  • Cadastre-se

Ativando Macro quando o valor de uma celula mudar


Posts recomendados

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.

Link para o comentário
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.

Link para o comentário
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

Link para o comentário
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?

Link para o comentário
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?

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...