Hacer parpadear un texto VBA Excel

Estoy intentado crear una señal parpadeante en caso de aviso.
He intentado varios codigos pero no logro conseguirlo.

list_equipaments_Click() 'es un listbox
If Val(diferencia_dies.Caption) <= 30 Then
        diferencia_dies.ForeColor = RGB(255, 0, 0)
    ElseIf Val(diferencia_dies.Caption) >= 31 And Val(diferencia_dies.Caption) <= 60 Then
        diferencia_dies.ForeColor = RGB(255, 128, 0)
    Else
        diferencia_dies.ForeColor = RGB(0, 0, 0)
    End If
End sub

Me gustaria que cuano el valor sea inferior 30 se alternara el color ROJO y el NEGRO con un ritmo rapido.
¿Cómo podria hacer que el borde de la celda parpadee hasta que el valor de la celda referenciada no sea 30 o inferior?

1 respuesta

Respuesta
1

[Hola

Esto respondí hace un par de años, pero es super vigente:

https://www.todoexpertos.com/preguntas/8ps5d3ikpmskhn74/como-puedo-lograr-que-mi-label-parpadee

Hola Abraham  he leido la resputa que diste hace un tiempo.
Al ejecutar el codigo se me queda colgado el excel y no hace la funcion.
No se que estoy haciendo mal.

Adjunto el codigo que he adapatado

Dim x As Integer
        For x = 1 To 25
        Me.Repaint
        diferencia_dies.BackColor = RGB(255 + 15, 0 * 10, (0 * 5) + 10)
        Sleep 1000
        Next x

Arriba de userform he puesto esto:

#If VBA7 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Este ultimo codigo esta situado fuera del USERFORM 

Coloca el archivo en algún Drive para poder verlo.

Hola abraham te he compartido el fichero por Drive por correo.
Puede que te resulte un poco cahotico (soy consciente), una de las siguientes tareas que quiero realizar es aprender a ordernarlo todo y estructurarlo por modulos. 
El documento que te he pasado es el documento que funciona sin el parpadeo

No tengo problema en que haya tantas cosas, pero al menos dime en dónde está lo que probaste y/o lo que necesitas, jejeje.

Toda la razón je je,
Primero puse arriba del todo el código que me diste, lo puse debajo de option explicit.

Option Explicit
Dim rango As Variant
Dim celda As Variant
Dim b As Object
Dim fila As Integer
Dim final As Integer
Dim i As Variant
Dim id_anterior As Long
Dim uf As String
Dim dif As Variant
#If VBA7 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If


Luego en el listbox de la izquierda llamado list_equipaments he puesto el siguiente codigo condicional en el evento click

If tipologia_final.Caption = "OASF" Then
'te pongo un codigo mas corto, pero en el arxivo veras que es un poco mas extenso
    If Val(diferencia_dies.Caption) <= 30 Then
        Dim x As Integer
        For x = 1 To 25
        Me.Repaint
        diferencia_dies.BackColor = RGB(255 + 15, 0 * 10, (0 * 5) + 10)
        Sleep 1000
        Next x
End if
End if

Cuando ejecuto este codigo se me queda colgado el programa.
Lo que pretendo es que cuando el Label se muestre de color rojo parpadee (en este caso al ser OASF para que salga en rojo debe de ser inferior a 30).

[Hola nuevamente

Algo rápido para que se entienda:

https://1drv.ms/x/s!ApkTgtnWCTgApXMkvbnicH5f-M_h?e=E72tTT

Hola Abraham he adaptado el código que me has pasado pero no me termina de funcionar.
Al ejecutar el código hace como un parpadeo de pantalla constante sin cambiar el color del label. Pasado un tiempo cambia el color a azul turquesa 1 vez y termina el parpadeo.
Arriba del código en Option explicit he pegado

#If VBA7 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

y en el evento click del listbox list_equipaments

If tipologia_final.Caption = "OASF" Then
Dim x As Integer
    If Val(diferencia_dies.Caption) <= 30 Then
        For x = 1 To 35
        Me.Repaint
        diferencia_dies.ForeColor = RGB(x + 15, x * 10, (x * 5) + 10)
        diferencia_dies2.ForeColor = RGB(x + 15, x * 10, (x * 5) + 10)
        diferencia_mes.ForeColor = RGB(x + 15, x * 10, (x * 5) + 10)
        Sleep 100
        DoEvents
    Next x

Tambien he intentado cambiar el color final tocando los valores númericos pero no logro ajustar al color que quiero ya que RGB tiene 3 valores n umericos distintos y aqui hay 4.
¿Cómo podría hacer que el texto parpadee intercanviando el color de negro a rojo?

Intenta algo así:

 For x = 1 To 35
        Me.Repaint
        diferencia_dies.ForeColor = RGB(254, 0, 0)
        diferencia_dies2.ForeColor = RGB(254, 0, 0)
        diferencia_mes.ForeColor = RGB(254, 0, 0)
        Sleep 100
        DoEvents
        Me.Repaint
        diferencia_dies.ForeColor = RGB(0, 0, 0)
        diferencia_dies2.ForeColor = RGB(0, 0, 0)
        diferencia_mes.ForeColor = RGB(0, 0, 0)
        Sleep 100
        DoEvents
    Next x

Abraham, no consigo que funcione, hace como un parpadeo invisible rápido sin mostrar nada y a los segundos aparece el resultado pero solo en negro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas