Imprimir página | Cerrar ventana

Coloreado fondo TextBox y Combos de UserForms.

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86440
Fecha de impresión: 26/Marzo/2026 a las 20:58


Tema: Coloreado fondo TextBox y Combos de UserForms.
Publicado por: katsumoto
Asunto: Coloreado fondo TextBox y Combos de UserForms.
Fecha de publicación: 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...



Respuestas:
Publicado por: AnSanVal
Fecha de publicación: 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.


Publicado por: katsumoto
Fecha de publicación: 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


Publicado por: AnSanVal
Fecha de publicación: 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)




-------------
Saludos desde Tenerife.


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: katsumoto
Fecha de publicación: 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.



Imprimir página | Cerrar ventana