Compartilhar via

Como executar macro quando altera o valor de uma célula sem gerar um looping infinito em programação VBA?

Anônima
2017-08-11T19:06:00+00:00

Sou leigo em programção VBA porém fiz um programação para salvar um tabela da sheet 1, na sheet 3 e contruir um "banco de dados".

 Minha programação abaixo funciona quando eu mudo o valor da célula C33 ele faz a operação, porém só ocorre quando eu realmente insiro um valor nessa célula se eu atrelar uma fórmula nessa célula ele não opera.

Eu gostaria que a operação ocorresse quando por exemplo: eu altere o valor da celula H24 e como há uma fórmula vinculada com a C33, por consequencia o valor da C33 altera também porém não faz rodar a operação em VBA.

Preciso disso pois estou fazendo um hiperlink com um equipamento e tenho apenas um fórmula na célula C33 apenas variando o valor de 0 e 1, eu queria que automaticamente quando a celula C33 tiver com 1 rode a operação.

Fiz duas programções conforme abaixo:

A primeira preciso inserir o valor da célula para que ocorra, ele não reconhece se o valor for alterado por uma fórmula (consequência da alteração em outras células).

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim KeyCells As Range

    ' The variable KeyCells contains the cells that will

    ' cause an alert when they are changed.

    Set KeyCells = Range("C33")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _

           Is Nothing Then

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

Eu consegui nessa outra progração, porém também apresenta 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.

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

Microsoft 365 e Office | Excel | Para uso doméstico | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

Resposta aceita pelo autor da pergunta

Anônima
2017-08-12T15:25:45+00:00

Olá simãosimão, tudo bem? 

Bem-vindo à Comunidade da Microsoft. 

Para obter maiores esclarecimentos sobre o seu questionamento, peço a gentileza de acessar o link abaixo que vai direcioná-lo à página da MSDN que é um fórum especialmente destinado para programação no Excel.

Se houver outras dúvidas relacionadas aos produtos Microsoft, por favor, volte a postar. Estamos à disposição.

Abraços e até mais!

Esta resposta foi útil?

0 comentários Sem comentários

2 respostas adicionais

Classificar por: Mais útil
  1. Anônima
    2017-08-16T23:21:56+00:00

    Boa noite simãosimão, tudo bem? 

    Continuamos no aguardo.

    Conte-nos se conseguiu postar a sua dúvida no fórum MSDN.

    Abraços e até mais!

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Anônima
    2017-08-15T19:59:11+00:00

    Boa tarde simãosimão, como vai?

    Conseguiu postar no fórum MSDN?

    No aguardo de mais informações. Estamos à disposição!

    Abraços e até mais!

    Esta resposta foi útil?

    0 comentários Sem comentários