Coloreado fondo TextBox y Combos de UserForms. |
Responder |
Autor | |
katsumoto
Habitual Unido: 24/Julio/2011 Localización: Ciudad Real Estado: Sin conexión Puntos: 171 |
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...
|
|
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5974 |
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.
|
|
katsumoto
Habitual Unido: 24/Julio/2011 Localización: Ciudad Real Estado: Sin conexión Puntos: 171 |
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é...
|
|
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5974 |
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 ) Editado por AnSanVal - 10/Agosto/2022 a las 23:05 |
|
Saludos desde Tenerife.
|
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: en línea Puntos: 14738 |
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
|
|
katsumoto
Habitual Unido: 24/Julio/2011 Localización: Ciudad Real Estado: Sin conexión Puntos: 171 |
Enviado: 11/Agosto/2022 a las 11:01 |
Gracias, AnSAnVal, y Xavi, pero chiiiiist que no salga de aquí : odio los bucles!!!
Finalmente he resuelto con el Enter y el Exit en cada control. Se puede cerrar el hilo. Saludos desde La Mancha manchega.
|
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |