Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por rit 08 Jan 2019 às 12:32
Membro 2 Estrelas
Mensagens: 164
Reputação: 5
#39878
Bom dia Amigos,

Tenho uma planilha que marca a hora em que uma determinada coluna é alterada e joga essa data em outra planilha, isso dentro de uma mesma pasta, o problema é que toda vez que eu altero uma linha ele substitui a ultima alteração, gostaria de saber se tem como eu gerar o historico de alterações gravando até 3 datas por linha, ou seja as tres primeiras alterações na linha que eu alterar ele gere um historio..

Alguem consegue me ajudar com isso?

Obrigado!
Avatar do usuário
Por Jimmy 08 Jan 2019 às 18:01
Membro 3 Estrelas
Mensagens: 231
Reputação: 141
#39903
Rit,

Não parece difícil mas você tem que passar mais detalhes.

Anexe um modelo da planilha funcionando da forma atual, uma explicação desse funcionamento, e como você gostaria que ela passasse a funcionar.

Assim ficará mais fácil te ajudar.

Jimmy San Juan
Por rit 09 Jan 2019 às 12:00
Membro 2 Estrelas
Mensagens: 164
Reputação: 5
#39935
Não existe um modelo ainda estou moldando isso, mas eu apenas preciso armazenar uma data de modificação para ter um historico da forma que eu estou fazendo ele sempre altera a data não existe um armazenamento, ja viu algo parecido com isso?

Preciso que quando uma determinada celula seja alterada seja registrado essa data e fique armazenada e se for alterada no mesmo dia não registre mais, apenas se for alterado em outro dia ai sim registre..
Por babdallas 09 Jan 2019 às 14:50
Membro 5 Estrelas
Mensagens: 1366
Reputação: 632
#39946
Só verificar se a data atual (sem as horas, somente dia, mês e ano) é diferente da data da célula. Se for diferente, registra a data. Se for igual, não registra.
Por rit 10 Jan 2019 às 08:29
Membro 2 Estrelas
Mensagens: 164
Reputação: 5
#39974
Consegue me escrever a linha de código que faria isso? um exemplo?

Eu estou usando o evento Worksheet_Change(ByVal Target As Range) quando ele altera a coluna O ele registra a data da alteração cruzando linha e coluna

Exemplo:

Código: Selecionar todosIf Target.Column = 15 Then
If Plan1.Range("O" & Target.Row).Value <> "" Then

Planilha4.Range("B" & Target.Row).Value = Plan1.Range("E" & Target.Row).Value
Avatar do usuário
Por Jimmy 10 Jan 2019 às 09:30
Membro 3 Estrelas
Mensagens: 231
Reputação: 141
#39976
Olá Rit,

Coloque a macro abaixo no evento CHANGE da planilha a ser monitorada.

Altere a quantidade (variável QTD da macro) e o nome da planilha que receberá o registro. (objeto ONDE).

Quando algo é alterado na coluna "O" da planilha monitorada, a macro olha para a mesma linha da planilha Plan4. Se já tiver a quantidade de registros máximo (no meu exemplo, 5), ela apaga a mais antiga, da coluna A, e registra. Se o conteúdo a ser registrado foi igual ao anterior, ele não registra (mesma data, por exemplo).

Código: Selecionar todosPrivate Sub Worksheet_Change(ByVal Target As Range)

Set Inter = Intersect(Target, Range("O:O"))
If Not Inter Is Nothing Then
    Qtd = 5  'Define a quantidade de colunas de registro
    Set Onde = Sheets("Plan4")
    For Each Cel In Inter
        Lin = Cel.Row
        Col = Onde.Cells(Lin, Columns.Count).End(xlToLeft).Column
       
        Cont = Int(Now())                                       'Define o conteúdo a ser registrado
        If Onde.Cells(Lin, Col).Value <> Cont Then   'Não faz registro igual ao anterior
            If Col >= Qtd Then                                  'Vai precisar apagar células
                Onde.Range(Cells(Lin, 1), Cells(Lin, Col - Qtd + 1)).Delete Shift:=xlToLeft
                Col = Qtd
            Else
                If Cells(Lin, Col) <> "" Then Col = Col + 1
            End If
            Onde.Cells(Lin, Col).Value = Cont        'Registra conteúdo
       
        End If
    Next
End If
End Sub


Teste e de retorno.

Jimmy San Juan
Por rit 10 Jan 2019 às 10:51
Membro 2 Estrelas
Mensagens: 164
Reputação: 5
#39979
Cara desculpa meu baixo conhecimento mas eu não consegui adaptar a minha necessidade, estou anexando um "exemplo" do que eu preciso, se puder me ajudar com isso ficaria agradecido.

Essa planilha em anexo faz o seguinte: Quando alguma linha da coluna O possui um texto especifico ele grava na planilha HISTORICO e abre uma tela de e-mail, quando eu retiro esse item ele apaga da planilha historico, queria manter esse historico... se possivel.
Apenas usuários registrados podem ver ou baixar anexos.