Simplificar un Select Case para dar estilo en un formulario

Necesito dar formato condicional a unas etiquetas en un formulario mediante VBA. Son un total de 10. Aquí os pego dos, a modo de ejemplo:

    Select Case Desviacion
        Case Is > 0
            FName.Desviacion.BackColor = RGB(34, 177, 76)
            FName.Desviacion.ForeColor = RGB(255, 255, 255)
        Case Is = 0
            FName.Desviacion.BackColor = RGB(228, 108, 10)
            FName.Desviacion.ForeColor = RGB(255, 255, 255)
        Case Is < 0
            FName.Desviacion.BackColor = RGB(237, 28, 36)
            FName.Desviacion.ForeColor = RGB(255, 255, 255)
    End Select
    Select Case FName.Etiqueta1.Caption
        Case Is > 0
            FName.Etiqueta1.BackColor = RGB(34, 177, 76)
            FName.Etiqueta1.ForeColor = RGB(255, 255, 255)
        Case Is = 0
            FName.Etiqueta1.BackColor = RGB(228, 108, 10)
            FName.Etiqueta1.ForeColor = RGB(255, 255, 255)
        Case Is < 0
            FName.Etiqueta1.BackColor = RGB(237, 28, 36)
            FName.Etiqueta1.ForeColor = RGB(255, 255, 255)
    End Select

¿Existe alguna manera de simplificarlo? Mi idea era poner los nombres de las etiquetas en la línea que declaro Select Case, pero luego tendría que declarar cada etiqueta en las líneas que doy el estilo. He visto por ahí que se puede poner .Backcolor, o .ForeColor, sin hacer mención al campo en cuestión, pero no sé cómo se hace.

1 respuesta

Respuesta
1

Podrías hacerlo usando With, pero tampoco es que te simplifique mucho...

    Select Case Desviacion
      With FName.Desviacion
        Case Is > 0
            .BackColor = RGB(34, 177, 76)
            .ForeColor = RGB(255, 255, 255)
        Case Is = 0
            .BackColor = RGB(228, 108, 10)
            .ForeColor = RGB(255, 255, 255)
        Case Is < 0
            .BackColor = RGB(237, 28, 36)
            .ForeColor = RGB(255, 255, 255)
      End With
    End Select

También podrías usar Switch() en vez del Select case, con lo que escribirías menos líneas, pero el mismo número de condiciones y valores....:

FName.Desviacion.BackColor = Switch(Desviacion>0,RGB(34, 177, 76),Desviacion=0,RGB(228, 108, 10),Desviacion<0,RGB(237, 28, 36))
FName.Desviacion.ForeColor = Switch(Desviacion>0,RGB(255, 255, 255),Desviacion=0,RGB(255, 255, 255),Desviacion>0,RGB(255, 255, 255))
La pregunta no admite más respuestas

Más respuestas relacionadas