A maneira mais fácil de fazer isso é colocar uma função Worksheet_Change
no código da planilha em Sheet1
Ao clicar com o botão direito do mouse na tabela "Planilha1" e selecionar o código de visualização.
Explicação
Podemos usar algo assim para rastrear as alterações na Planilha1:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
MsgBox ("Value changed")
End If
End Sub
Isso apenas procura por alterações na planilha e retorna a mudança como a variável Target
.
Em seguida, verificamos o endereço da alteração com Target.Address
, que é retornado no formulário $A$1
.
Uma simples instrução If
, em seguida, verifica se o alvo é alguma das nossas células especificadas.
Agora precisamos obter o valor para a outra planilha.
Primeiro eu quero algumas variáveis. Eu os chamo de rSave (o intervalo para salvar o valor) e iRow (Integer que captura a última linha usada.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer, rSave As Range
Set rSave = Worksheets("Sheet2").Range("A1")
If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
iRow = rSave(Rows.Count).End(xlUp).Row
rSave.Offset(iRow).Value = Target.Value
'Target.Value = ""
End If
End Sub
Nós definimos a variável range para a célula acima de onde queremos começar a colocar números.
Verificamos a alteração e definimos iRow
como a última linha usada da coluna na folha2.
Nós compensamos nosso alcance com a linha de iRow
e escrevemos nosso número alvo.
Em seguida, queremos definir o valor em Sheet1 de volta para nada. No entanto, isso dispara uma alteração nas células que estamos rastreando e basicamente causará um loop infinito.
Para contornar isso, primeiro verificamos se a célula não está vazia antes de tentar novamente.
E finalmente terminamos com isso:
Resposta real
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer, rSave As Range
Set rSave = Worksheets("Sheet2").Range("A1")
If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
If Target.Value <> "" Then
iRow = rSave(Rows.Count).End(xlUp).Row
rSave.Offset(iRow).Value = Target.Value
Target.Value = ""
End If
End If
End Sub
Boa sorte!
Observe que isso salvará Anything inserido nas células da Sheet1. Você pode limitar isso simplesmente adicionando um And
no If Target.Value <> "" Then
e verificar mais critérios, como números específicos ou semelhantes.