Combobox que al seleccionar ítem cambie de color a textbox

Bunas amigos la cuestión es la siguiente, tengo un formulario compuesto por un combobox y siete textbox. El combo carga los ítem de una tabla de una hoja y consisten en números del 1 al 100, de forma que al seleccionar un numero y rellenar con el resto de datos los textbox mediante un commandbutton los graba en una hoja de calculo. La idea es la siguiente, de esos 100 números que se cargan en el combobox unos cuantos pertenecen a la sección azul, otros a la roja otros a la naranja y otros a la verde, para yo poder saber a que sección pertenecen al seleccionar un ítem necesito que los textbox les cambie el backcolor y asi sabre que al seleccionar por ejem. El ítem 20 me pone los textbox de color azul y al terminar de rellenar el formulario me lo grabara todo en la hoja menos el color de fondo de los textbox.

Si fuerais tan amables de darme una idea del código me seria de gran ayuda, ya que mis conocimientos en vb son escasos.

Respuesta
5

Prueba lo siguiente.

Cambia el fondo del color de los TextBox1 a TextBox7.

Private Sub ComboBox1_Change()
  Dim wColor As Variant, i As Long
  Select Case ComboBox1.Value
    Case 1 To 25:   wColor = vbBlue   'azul
    Case 26 To 50:  wColor = vbRed    'rojo
    Case 51 To 75:  wColor = 49407    'naranja
    Case 76 To 100: wColor = vbGreen  'verde
    Case Else: wColor = vbWhite
  End Select
  For i = 1 To 7
    Controls("TextBox" & i).BackColor = wColor
  Next
End Sub

Funciona si los nombres de los textbox son "TexBox" del 1 al 7. Si tienen otro nombre, entonces tendrías que escribir cada nombre, por ejemplo:

  TxtCodigo.BackColor = wColor
  TxtFecha.BackColor = wColor

No obstante me ocurre lo siguiente, en el código me pones un grupo de números continuos en mi caso ocurre que son salteado es decir concretamente los números 1,3,4,6,8,10,70,100  y del 12 al 20 serian azules, y con los demás ocurre lo mismo entonces el primer problema lo encuentro en poner en una misma fila de código los números discontinuos (creo que se dice concatenar  ) y el segundo problema es que en la ultima revisión de archivo me obligaron a cambiar dos de los siete textbox por dos combobox de esta forma tendrían que colorearse por un lado los textbox 1,2,4,6 y 7 y por otro los combobox 2 y 3.

Muchas gracias por tu paciencia.

Prueba lo siguiente. Pero tendrás que actualizar la macro, utilizando el ejemplo que te estoy poniendo.

Private Sub ComboBox1_Change()
  Dim wColor As Variant, i As Long
  Select Case ComboBox1.Value
    Case 1, 3, 4, 6, 8, 10, 70, 100, 12 To 20: wColor = vbBlue 'azul
    Case 26 To 50:  wColor = vbRed    'rojo
    Case 51 To 75:  wColor = 49407    'naranja
    Case 76 To 100: wColor = vbGreen  'verde
    Case Else: wColor = vbWhite
  End Select
  TextBox1.BackColor = wColor
  TextBox2.BackColor = wColor
  TextBox4.BackColor = wColor
  TextBox6.BackColor = wColor
  TextBox7.BackColor = wColor
  ComboBox2.BackColor = wColor
  ComboBox3.BackColor = wColor
End Sub

Si tienes problemas para adaptar el código, entonces sería bueno si escribes completo todo lo que necesitas, de esa manera la ayuda puedes ser más puntual.

Agradezco mucho tu ayuda, solo una duda mas..a los números le he tenido que poner por imposición una letra delante de forma que ahora en vez de numero solo tienen que figurar asi A-1, A-2, etc...por tanto he intentado adaptar tu código al mio y no se que hago mal porque no me funciona, copio mi código...

Private Sub ComboBox1_Change()
' esta macro colorea el fondos de los controles del formulario datos en funcion del color del grupo politico
Application.ScreenUpdating = False
Dim wcolor As Variant, i As Long
Select Case ComboBox1.Value
        Case ("A-1"), ("A-3"), ("A-4"), ("A-6"), ("A-8"), ("A-10"), ("A-70"), ("A-100"), ("A-12 To A-20"): wcolor = &HFFFFC0
        Case ("A-2"), ("A-5"), ("A-7"), ("A-9"), ("A-22 To A-28"): wcolor = &H80C0FF
        Case ("A-51 To A-58"): wcolor = &H8080FF
        Case ("A-90"), ("A-31 to A-40"), ("A-42 To A-50"): wcolor = &H80FF80
       Case ("A-61 to A-64"): wcolor = &HC0FFC0
    Case Else: wcolor = &HE0E0E0
        End Select
    TextBox1.BackColor = wcolor
    TextBox2.BackColor = wcolor
    TextBox4.BackColor = wcolor
    TextBox6.BackColor = wcolor
    TextBox7.BackColor = wcolor
    ComboBox2.BackColor = wcolor
    ComboBox3.BackColor = wcolor
        Application.ScreenUpdating = True

End sub

por si me pudieras dar una idea de que estoy haciendo mal.....

Muchas gracias otra vez.

Toma en cuenta, cuando hagas preguntas en los foros, las personas que intentan ayudarte no conocen nada sobre tus datos, tal vez es obvio para ti porque estás viendo tus datos; entonces, entre más explicito seas con tus ejemplos, más puntual será la ayuda.


Regresando a tu pregunta. En mi ejemplo, yo no puse paréntesis.

Case 1, 3, 4, 6 ...

Pero tú estás poniendo paréntesis:

Case ("A-1"), ("A-3"), ("A-4"), ("A-6")...

El comportamiento de los números no es igual al de los textos.

Se me ocurre, si vas a tener una letra y un guión, entonces con el código quitamos esos 2 caracteres para obtener el número y entonces conservar las instrucciones del case:

Private Sub ComboBox1_Change()
  Dim wColor As Variant, i As Long, num As Variant
  '
  num = Val(Mid(ComboBox1.Value, 3))
  Select Case num
    Case 1, 3, 4, 6, 8, 10, 70, 100, 12 To 20:  wColor = &HFFFFC0
    Case 2, 5, 7, 9, 22 To 28:                  wColor = &H80C0FF
    Case 51 To 58:                              wColor = &H8080FF
    Case 90, 31 To 40, 42 To 50:                wColor = &H80FF80
    Case 61 To 64:                              wColor = &HC0FFC0
    Case Else:                                  wColor = &HE0E0E0
  End Select
  '
  TextBox1.BackColor = wColor
  TextBox2.BackColor = wColor
  TextBox4.BackColor = wColor
  TextBox6.BackColor = wColor
  TextBox7.BackColor = wColor
  ComboBox2.BackColor = wColor
  ComboBox3.BackColor = wColor
End Sub

Prueba y me comentas.

¡Gracias!  

Mil gracias por tu paciencia, funciona a la perfección, disculpas por no haberme explicado correctamente desde el principio.

saludos.

Con mucho gustos y g r a c i a s por comentar.

1 respuesta más de otro experto

Respuesta

Lo único que se me ocurre es hacer algo como esto, en el evento clic del ComboBox

Private Sub ComboBox1_Click()
    If ComboBox1.Value = 100 Or ComboBox1.Value = 101 Then
        TextBox.BackColor = vbRed
    ElseIf ComboBox1.Value = 102 Or ComboBox1.Value = 103 Then
        TextBox.BackColor = vbBlue
    ElseIf ComboBox1.Value = 104 Or ComboBox1.Value = 105 Then
        TextBox.BackColor = vbGreen
    End If
End Sub

¡Gracias! es una opción interesante, no obstante un problema que me surge es la cantidad, son 100 números y seguramente el código acabaría siendo enorme, alguna sugerencia para reducir este código ?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas