Personalizar a nuestro gusto el diseño de los formularios creados en Excel vba
Todo desarrollador de aplicaciones gusta de añadir su toque personal a las aplicaciones que desarrolla. Y los usuarios de Excel no son la excepción. En Excel podemos darle nuestro toque a tablas, formularios, cuadros de mando, tablas dinámicas, etc.[/caption]
En este artículo les compartiré una macro que les permitirá aplicar el mismo diseño a los formularios que desarrollen, esto para que “nuestro toque” quede plasmado en el diseño que elijamos y tener formularios unificados.
Todo desarrollador de aplicaciones gusta de añadir su toque personal a las aplicaciones que desarrolla. Y los usuarios de Excel no son la excepción.
Aplicar el mismo diseño a mis formularios de vba
Para modificar el diseño de nuestros formularios haremos uso de las Propiedades de cada Control. Por ejemplo, recorreremos cada Control del formulario y le asignaremos un Color blanco, así como asignarles la propiedad Flat, para que se vean más ad hoc al diseño de los Formularios de Windows.
Figura 1. Personalizar diseño de Formularios vba.
Ver video Macro VBA para asignarle el mismo diseño a todos tus formularios en Excel
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Cómo funciona
En un Módulo normal tendremos la macro llamada FormDesign, la cual se ejecturá cada que un formulario se ejecute. La macro será llamada desde el evento Initialize.
Private Sub UserForm_Initialize() Call FormDesign End Sub
La macro hará uso del constructor For each para recorrer todos los Controles del formulario y modificarás las siguientes propiedades:
-
BackColor = Cambiamos el color de fondo del Control o Formulario.
-
ForeColor = Cambiamos el color de la fuente.
-
Font.Size = Cambiamos el tamaño del texto de un Control.
-
Font.Name = Cambiamos el tipo de fuente.
-
SpecialEffect = Le asignamos un diseño al Control. Para este ejemplo usaremos el estilo fmSpecialEffectFlat.
-
BorderStyle = Cambiamos el diseño del borde.
-
BorderColor = Cambiamos el color del borde.
Figura 1. Propiedades de Controles vba.
Código vba de la macro
Nombre: FormDesign.
Ubicación: Módulo 1.
'--------------------------------------------------------------------------------------- ' Module : Módulo2 ' Author : MVP, Sergio Alejandro Campos ' Date : 31/08/2015 ' Purpose : Personalizar diseño de Formularios '--------------------------------------------------------------------------------------- ' Sub FormDesign() ' Set FormActivo = UserForms(0) ' FormActivo.BackColor = vbWhite ' For Each Control In FormActivo.Controls ' On Error Resume Next ' 'Si el Control es un Botón no le cambies el color If TypeOf Control Is MSForms.CommandButton Then Else Control.BackColor = vbWhite End If Control.ForeColor = 4210752 'Control.Font.Name = "Calibri" 'Control.Font.Size = 10 ' 'Si hay una etiqueta llama lblTitulo... If Control.Name = "lblTitulo" Then Control.Font.Size = 14 Contro.BakColor = 2147483663# End If ' 'Si se encuentra un Frame... If TypeOf Control Is MSForms.Frame Then Control.SpecialEffect = fmSpecialEffectFlat Control.ForeColor = 32768 Control.BorderStyle = fmBorderStyleSingle Control.BorderColor = 12632256 End If ' 'Si se encuentra un Label If Not TypeOf Control Is MSForms.Label Then Control.SpecialEffect = fmSpecialEffectEtched End If ' 'Si se encuentra un CheckBox If TypeOf Control Is MSForms.CheckBox Then Control.SpecialEffect = fmSpecialEffectFlat End If ' On Error GoTo 0 ' Next Control ' End Sub
Anexos
Descargar :: Personalizar diseño de formularios – EXCELeINFO.rar
Referencia
Uso de For each … Next en vba Excel
Identificar los tipos de controles que tenemos en un Formulario de Excel vba
Muy Buenos todos los ejemplos que has desarrollado y lo mucho que ayudan. Gracias por todo.
En éste me ha surgido una duda. He hecho un formulario al que he aplicado un boton para desplegar el calendario y ocurre que una vez utilizado el calendario, ya no vuelve a funcionar el FormDesign. Lo he probado con tu ejemplo y ocurre lo mismo.
Este es el código de llamada al UserForm del calendario:
“Private Sub btnStDateCal_Click()
Cal.lblCtrlName = “cbo_Fecha”
Cal.lblUf = “frmCaptura”
Cal.Show
End Sub”
Y este el código del UserForm:
”
Private Sub fCal_DateClick(ByVal DateClicked As Date)
For Each uf In VBA.UserForms
If uf.Name = Cal.lblUf Then
For Each ctl In uf.Controls
If ctl.Name = Cal.lblCtrlName Then
‘found the control to give the date to
ctl.Value = DateClicked
Me.Hide
End If
Next ctl
End If
Next uf
End Sub”
¿Qué me falta para que una vez seleccionada la fecha y grabados los datos, al volver abrir el formulario siga con el diseño modificado? Seguro que me falta algo, pero no veo donde puede ser.
La macro expuesta tiene errores de caligrafia que no deja que se ejecute convenientemente
‘Si hay una etiqueta llama lblTitulo…
If Control.Name = “lblTitulo” Then
Control.Font.Size = 19
Contro.BakColor = vbBlack ‘ VERIFICA ESTA PARTE = Contro.BakColor, FALTA LA L Y LA C
End If
Myu buena la macro