Los formularios en VBA no son más que un cuadro de diálogo de Excel donde podremos colocar controles que nos ayudarán a solicitar información del usuario. Podremos colocar cajas de texto, etiquetas, cuadros combinados, botones de comando, etc.
Los formularios de Excel son creados desde el Editor de Visual Basic donde debemos seleccionar la opción de menú Insertar y posteriormente la opción UserForm.
Inmediatamente se mostrar un formulario en blanco y de igual manera podrás observar el Cuadro de herramientas:
Si no ves el Cuadro de herramientas puedes seleccionar el menú Ver y la opción Cuadro de herramientas.
Para agregar un control al formulario debes seleccionarlo del Cuadro de herramientas y dibujarlo sobre el formulario. En mi formulario he agregado etiquetas y cuadros de texto así como un par de botones de comando:
El texto de las etiquetas se modifica en la propiedad llamada Caption. Para realizar este cambio solamente selecciona el control y se mostrará la ventana de Propiedades donde podrás hacer la modificación. De igual manera el texto desplegado en los botones de comando se modifica en su propiedad Caption.
El botón cancelar cerrará el formulario sin guardar la información capturada en ningún lugar. El código que debemos utilizar es el siguiente:
Private Sub CommandButton2_Click()
Unload Me
End Sub
Para agregar este código puedes hacer doble clic sobre el control. La sentencia “Unload Me” cerrará el formulario.
A diferencia del botón Cancelar, el botón Aceptar colocará los datos de las cajas de texto en las celdas A1, B1 y C1. El código utilizado es el siguiente:
Private Sub CommandButton1_Click()
Worksheets("Hoja1").Range("A1").Value = Me.TextBox1.Value
Worksheets("Hoja1").Range("B1").Value = Me.TextBox2.Value
Worksheets("Hoja1").Range("C1").Value = Me.TextBox3.Value
End Sub
Al pulsar el botón Aceptar se transferirán los valores de los controles TextBox hacia las celdas de la Hoja1.
Para facilitar la apertura del formulario puedes colocar un botón ActiveX en la hoja con el siguiente código:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Observa cómo cada uno de los botones realiza la acción correcta al pulsarlos
FORMULARIO MULTIPLE USUARIOS
En esta ocasión desarrollaremos un formulario de captura de datos en Excel que nos permitirá llenar una hoja de nuestro libro con información de múltiples personas como su nombre, teléfono, y su correo electrónico.
Este artículo está basado en una publicación anterior donde hice una introducción básica a los Formularios en VBA, sin embargo en dicho ejemplo siempre se insertaban los datos capturados en la primera fila de la hoja remplazando los datos introducidos previamente. Hoy haremos las adecuaciones necesarias para permitir la captura de múltiples filas así como la validación de datos duplicados.
El primer paso es crear el formulario de captura y agregar los controles necesarios que nos permitirán ingresar los datos. Para eso abrimos el Editor de Visual Basic e insertamos el formulario desde el menú Insertar > UserForm. Después, utilizando el cuadro de herramientas agregamos las etiquetas, cuadros de textos y botones para tener un formulario como el siguiente:
El código para el botón Cancelar es tan simple como utilizar la instrucción Unload Me que nos ayudará a cerrar el formulario. El código para el botón Agregar será más elaborado, pero antes de pasar al código debo hablar sobre una función de Excel que nos ayudará en el desarrollo de nuestro formulario de captura de datos.
La función CONTARA hace un recuento de las celdas no vacías dentro del rango indicado. Esta función será de mucha utilidad en nuestro ejemplo porque nos ayudará a conocer la fila en donde debemos insertar la información. Considera el siguiente ejemplo:
La función CONTARA evalúa las celdas de la columna A y devuelve el valor 5 indicándonos que ha encontrado cinco celdas que no están vacías. Si ingresamos un valor en la celda A6, entonces la función CONTARA nos devolverá el valor 6.
Ahora que conocemos la función CONTARA, podremos comprender mejor el siguiente código que utilizaremos para el botón “Agregar”:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Private
Sub
CommandButton1_Click()
Dim
fila As
Long
Dim
duplicados As
Boolean
'Obtener la fila disponible
fila = Application.WorksheetFunction.CountA(Range("A:A")) + 1
duplicados = False
'Validar si se han ingresado datos duplicados
For
i = 1 To
fila
If
Cells(i, 1).Value = UserForm1.TextBox1.Value Then
If
Cells(i, 2).Value = UserForm1.TextBox2.Value Then
If
Cells(i, 3).Value = UserForm1.TextBox3 Then
'Se encontraron datos duplicados
MsgBox "Datos duplicados en la fila "
& i
duplicados = True
End
If
End
If
End
If
Next
i
If
Not
duplicados Then
'Insertar datos capturados
Cells(fila, 1).Value = UserForm1.TextBox1.Value
Cells(fila, 2).Value = UserForm1.TextBox2.Value
Cells(fila, 3).Value = UserForm1.TextBox3.Value
'Limpiar cajas de texto
UserForm1.TextBox1.Value = ""
UserForm1.TextBox2.Value = ""
UserForm1.TextBox3.Value = ""
'Notificar al usuario
MsgBox "Datos insertados en la fila "
& fila
End
If
End
Sub
Al pulsar el botón Agregar se inicializa la variable fila la cual almacenará el resultado de la función CONTARA y que nos indicará el número de fila donde se deben insertar los datos. También inicializamos la variable duplicados que nos indicará si los valores ya fueron ingresados previamente.
Antes de copiar los datos a la hoja de Excel, hacemos un recorrido de la primera columna de nuestra hoja para comparar el valor de cada celda con el valor de la caja de texto que contiene el nombre. Si encontramos alguna coincidencia, entonces comparamos el valor de la columna B con la segunda caja de texto para saber si son iguales. Solo en caso de que los tres valores coincidan mostramos un mensaje al usuario indicando que se encontraron valores duplicados y colocamos como verdadero el valor de la variable duplicados.
En caso de que los datos no estén duplicados, insertamos todos los valores en la fila indicada y limpiamos las cajas de texto del formulario. Finalmente mostramos un mensaje al usuario indicando el número de fila donde se insertaron los datos.
Para probar el formulario de captura agregaré un botón de comando a la hoja de Excel con la instrucción UserForm1.Show lo cual cargará nuestro formulario. Al momento de ingresar los datos y pulsar el botón Agregar, los valores serán insertados en una nueva fila de nuestra hoja.
Si por el contrario, encontramos que los datos están duplicados en alguna de las filas, se mostrará un cuadro de diálogo advirtiéndonos de la duplicidad:
Es así como el formulario de captura que hemos creado nos permite insertar los datos capturados en una nueva fila y donde el único límite será la cantidad de filas de nuestra hoja de Excel. Descarga el archivo de trabajo y prueba el funcionamiento de este formulario.