** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Coloreado fondo TextBox y Combos de UserForms.
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoColoreado fondo TextBox y Combos de UserForms.

 Responder Responder
Autor
Mensaje
katsumoto Ver desplegable
Habitual
Habitual


Unido: 24/Julio/2011
Localización: Ciudad Real
Estado: Sin conexión
Puntos: 171
Enlace directo a este mensaje Tema: Coloreado fondo TextBox y Combos de UserForms.
    Enviado: 09/Agosto/2022 a las 21:08
Desde hace años vengo utilizado en Access un módulo con las funciones que copio después y que me permiten colorear de amarillo los fondos de las cajas de texto y combos de mis formularios, cuando reciben el foco, y vuelven a tomar el blanco cuando lo pierden, simplemente llamando a tal función al cargar el formulario de turno.

Las funciones a que me refiero son estas:

Public Function ColorEnfoque(Frm As Form)

Dim Ctrl As control

'Esta Función debe ser llamada desde el Evento "Form_Load" del Formulario.  Ejemplo: Call ColorEnfoque(Me)

For Each Ctrl In Frm.Controls

        Select Case Ctrl.ControlType

                'Escribir las funciones sólo en los eventos de la clase de controles de cuadro de texto

                Case acTextBox, acComboBox 'TextBox y ComboBox

                        'Ensambla y escribe la Función ColoreaControl en Evento "Al Recibir el Enfoque" del TextBox

                        'Recordando que estamos dentro de la Fase FOR. Significa que todos los cuadros de texto reciben Función

                        If Ctrl.OnGotFocus = vbNullString Then Ctrl.OnGotFocus = "=ColoreaControl([" & Ctrl.Name & "],1)"           'Color Amarillo

                        'Cambia la Función ColoreaControl() en el Evento "Al Perder Foco" del Control

        

                        If Ctrl.OnExit = vbNullString Then Ctrl.OnLostFocus = "=ColoreaControl([" & Ctrl.Name & "],0)"         'Color Blanco

        End Select

Next

End Function

­­­­­­­­­­­­­­­­­­­­­­________________________________________

Public Function ColoreaControl(Ctrl As control, Color As Byte)

'Cambia el Fondo del control que recibe el Foco. Al recibir el Foco pasa a Amarillo. Al perder el Foco pasa a Blanco

Ctrl.BackColor = Switch(Color = 0, RGB(255, 255, 255), Color = 1, RGB(250, 250, 176))  'Para el Color de Fondo del Control

End Function


Me preguntaba qué modificaciones debo hacer en estas funciones para que pueda utilizarlas en un USERFORM de Excel...
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5974
Enlace directo a este mensaje Enviado: 10/Agosto/2022 a las 10:30

Cada objeto tiene sus eventos y sus prpiedades (F4), que podemos modificar cambiando su valor.


Por ejemplo para alterar el color de fondo de TextBox1 (por defecto lo ponemos en  e5e5e5), cuando este toma el foco y cuando lo pierde:


Private Sub TextBox1_Enter()

  TextBox1.BackColor = vbWhite

End Sub


Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

  TextBox1.BackColor = &HE5E5E5

End Sub




Saludos desde Tenerife.
Arriba
katsumoto Ver desplegable
Habitual
Habitual


Unido: 24/Julio/2011
Localización: Ciudad Real
Estado: Sin conexión
Puntos: 171
Enlace directo a este mensaje Enviado: 10/Agosto/2022 a las 13:50
Sí, sí, AnSanVal, eso lo vi justo casi en el momento en que escribía mi pregunta, pero yo iba un pasito más allá, me preguntaba si en vez de tener que ir uno por uno a los TextBox y Combos del UserForm y cambiarles la propiedad del color en sus eventos Al entrar y Al Salir, no habría una función equivalente a la que copié y que me funcionaba para ACCESS, que hiciese el mismo trabajo que ella, que colorease automáticamente todos los controles de texto del UserForm al ser llamada, quizás en el evento Inicialize no sé...  Sonreír
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5974
Enlace directo a este mensaje Enviado: 10/Agosto/2022 a las 22:46
Puedes hacer un bucle que recorra los objetos del formulario y si (IF) objeto.name (objeto es una variable) empieza por «TextB» (TextBox1, TextBox2,...) ejecuta el cambio de color y si no pasa al siguiente objeto.

► Mucho del código VBA de ACCESS es igual al de EXCEL (bucles, variables, matrices,...), pero no el específico de cada aplicación.


EDITADO: ejemplo para el bucle → For Each objeto In UserForm1.Controls

► Viendo de nuevo tu código... es similar lo que te propongo. No he probado con OnGotFocus (casos como estar cambiando los colores, no suele ser mi primer plato cuando me siento a la mesa Wink)




Editado por AnSanVal - 10/Agosto/2022 a las 23:05
Saludos desde Tenerife.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: en línea
Puntos: 14738
Enlace directo a este mensaje Enviado: 11/Agosto/2022 a las 10:31
El problema es que, los UserForms (hasta dónde a mi me consta) no disponen la posibilidad de asignar por código funciones a los eventos.

Es decir, no podemos utilizar el UserForm_Initialize para asignar como en Access

Me!UnTextBox.OnGotFocus = "=UnaFuncion()"

En Excel debemos escribir el código (o la llamada a la función) en cada evento Sub del control. Así nos llenamos de código... pero no he encontrado otra forma de hacerlo.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
katsumoto Ver desplegable
Habitual
Habitual


Unido: 24/Julio/2011
Localización: Ciudad Real
Estado: Sin conexión
Puntos: 171
Enlace directo a este mensaje Enviado: 11/Agosto/2022 a las 11:01
Gracias, AnSAnVal, y Xavi, pero    chiiiiist    que no salga de aquí     Guiño  : odio los bucles!!!  Ay

Finalmente he resuelto con el Enter y el Exit en cada control.

Se puede cerrar el hilo.  Sonreír

Saludos desde La Mancha manchega.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable