Logo Hardware.com.br
camilahaubert
camilahauber... Novo Membro Registrado
18 Mensagens 0 Curtidas

[Resolvido] Fórmula para hora fixa de preenchimento de uma célula em especifico.

#1 Por camilahauber... 02/07/2020 - 12:40
Olá,

Gostaria de uma ajuda, tenho uma planilha e gostaria que a hora fosse atualizada toda vez que insiro algum valor em uma célula especifica.

No exemplo anexo, gostaria que fosse colocado a hora na coluna C, do momento que selecionar alguma opção da lista suspensa da coluna ou escrever algo na célula na coluna E, e também a hora que a categoria for colocada como lançada na coluna F, gostaria que fosse colocado a data e a hora na coluna H.

Mas que qualquer outra alteração feita da planilha que não seja nas colunas E e F, não modifique a hora/data.

Anexos

EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#2 Por EdsonBR
02/07/2020 - 23:27
Olá, @camilahaubert

Isso só pode ser feito através de VBA.
Clique com o botão direito na "orelha" da sua planilha e escolha "Exibir Código"

Insira o seguinte código:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Long 'colunas a deslocar p/ por a hora
If (Not Intersect(Target, [E:F]) Is Nothing) And (Target.Row >= 4) Then
Application.EnableEvents = False
d = 2 * ((Target.Column = 5) - (Target.Column = 6))
Target.Offset(0, d).Value = Time
Application.EnableEvents = True
End If
End Sub
EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#4 Por EdsonBR
05/07/2020 - 22:22
Vamos lá então, linha a linha:

1) Private Sub Worksheet_Change(ByVal Target As Range)
Evento em nível de classe de planilha, detecta alterações (_Change) feitas pelo usuário em uma ou mais células. O Excel reconhece qual ou quais sofreram alterações e as atribui ao range Target.
2) Dim d As Long
Reserva uma variável para a quantidade de colunas a se deslocar
3) If (Not Intersect(Target, [E:F]) Is Nothing) And (Target.Row >= 4) Then
Faça o que estiver abaixo somente se as alterações ocorrerem nas colunas E e F. Além disso, somente se tiverem ocorrido à partir da linha 4 em diante.
4) Application.EnableEvents = False
Desliga momentaneamente a captura de eventos enquanto ocorre atualização do valor em células, pra não dar loop infinito (essa linha poderia ser movida para baixo da próxima instrução)
5) d = 2 * ((Target.Column = 5) - (Target.Column = 6))
No VBA, um valor True retorna -1 e False retorna 0. Então, se usuário mudou o valor na coluna 5 (coluna E = "Responsável"), (Target.Column = 5) retorna -1 e (Target.Column=6) retorna 0. Então, resolvendo o algebrismo ficaria:
d=2*((-1) - (0)) = 2*(-1) = -2. Da mesma forma, se o valor foi alterado na coluna 6 ("Status") então d = 2*((0) - (-1)) = 2*(-(-1)) = 2*1 = +2
6) Target.Offset(0, d).Value = Time
A propriedade Offset de um range no VBA corresponde parcialmente à função DESLOC do Excel. Essa linha diz ao VBA para colocar o valor da hora deslocado a 0 linhas e a d colunas da célula alterada. Se foi a coluna 5, d=-2 então por ser negativo coloca o valor da hora à duas colunas à esquerda da(s) célula(s) alterada(s) (Coluna C = "Hora de Recebimento"). Se foi na coluna 6, duas colunas à direita (Coluna H = "Hora").
7) Application.EnableEvents = True
Religa a captura de novas alterações.
8) End If
9) End Sub
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal