Control de tiempo celda

Buenas tardes señores (as) expertos, tengo una macro que encontré en la web, a quien reconozco su intelectualidad y agradezco su aporte a la comunidad quien hace uso de esta información.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim dato_ingresado As String
Dim dato_hora As String
On Error Resume Next
If Target.Column = 3 Then
dato_ingresado = Range("C" & ActiveCell.Row - 1)
datohora = Range("B" & ActiveCell.Row - 1)
If datohora = Empty And dato_ingresado <> Empty Then
hora = Format(Now, "dd/mm/yyyy hh:mm:ss AM/PM")
Range("b" & ActiveCell.Row - 1).Value = hora
End If
End If
End Sub


Lo que hace la macro es colocar fecha y hora en la columna B después de escribir un valor en la columna C, pero esto solo sucede al dar enter, como ya es de nuestro conocimiento en Excel al dar enter el cursor baja a la celda siguiente, lo que necesito es que me ponga la fecha independientemente hacia donde mueva el cursor, ya que al digitar no utilizo la tecla enter, utilizo las teclas del cursor y estas pueden moverse a cualquier dirección.

1 Respuesta

Respuesta
1

Esta macro en realidad se ejecuta cada vez que 'seleccionas' alguna celda de la col C o 3.

Si necesitas que se ejecute cada vez que 'cambia' el contenido de una celda debes utilizar:

Private Sub Worksheet_Change(ByVal Target As Range)



Gracias Elsa, hice el cambio que me sugieres pero no hace lo que deseo, sigue funcionando igual, la macro la cambie y me quedo asi.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dato_ingresado As String
Dim dato_hora As String
On Error Resume Next
If Target.Column = 3 Then
dato_ingresado = Range("C" & ActiveCell.Row - 1)
datohora = Range("B" & ActiveCell.Row - 1)
If datohora = Empty And dato_ingresado <> Empty Then
hora = Format(Now, "dd/mm/yyyy hh:mm:ss AM/PM")
Range("b" & ActiveCell.Row - 1).Value = hora
End If
End If
End Sub

Pero no me funciona como lo deseo, y lo que quiero es que al digitar un valor en la Columna C me de la fecha en la columna B, usando las las teclas del cursor, y no darle enter, reitegro yu apoyo.

Entonces mantené el evento Selection_Change pero quítale el -1 porque así como lo tenías te considera la celda de la fila anterior, no la que acabas de seleccionar.

Te quedaría así:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim dato_ingresado As String
Dim dato_hora As String
On Error Resume Next
'solo se ejecuta en col C
If Target.Column = 3 Then
 dato_ingresado = Range("C" & ActiveCell.Row)
 datohora = Range("B" & ActiveCell.Row)
 If datohora = Empty And dato_ingresado <> Empty Then
 hora = Format(Now, "dd/mm/yyyy hh:mm:ss AM/PM")
 Range("b" & ActiveCell.Row).Value = hora
 End If
End If
End Sub

Pero te vuelvo a recordar que este evento se ejecuta al 'seleccionar la celda'.... quizás todavía no ingresaste ningún dato.

Si se tiene que colocar la fecha 'luego de ingresar un dato' debes utilizar el evento Change.

Excelente Elsa, lo solucione, agradezco tu valiosa colaboración la explicación me ayudo a comprender lo que deseaba hacer, la macro me quedo de la siguiente manera:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim dato_ingresado As String
Dim dato_hora As String
On Error Resume Next
'solo se ejecuta en col D
If Target.Column = 4 Then
dato_ingresado = Range("C" & ActiveCell.Row)
datohora = Range("B" & ActiveCell.Row)
If datohora = Empty And dato_ingresado <> Empty Then
hora = Format(Now, "dd/mm/yyyy hh:mm:ss AM/PM")
Range("b" & ActiveCell.Row).Value = hora
End If
End If
End Sub

Solo cambie la columna y me funciono, mil gracias..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas