Bienvenido a la mayor comunidad de usuarios EXCEL

Regístrate ahora y podrás: / 💪 Hacer preguntas a los expertos / ⬇️ Descargar ejemplos y plantillas / 🏅 Acceder a contenidos premium

Regístrate ahora

Añadir macro (de parpadeo) a la plantilla

joselica

Member
Hola,
Estoy intentando de añadir una macro a la plantilla que tengo.
He conseguido algo, pero como voy a ciegas no soy capaz de avanzar más.
Os explico:
Tengo la celda "B14" a donde pongo una fecha y me devuelve los datos en las celdas: "C15, C16 y C17".
Esta celda cuando esta bacia pone el texto "Pon la fecha" y va cambiando de color en función de si hay o no fecha.
Lo que quiero es añadir la macro de parpadeo para las celdas "C15, C16 y C17", que tiene que empezar a parpadear en cuando el valor devuelto en las celdas superan o son iguales a 46 si el valor es menor NO tiene que hacer nada..
He logrado algo en la celda "C15", pero en cuando limpio la celda "B14" el parpadeo de la celda "C15" no para y la celda no se vuelve al color gris.
Nota: Las fechas que uso para las comprobaciones son 02; 03 y 04.07.2020.
Adjunto el documento.
Gracias de antemano por vuestra ayuda.
Saludos,
 

Adjuntos

  • CONTROL DESAYUNOS 17.11.2020 - parpadeo ERROR.xlsm
    60.5 KB · Vistas: 4

Héctor Miguel

Well-known member
He logrado algo en la celda "C15", pero en cuando limpio la celda "B14" el parpadeo de la celda "C15" no para y la celda no se vuelve al color gris
mandaste tu ejemplo con proteccion en el libro (el de la hoja va en el codigo) {+} una hoja oculta
esto se queda de tu lado, pero... si esperas ayuda sobre tu modelo... (habria que analizar cualquier implicacion inconveniente ?)

deja de cambiar colores por codigo "duro y directo", en su lugar, aplica este viejo truco (+/- de 1999)

1) selecciona las celdas [C15:C17] ("C15" debera quedar como la celda activa) y aplica un formato condicional por formula
- formula: =(c15>=46)*(residuo(segundo(ahora()),2)=0)
- aplica formatos a tu gusto (fuente, color, bordes, trama, etc.)
- este formato sera el que se aplique cuando se cumpla la condicion ( >= 46 )
- y la ventaja es que NO se vacia la pila de niveles para des-hacer / undo / ctrl+Z

2) copia>pega (o escribe) estas instrucciones...
- en un modulo de codigo estandar:
Código:
Public Siguiente As Date
Sub IniciarParpadeo()
  Siguiente = Now + TimeSerial(0, 0, 1)
  Worksheets(1).Range("a1").Calculate
  Application.OnTime Siguiente, "IniciarParpadeo"
End Sub
Sub DetenerParpadeo(): On Error Resume Next
  Application.OnTime Siguiente, "IniciarParpadeo", Schedule:=False
End Sub

- en el modulo de codigo del libro (ThisWorkbook)
Código:
Private Sub Workbook_Open()
  IniciarParpadeo
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  DetenerParpadeo
End Sub

3) observa que en la macro 'IniciarParpadeo' (modulo normal)...
- hay una linea que dice... Worksheets(1).Range("a1").Calculate
-> si a tu modelo le afecta que cada TimeSerial(hrs, min, seg) se este re/calculando la hoja1 del libro
- - puedes modificar dicha instruccion a... Application.ScreenUpdating = True
-> la diferencia entre una instruccion y otra es que
- - con el ScreenUpdating... veras un parpadeo general constante de la pantalla y del cursor/mouse
- - con el Calculate... solo veras el ligero parpadeo del mouse/cursor, pero... el re/calculo del modelo podria...
-> solo para variar... (parece que) todo tiene sus pros y contras (decide tu cual es cual)
 

joselica

Member
Hola Héctor Miguel,
Gracias por tu ayuda.
Ire aplicando las propuestas tuyas y te comentare.
Mientras tanto te deseo un buen fin de semana.
Saludos,
 

joselica

Member
Jola Hector,
Acabo de hacer lo que me has propuesto.
Ahora no se si antes tenia que borrar los antiguos datos sobre la mecro PARPADEO.
Te adjunto el documento desbloqueado en todos los aspectos para que le eches un vistazo y me comentas que es lo que he hecho mal.
Saludos,
 

Adjuntos

  • CONTROL DESAYUNOS 17.11.2020 - ayuda HECTOR.xlsm
    58.5 KB · Vistas: 1

Héctor Miguel

Well-known member
documento desbloqueado en todos los aspectos para que le eches un vistazo y me comentas que es lo que he hecho mal
1) puse como comentario las macros que no quedan de aplicacion (las sustituye lo sugerido)

2) no habias asignado formatos/colores/... al formato condicional del rango [C15:C17]

3) puse un valor forzado en la celda [C15] solo como muestra
- agregue un +50 al final de esa formula
 

Adjuntos

  • otro de blinking (exceluciones).xlsm
    52.7 KB · Vistas: 4

joselica

Member
Hola Hectór Miguel,
Muchisimas gracias por tu ayuda.
Me pensaba yo que era tal como lo decias cuando me contestastes por primera vez (sustituir), pero con la idea de seguirte los pasos me olvide.
Ahora si que esta todo tal como lo deseaba.
Saludos,
 

joselica

Member
Hola Hectór Miguel,
Un ultimo detalle que no tiene mucha importancia pero ayuda mucho.
En la hoja "LISTADO" introduzco la fecha en la celda "K7", como veras al devolver los datos parpadea bastante.
He aplicado el metodo: "Application.ScreenUpdating" pero no me hace mucho caso.
Es posible que he puesto mal el metodo?.
Saludos,
 

Héctor Miguel

Well-known member
En la hoja "LISTADO" introduzco la fecha en la celda "K7", como veras al devolver los datos parpadea bastante.
He aplicado el metodo: "Application.ScreenUpdating" pero no me hace mucho caso
en realidad, usar .calculate o .screenupdating no cambia el hecho de que hay un procedimiento recursivo y constante a cada segundo

para suspender el parpadeo (en pantalla/mouse/...) habria que suspender el parpadeo de la/s ceda/s (o sea, ese procedimiento)

podrias agregar una condicion para que se efectue el parpadeo de las celdas (p.ej.)
- un control que dependa del contenido de alguna celda en alguna hoja ?
- mientras esa "celda-control" contenga un dato u otro, se suspende y/o reanuda el parpadeo de las celdas
 

joselica

Member
Hola Héctor Miguel,
En lo que me comentas, te refieres a la función: "Application.EnableEvents" ?
Saludos
 

joselica

Member
Hola de nuevo Héctor Miguel,
Ya esta. Lo tengo todo solucionado.
Muchisimas gracias por tu ayuda.
Que tengas un buen comienzo de semana.
Saludos,
 
Arriba