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