Formularios
Presentación
Los formularios (también llamados cuadros de diálogo personalizados, formularios personalizados, hojas del usuario o UserForm) permiten disponer de interfaces de usuario simples y amigables para la introducción, modificación o visualización de datos.
Los formularios personalizados son cuadros de diálogo sobre los que se puede:
-
ubicar controles ActiveX, tales como cuadros de entrada de texto, listas desplegables, botones de comando, etc.;
-
asociar código VBA para responder a distintos eventos del usuario (clic en un botón de comando, introducción de texto en una zona, selección en una lista desplegable, etc.).
Encontrará un ejemplo de formulario en este capítulo. Así mismo, el capítulo Ejemplo de aplicación VBA Excel contiene varios formularios y, más concretamente, un formulario de identificación de usuario.
Crear un formulario
Un formulario se crea en una hoja UserForm.
Para insertar una hoja UserForm, acceda a Microsoft Visual Basic y luego seleccione las opciones Insertar - UserForm.
Se agregará una hoja llamada UserForm n (por ejemplo: UserForm1), aparecerá un formulario vacío y el cuadro de herramientas.
Para mostrar la ventana de propiedades, seleccione las opciones Ver - Ventana Propiedades, haga clic en el botón o pulse la tecla [F4].
(Name)
Nombre del formulario.
Caption
Texto en la barra de título.
Para dimensionar el formulario, selecciónelo y arrastre los controladores de tamaño o indique las propiedades Height y Width del formulario.
La opción Controles adicionales permite agregar otros controles desde la barra de herramientas.
Lista de controles
Herramienta |
Nombre |
Objeto |
Etiqueta |
Label |
|
Cuadro de texto |
TextBox |
|
Cuadro combinado |
ComboBox |
|
Cuadro de lista |
ListBox |
|
Casilla de verificación |
CheckBox |
|
Botón de opción |
OptionButton |
|
Botón de alternar |
ToggleButton |
|
Marco |
Frame |
|
Botón de comando |
CommandButton |
|
Barra de tabulaciones |
TabStrip |
|
Página múltiple (selección de páginas) |
Multipage |
|
Barra de desplazamiento |
ScrollBar |
|
Botón de número (selección de valores) |
SpinButton |
|
Imagen |
Image |
|
RefEdit (selección de rangos) |
RefEdit |
Dibujar un control
Seleccione el control que desea crear y arrastre el puntero para definir un área rectangular.
Para dibujar varios controles del mismo tipo, haga doble clic en la herramienta correspondiente.
Algunas propiedades
(Name)
Especifica el nombre del control.
Caption
Indica el texto de una etiqueta.
ControlTipText
Crea una etiqueta informativa.
Visible
Especifica si un control está oculto o visible.
Enabled
Determina si el foco puede estar sobre el control.
Value
Define el estado o el contenido de un control.
ControlSource
Vincula un control a una celda (cuadro de texto) o un rango de celdas (cuadro de lista).
Determinar el acceso a un control
Para definir el orden de tabulación, seleccione las opciones:
Ver - Orden de tabulación
Para desactivar la posibilidad de usar la tecla [Tab] para acceder a un control, seleccione el control e indique False en la propiedad...
Personalizar un formulario
1. Escribir procedimientos
Para mostrar la ventana de código de un control:
haga doble clic en el control para el que desee asignar un código, o seleccione el control y seleccione las opciones:
Ver - Código o [F7]
Para insertar un nuevo evento, abra la lista de la derecha y seleccione el evento deseado.
Si no indica un evento, el evento sugerido para la mayoría de los controles es el evento Click.
Para volver a mostrar un control, seleccione las opciones:
Ver - Objeto o [Mayús][F7]
2. Lista de eventos asociados a los principales controles
Activate
Ocurre cuando se activa la hoja.
AddControl
Ocurre cuando se inserta un control en una hoja.
AfterUpDate
Ocurre tras modificar datos.
BeforeDragOver
Ocurre cuando se está ejecutando una operación de arrastrar y soltar.
BeforeDropOrPaste
Ocurre cuando el usuario está a punto de colocar o pegar datos en un objeto.
BeforeUpDate
Ocurre antes de la modificación de datos.
Change
Ocurre cuando se modifica la propiedad Value.
Click
Ocurre cuando el usuario hace clic en un control o cuando selecciona definitivamente un valor para un control con más de un valor posible.
DblClick
Ocurre cuando el usuario hace doble clic.
DeActivate
Ocurre cuando la hoja deja de ser la ventana activa.
DropButtonClick
Ocurre cada vez que se muestra o se oculta una lista desplegable.
Enter
Ocurre antes de que un control reciba realmente el foco desde un control de la misma hoja.
Error
Ocurre cuando un control detecta un error y no puede devolver información del error al programa que lo ha llamado.
Exit
Ocurre inmediatamente antes de que un control pierda el foco en favor de otro control de la misma hoja.
Initialize
Ocurre después de que se carga un objeto, pero antes de que se muestre.
KeyDown
Ocurre cuando el usuario pulsa una tecla.
KeyPress
Ocurre cuando el usuario pulsa una tecla ANSI.
KeyUp
Ocurre cuando el usuario suelta una tecla.
Layout
Ocurre cuando cambia el tamaño de un control.
MouseDown
Ocurre cuando el usuario pulsa el botón del ratón.
MouseMove
Ocurre cuando el usuario mueve el ratón.
MouseUp
Ocurre cuando el usuario suelta el botón del ratón.
QueryClose
Se produce antes de cerrar la hoja.
RemoveControl
Ocurre cuando se elimina el control del contenedor.
Resize
Se produce cuando cambia el tamaño de la hoja.
Scroll
Ocurre cuando se vuelve a reubicar un cuadro...
Ejemplo de formulario personalizado
1. Presentación
Este ejemplo muestra cómo crear un formulario personalizado para introducir o modificar las pestañas "empleados". El libro Empleados.xlsm contiene dos hojas de cálculo y un formulario.
La hoja "Empleados" contiene la lista de empleados:
La hoja "Servicios" contiene la lista de servicios:
El formulario "Empleados" permite:
-
modificar la información de un empleado y actualizar la hoja de Excel Empleados;
-
crear un nuevo empleado y agregarlo a la lista de la hoja de Excel Empleados.
La lista de servicios se lee desde la hoja Servicios.
Lista de controles del formulario Empleados:
N.° |
Tipo de control |
Nombre |
1 |
Cuadro de lista |
lstEmpleados |
2 |
Botón de comando |
cmdNuevo |
3 |
Botón de opción |
optSra |
4 |
Botón de opción |
optSrta |
5 |
Botón de opción |
optSr |
6 |
Cuadro de texto |
txtApellido |
7 |
Cuadro de texto |
txtNombre |
8 |
Cuadro de lista |
lstServicios |
9 |
Botón de comando |
cmdAceptar |
10 |
Botón de comando |
cmdCerrar |
2. Código asociado al botón macro de la pestaña Empleados
Este código está contenido en el módulo de clase ThisWorkbook.
Sub Mostrar_Formulario()
' Muestra el formulario Empleados
Empleados.Show
End Sub
3. Código VBA asociado al formulario
Option Explicit
' Nombre de la aplicación
Const strAppName = "Entrada de empleados"
Dim bNuevo As Boolean
________________________________________________________________
Private Sub UserForm_Initialize()
Dim oRng As Range
Dim oCell As Range
' Muestra la lista de servicios
With ThisWorkbook.Worksheets("Servicios")
.Activate
Set oRng = .Range("A1").CurrentRegion
' Ordena los servicios por orden alfabético
oRng.Sort Key1: =Range("A1")
lstServicios.Clear
For Each oCell In oRng
If oCell.Text <> "" Then
lstServicios.AddItem...