Muitas vezes os usuários necessitam saber a hora ou a data em que a informação foi inserida na tabela, ainda mais quando esta é compartilhada com outras pessoas. Esta ação, até então impossível, pode ser feita através de um pequeno comando VBA, ao qual poderá facilitar, e muito, seus trabalhos nesta ferramenta.

O Excel dispõe de muitas funções no que tange a datas e/ou horas, porém, nenhuma delas retorna a data e a hora em que a célula foi alterada, sem que esta seja mudada até o momento de sua próxima alteração. A função =Agora(), por exemplo, retorna-as no momento em que é aplicada, no entanto, toda vez que a planilha for aberta, a mesma troca para a respectiva data e hora atuais. Para que possamos fazer isto, então, a única solução é utilizarmos um comando VBA, muito prático de ser usado.

Suponha que tenhas uma tabela em que serão colocadas numerações de documentos muito importantes, e necessita-se, portanto, a respectiva data ou hora de sua alteração, afim de que se tenha um maior controle e segurança. Siga o passo a passo e aprenda como proceder:

  1. Crie a tabela com os dois títulos: N° Documento e Hora de Modificação.

  1. Localize na aba Desenvolver a opção Visual Basic e clique sobre ela.

  1. Na janela de configuração VBA, dê dois cliques em Plan1.

  1. No quadro de edição que retornará, cole o seguinte comando:
Private Sub Worksheet_Change(ByVal Alvo As Range)
  Dim limite_maximo As Integer
  limite_maximo = 1000 ' altere aqui para limitar a última linha
  If Alvo.Cells.Count > 1 Or IsEmpty(Alvo) Then Exit Sub
    ' faz nada se mais de uma célula modificada ou se deu delete
  If Alvo.Column <= 26 And Alvo.Row >= 1 And Alvo.Row <= limite_maximo Then
    ' o if acima garante que a célula modificada está dentro do intervalo definido: A1:Z1000
    ' desliga captura do evento change
  Application.EnableEvents = False
    ' muda a célula C da linha correspondente
  Alvo.Offset(0, 2).Value = Time()  'Troque por Date() se quiser que mostre a data ao invés do horário
    ' religa a captura de eventos
  Application.EnableEvents = True
  End If
End Sub

  1. Após aplicado o comando, pode fechar a janela de comandos VBA e testar a tabela. Perceba que ao digitar um suposto número de documento, a hora será dada ao lado, sendo modificada toda vez que os dados forem alterados.

Obs.: O comando explicado retorna somente a hora da edição da célula, caso queira que o mesmo retorne a data desta modificação, basta trocar Time(), presente no comando, por Date(). É possível mesclar também. Gosto de colocar para que o horário seja exibido na célula C1, por exemplo, e a data na célula D1. Assim fica um registro mais completo.

O código é este abaixo. Experimente =)

Private Sub Worksheet_Change(ByVal Alvo As Range)
  Dim limite_maximo As Integer
  limite_maximo = 1000 ' altere aqui para limitar a última linha
  If Alvo.Cells.Count > 1 Or IsEmpty(Alvo) Then Exit Sub
    ' faz nada se mais de uma célula modificada ou se deu delete
  If Alvo.Column <= 26 And Alvo.Row >= 1 And Alvo.Row <= limite_maximo Then
    ' o if acima garante que a célula modificada está dentro a2:a100
    ' desliga captura do evento change
  Application.EnableEvents = False
    ' muda a célula C da linha correspondente
  Alvo.Offset(0, 2).Value = Time() ' Registra a hora
  Alvo.Offset(0, 3).Value = Date() ' Registra a data
    ' religa a captura de eventos
  Application.EnableEvents = True
  End If
End Sub

Agora, todo dado digitado na coluna de documentos retornará a sua respectiva data ou hora na coluna correspondente. Vale lembrar que o comando foi configurado apenas para as duas colunas em específico, caso digitares dados em outras colunas da tabela, a data não será retornada. Enfim, com o uso de simples comandos VBA é possível realizar atividades aparentemente impossíveis.

Problemas com o download?

Veja nosso tutorial e saiba como resolver qualquer tipo de problema que você enfrentar para baixar, abrir ou executar nossas planilhas.