Macro al hacer click?

31/05/2005 - 09:51 por Aprendiz | Informe spam
En la celda A2 tengo la siguiente fórmula:
=si(B2<>"";Ahora();"") --> (A2 tiene formato de horas)
El fin es que cuando se anote algo en la celda B2, se activa la hora actual
de la anotación en A2. y así sucesivamente a3-b3, a4-b4, etc...
El problema está en que se actualiza constantemente y por tanto no se
obtiene el resultado deseado
se podria hacer una macro que al dar "intro" sobre la celda b2 (y
sucesivas... por cierto), el dato de la formula en A2 (y sucesivas) se
convierta en fijo (p.e. pegando valores), u otras soluciones.
Gracias anticipadas.

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
31/05/2005 - 10:02 | Informe spam
"Aprendiz" escribió en el mensaje news:
En la celda A2 tengo la siguiente fórmula:
=si(B2<>"";Ahora();"") --> (A2 tiene formato de horas)
El fin es que cuando se anote algo en la celda B2, se activa la hora actual
de la anotación en A2. y así sucesivamente a3-b3, a4-b4, etc...
El problema está en que se actualiza constantemente y por tanto no se
obtiene el resultado deseado
se podria hacer una macro que al dar "intro" sobre la celda b2 (y
sucesivas... por cierto), el dato de la formula en A2 (y sucesivas) se
convierta en fijo (p.e. pegando valores), u otras soluciones.
Gracias anticipadas.





Mira si te sirve esto:

http://www.excelesp.com/eventos01.htm#eventos01_3

Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
#2 KL
31/05/2005 - 10:37 | Informe spam
Hola chicos,

Mi version del codigo propuesto por Fernando:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target.Columns(1).Offset(, 1) = Now
Application.EnableEvents = True
End Sub

Basicamente lo que he hecho ha sido:
1) reemplazar Target.Parent con Me
2) reducir el rango donde se pondria la fecha y hora de Target a
Target.Columns(1). Esto eliminaria el problema (tal vez remoto) que se
produciria al seleccionar un rango multicolumna (p.ej A2:D2) e intentar
editar la celda activa (A2) - hay gente a quien le gusta seleccionar una
linea y moverse con el Tab.

Tambien si se quiere que en caso de que la celda quede vacia tambien se
borre la fecha/hora se podria usar la siguiente version:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each celda In Intersect(Target, Me.Range("A:A"))
celda.Offset(, 1) = IIf(IsEmpty(celda), "", Now)
Next celda
Application.EnableEvents = True
End Sub

Saludos,
KL


"Fernando Arroyo" wrote in message
news:
"Aprendiz" escribió en el mensaje
news:
En la celda A2 tengo la siguiente fórmula:
=si(B2<>"";Ahora();"") --> (A2 tiene formato de horas)
El fin es que cuando se anote algo en la celda B2, se activa la hora
actual
de la anotación en A2. y así sucesivamente a3-b3, a4-b4, etc...
El problema está en que se actualiza constantemente y por tanto no se
obtiene el resultado deseado
se podria hacer una macro que al dar "intro" sobre la celda b2 (y
sucesivas... por cierto), el dato de la formula en A2 (y sucesivas) se
convierta en fijo (p.e. pegando valores), u otras soluciones.
Gracias anticipadas.





Mira si te sirve esto:

http://www.excelesp.com/eventos01.htm#eventos01_3

Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
#3 Aprendiz
31/05/2005 - 12:07 | Informe spam
Gracias a los dos, funciona bien pero
Me gustaria que fuera al revés es decir, que se pusiera la hora en la
columna A y no en la By tambien que el formato fuera de hora
solamente --> 12:09:17
La macro lo pone con formato de fecha y hora 31/05/2005 12:09

¡Estupendos expertos!, os doy las gracias de nuevo


"KL" escribió en el mensaje
news:OQ$$
Hola chicos,

Mi version del codigo propuesto por Fernando:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target.Columns(1).Offset(, 1) = Now
Application.EnableEvents = True
End Sub

Basicamente lo que he hecho ha sido:
1) reemplazar Target.Parent con Me
2) reducir el rango donde se pondria la fecha y hora de Target a
Target.Columns(1). Esto eliminaria el problema (tal vez remoto) que se
produciria al seleccionar un rango multicolumna (p.ej A2:D2) e intentar
editar la celda activa (A2) - hay gente a quien le gusta seleccionar una
linea y moverse con el Tab.

Tambien si se quiere que en caso de que la celda quede vacia tambien se
borre la fecha/hora se podria usar la siguiente version:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each celda In Intersect(Target, Me.Range("A:A"))
celda.Offset(, 1) = IIf(IsEmpty(celda), "", Now)
Next celda
Application.EnableEvents = True
End Sub

Saludos,
KL


"Fernando Arroyo" wrote in message
news:
"Aprendiz" escribió en el mensaje
news:
> En la celda A2 tengo la siguiente fórmula:
> =si(B2<>"";Ahora();"") --> (A2 tiene formato de horas)
> El fin es que cuando se anote algo en la celda B2, se activa la hora
> actual
> de la anotación en A2. y así sucesivamente a3-b3, a4-b4, etc...
> El problema está en que se actualiza constantemente y por tanto no se
> obtiene el resultado deseado
> se podria hacer una macro que al dar "intro" sobre la celda b2 (y
> sucesivas... por cierto), el dato de la formula en A2 (y sucesivas) se
> convierta en fijo (p.e. pegando valores), u otras soluciones.
> Gracias anticipadas.
>
>

Mira si te sirve esto:

http://www.excelesp.com/eventos01.htm#eventos01_3

Un saludo.


Fernando Arroyo
MS MVP - Excel


Respuesta Responder a este mensaje
#4 KL
31/05/2005 - 12:50 | Informe spam
Hola Aprendiz,

Me gustaria que fuera al revés es decir, que se pusiera la hora en la
columna A y no en la B



Prueba esto:

He cambiado los rangos A:A y B:B de sitio y he modificado el macro un poco
mas para evitar el error que se produce al intentar modificar datos en ambas
columnas a la vez (p.ej. borrar todo)

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("B:B")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Intersect(Target, Me.Range("B:B")).Offset(, -1) = Now
Application.EnableEvents = True
End Sub

o bien

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("B:B")) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each celda In Intersect(Target, Me.Range("B:B"))
celda.Offset(, -1) = IIf(IsEmpty(celda), "", Now)
Next celda
Application.EnableEvents = True
End Sub

y tambien que el formato fuera de hora solamente --> 12:09:17
La macro lo pone con formato de fecha y hora 31/05/2005 12:09



Te recomiendo que sigas usando la funcion now, solo que formatees la columna
[A] para que muestre el valor en el formato hh:mm:ss o el que tu prefieras.
Asi veras lo que quieres sin perder la informacion adicional que igual
necesites en el futuro. Y si no, sustituye la funcion NOW por la TIME.

Saludos,
KL
Respuesta Responder a este mensaje
#5 Aprendiz
31/05/2005 - 13:18 | Informe spam
He cambiado now por time
Ahora es perfecto!
gracias KL

"KL" escribió en el mensaje
news:%
Hola Aprendiz,

>Me gustaria que fuera al revés es decir, que se pusiera la hora en la
>columna A y no en la B

Prueba esto:

He cambiado los rangos A:A y B:B de sitio y he modificado el macro un poco
mas para evitar el error que se produce al intentar modificar datos en


ambas
columnas a la vez (p.ej. borrar todo)

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("B:B")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Intersect(Target, Me.Range("B:B")).Offset(, -1) = Now
Application.EnableEvents = True
End Sub

o bien

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("B:B")) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each celda In Intersect(Target, Me.Range("B:B"))
celda.Offset(, -1) = IIf(IsEmpty(celda), "", Now)
Next celda
Application.EnableEvents = True
End Sub

>y tambien que el formato fuera de hora solamente --> 12:09:17
> La macro lo pone con formato de fecha y hora 31/05/2005 12:09

Te recomiendo que sigas usando la funcion now, solo que formatees la


columna
[A] para que muestre el valor en el formato hh:mm:ss o el que tu


prefieras.
Asi veras lo que quieres sin perder la informacion adicional que igual
necesites en el futuro. Y si no, sustituye la funcion NOW por la TIME.

Saludos,
KL




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida