Cambiar el color en un label (semaforo). Excel VBA

Chicos me gustaria hacer una señal visual para indentificar a primera vista el estado (en este caso el tiempo transcurrido)

He intentado realiazar varias pruebas pero no logro realizar lo que me pronpongo.

Este es una parte del codigo (esta situado en el evento de un listbox al hacer click)

Dim dif As Variant
dif = DateDiff("d", list_historial, data)
diferencia_dies.Caption = DateDiff("d", list_historial, data)
If tipologia_final.Caption = "OASF" Then
    If diferencia_dies.Caption <= "30" Then
    diferencia_dies.ForeColor = RGB(255, 0, 0)
    ElseIf diferencia_dies.Caption >= "31" Then
    diferencia_dies.ForeColor = RGB(255, 128, 0)
    ElseIf diferencia_dies.Caption >= "61" Then
    diferencia_dies.ForeColor = RGB(0, 0, 0)
    End If
End If
Exit Sub
End If

Lo que pretende este codigo es que dependiendo de la TIPOLOGIA de la empresa (en este caso OASF). Quiero estimar si hace mucho o poco que se le realizo un envio. Este calculo se realiza con la funcion DATEDIFF (diferencia de dias entre la fecha de envio y el dia de hoy). 
Una vez tengo la diferencia de dias en el caption DIFERENCIA_DIES es donde entraria el condicional para establecer los colores según su diferencia
Me gustaria que todas las empresas que fuera OASF mostraran estos 3 colores en estas situaciones

Rojo: la diferencia de dias es inferior a 31 dias

Naranja: la diferencia es mayor de 31 dias pero menor de 60

Negro: superior a 60 dias
Como ya he dicho hay varios tipologias de empresas mas y dependiendo del valor de TIPOLOGIA_FINAL. CAPTION debera aplicar esta regla u otras

Actualmente el codigo solo me marca los dias en rojo indiferentemente de los dias que hayan transcurrido hasta la fecha de hoy.
¿Qué hago mal? ¿En qué falla mi codigo?

1 Respuesta

Respuesta
1

En primer lugar estás comparando valores de texto como números. Por eso "145" resulta menor a "30".

Los Label guardan textos. Para una correcta comparación con valores numéricos debiera ser:

If Val(Label1.Caption) <= 30 Then
    Label1.ForeColor = RGB(255, 0, 0)
ElseIf Val(Label1.Caption) >= 31 And Val(Label1.Caption) <= 60 Then
    Label1.ForeColor = RGB(255, 128, 0)
Else
    Label1.ForeColor = RGB(0, 0, 0)
End If
'ajusta el nombre de tu Label

El segundo tema es que si comparas con >= 31 también los resultados mayores a 60 quedan involucrados allí. Por eso hay que agregar como segunda condición que sean <= 60

PD) Todo lo que necesitas saber a la hora de programar Userforms lo encontrarás en este manual. Funciones de conversión, propiedades, etc.;)

Sdos.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas