Insira um valor em uma célula de uma planilha, o mesmo valor obtém login em outra planilha e cria um registro de valores linha após linha [fechado]

-1

Espero que alguém possa me ajudar aqui ...

Se eu tiver essas 4 células, sempre que eu inserir um valor em qualquer uma dessas células, ele criará um log em outra planilha da mesma pasta de trabalho.

Por exemplo, se eu tiver as células B1, C2, B3 e A2 na Folha 1. Se eu inserir um valor em qualquer uma dessas células e pressionar Enter, o mesmo valor aparecerá ... digamos Celular A2 na Folha 2. E de volta à Folha 1, depois de pressionar enter depois que um valor for inserido em uma das 4 células, o valor desaparecerá e aguardando que eu digite o próximo valor para qualquer uma dessas 4 células. Portanto, a sequência é ... insira um valor em uma das 4 células na Folha 1, ele será automaticamente logado na Folha 2 A2. O próximo valor na Folha 1 será registrado na Folha 2 A3 e desce a linha da Folha 2 ... sempre que eu pressionar Enter (tendo em mente que o valor na Folha 1 de 1 das 4 células precisa ser aperte enter).

    
por ChaseMax 18.11.2016 / 05:45

1 resposta

2

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.

    
por 18.11.2016 / 12:20