Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. VBA Excel (versiones 2021 y Microsoft 365)
  3. Formularios
Extrait - VBA Excel (versiones 2021 y Microsoft 365) Programar en Excel: Macros y lenguaje VBA
Extractos del libro
VBA Excel (versiones 2021 y Microsoft 365) Programar en Excel: Macros y lenguaje VBA Volver a la página de compra del libro

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 images/15out05.PNG o pulse la tecla [F4].

images/19CAP07IMG01.PNG

(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

images/i01N.png

Etiqueta

Label

images/i02N.png

Cuadro de texto

TextBox

images/i03N.png

Cuadro combinado

ComboBox

images/i04N.png

Cuadro de lista

ListBox

images/i05N.png

Casilla de verificación

CheckBox

images/i06N.png

Botón de opción

OptionButton

images/i07N.png

Botón de alternar

ToggleButton

images/i08N.png

Marco

Frame

images/i09N.png

Botón de comando

CommandButton

images/i10N.png

Barra de tabulaciones

TabStrip

images/i11N.png

Página múltiple (selección de páginas)

Multipage

images/i12N.png

Barra de desplazamiento

ScrollBar

images/i13N.png

Botón de número (selección de valores)

SpinButton

images/i14N.png

Imagen

Image

images/i15N.png

RefEdit (selección de rangos)

RefEdit

Dibujar un control

 Seleccione el control que desea crear y arrastre el puntero para definir un área rectangular.

Al soltar el botón del ratón, aparecerá el control y la herramienta Seleccionar objetosimages/06ri01ic.PNG pasará a ser la herramienta activa.

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:

images/CAP06IMG01.png

La hoja "Servicios" contiene la lista de servicios:

images/CAP06IMG02.png

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.

images/CAP07IMG01R.PNG

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...