Formato horas y condicionales.

07/12/2005 - 18:29 por eslait | Informe spam
Hola,

me estoy volviendo loco por poner una condición en la que, cuando la hora de
la casilla A1 formato "hh:mm"(p.ej.)
sea igual a la hora del sistema, que me escriba un cartelito que diga
"hola".
lo que intento es +si(ahora()=a1;"") pero no me hace nada.
Creo que los principales problemas son:
- la coincidencia entre ahora() y la casilla A1 nunca se cumpla puesto que,
aunque la hora/minutos coincidan,
los segundos no es posible que coincidan.¿Habría alguna forma de redondear
la hora para que solo tuviera en
cuenta los minutos (desechando las horas)?
- otra dificultad es que ahora() solo funciona cuando se acualiza alguna de
las casillas de la hoja. Por lo tanto, una vez
haya pasado la igualdad de la condición sin haber actualizado la hora, el
efecto de la condición será nula.

Creo haberme explicado bien.Espero vuestras sugerencias mientras sigo
buscando una solución.

Un saludo

eslait

Preguntas similare

Leer las respuestas

#1 KL
07/12/2005 - 21:04 | Informe spam
Hola eslait,

Creo que realmente tu problema es el numero 2 de tu lista. El primero no creo que lo sea tanto, aunque hablando de numeros de punto
flotante que son los valores de horas todo podria ser por supuesto. El tema como ya has dicho es que para que se detecte la
coincidencia la formula se debe recalcular con cierta periodicidad, cosa que no pasa normalmente.

Las opciones que se me ocurren pasan necesariamente por el uso [en mayor o menor grado] de macros.

1. Usar un macro como el siguiente:

Sub test()
Application.OnTime Sheets("Hoja1").Range("A1").Value, "Mensaje"
End Sub

Sub Mensaje()
MsgBox "Hola"
End Sub

2. Usando formula y macros

a) Pon la siguiente formula en, digamos, la celda [B1] (en [A1] tendras la hora buscada en formato de hora) de la Hoja1:

=SI(Y(HORA(AHORA())=HORA(A1);MINUTO(AHORA())=MINUTO(A1));"Hola";"")

b) pon el siguiente codigo en el modulo VBA de ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
StopBlinking
End Sub

Private Sub Workbook_Open()
StartBlinking
End Sub

c) pon el siguiente codigo en un modulo VBA estandar de tu archivo (digamos Modulo1):

Dim dtNext As Date

Sub StartBlinking()
dtNext = Now + TimeValue("00:00:01")
Application.Calculate
Application.OnTime dtNext, "StartBlinking"
End Sub

Sub StopBlinking()
Application.OnTime dtNext, "StartBlinking", schedule:=False
End Sub

d) Guarda los cambios, cierra y vuelve a abrir tu libro.


Las ventajas y desventajas de los metodos creo que seran literalmente "evidentes" cuando los pruebes.

Saludos,
KL
Respuesta Responder a este mensaje
#2 eslait
08/12/2005 - 14:53 | Informe spam
Hola KL,

La macro que me pusiste me funciona perfectamente. Tengo la suerte que la
aplicacion qu eestoy intentando hacer estoy cambiando continuamente las
celdas por lo que, cuando llega la hora determinada siempre me lo refleja
(puede ser que con un retardo de + - 5 segundos que es lo qu tardo en
cambiar una celda cuando introduzco un dato nuevo).

Si tengo algo nuevo que comentarte sobre este tema te lo ire diciendo. Ahora
voy a intentar a hacer que cada 5 minutos me avise y registre una serie de
datos. Voy a intentarlo hacer solito, gracias por todo

"KL" escribio en el mensaje
news:OdJFgl2%
Hola eslait,

Creo que realmente tu problema es el numero 2 de tu lista. El primero no
creo que lo sea tanto, aunque hablando de numeros de punto flotante que
son los valores de horas todo podria ser por supuesto. El tema como ya has
dicho es que para que se detecte la coincidencia la formula se debe
recalcular con cierta periodicidad, cosa que no pasa normalmente.

Las opciones que se me ocurren pasan necesariamente por el uso [en mayor o
menor grado] de macros.

1. Usar un macro como el siguiente:

Sub test()
Application.OnTime Sheets("Hoja1").Range("A1").Value, "Mensaje"
End Sub

Sub Mensaje()
MsgBox "Hola"
End Sub

2. Usando formula y macros

a) Pon la siguiente formula en, digamos, la celda [B1] (en [A1] tendras la
hora buscada en formato de hora) de la Hoja1:

=SI(Y(HORA(AHORA())=HORA(A1);MINUTO(AHORA())=MINUTO(A1));"Hola";"")

b) pon el siguiente codigo en el modulo VBA de ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
StopBlinking
End Sub

Private Sub Workbook_Open()
StartBlinking
End Sub

c) pon el siguiente codigo en un modulo VBA estandar de tu archivo
(digamos Modulo1):

Dim dtNext As Date

Sub StartBlinking()
dtNext = Now + TimeValue("00:00:01")
Application.Calculate
Application.OnTime dtNext, "StartBlinking"
End Sub

Sub StopBlinking()
Application.OnTime dtNext, "StartBlinking", schedule:=False
End Sub

d) Guarda los cambios, cierra y vuelve a abrir tu libro.


Las ventajas y desventajas de los metodos creo que seran literalmente
"evidentes" cuando los pruebes.

Saludos,
KL

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