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.
Crear el formulario de captura de datos
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 en Excel
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.
Código para el formulario de captura
Ahora que conocemos la función CONTARA, podremos comprender mejor el siguiente código que utilizaremos para el botón “Agregar”:
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.Value 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.
Probando el formulario de captura de datos en Excel
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.