Este artículo pertenece a nuestra serie dedicada a UserForms. Si es el primero que has visto, te sugiero iniciar por la primera entrega: Introducción a UserForms

Artículo anterior: UserForms | Etiquetas y Cuadros de Texto. Formato del Formulario

Apuesto que el artículo de esta semana te dejará una gran sensación de recompensa. Aprenderemos cómo cargar la información ingresada a un formulario en una base de datos, por lo que con ello obtendrás un primer UserForm básico y funcional. Aún queda mucho por explorar sobre los UserForms, pero con este paso podrás empezar a utilizarlos en tus proyectos.

Como probablemente sospeches, para poder establecer una interacción entre la información del formulario y una tabla que actúe como base de datos en tu hoja de cálculo, necesitaremos código escrito en VBA.

Los pasos serán:

  1. Localizar la última fila de datos de nuestra base de datos, o mejor dicho, la primera vacía a continuación de ella.
  2. Completar cada campo de la nueva fila con el valor del respectivo cuadro de texto de nuestro formulario.
  3. Vaciar el formulario una vez cargados los datos, para prepararlo a un nuevo ingreso y el proceso pueda volver a repetirse.

Recordemos que cada campo de nuestra base de datos debe tener alguna relación con el formulario creado. En nuestro caso, hasta el momento tenemos:

  • Nombre
  • Apellido
  • Legajo
  • Edad

Para este ejemplo, he propuesto la siguiente tabla como base de datos, con algunos datos cargados:

Ahora, debemos desarrollar una macro que ejecute las acciones de los tres pasos que mencionábamos anteriormente, y que se desencadene al presionar el botón Aceptar del formulario que ya empezamos a crear:

Para crear la macro asociada a la acción de Click sobre el botón Aceptar, hacemos click derecho sobre el botón desde el Editor de Visual Basic > Ver código:

Esto nos llevará al código que habíamos empezado a desarrollar en una entrega anterior (puedes consultar la entrada UserForms | Asignar Acciones a los Botones ), pero ahora profundizaremos sobre el mismo para obtener resultados concretos.

Paso 1) Localizar la última fila de datos

Aquí existen varias alternativas, si utilizas habitualmente VBA seguro tienes una forma preferida de lograrlo. En este caso, trataremos una posible solución, pero siéntete libre de adaptarla:

  • En primer lugar, localizaremos la última celda de la hoja en la columna A. Esto podremos hacerlo a través de:
  • Luego, nos dirigiremos hacia arriba, hasta detectar un límite. Esto podemos lograrlo mediante la propiedad .End(xlUp)

Cells(Rows.Count,1)

El código anterior, refiere a la celda A1048576. Recuerda que el objeto Cells emplea dos argumentos (número de fila, número de columna).

Cells(Rows.Count,1).End(xlUp)

La línea anterior, devolverá la última celda con datos de nuestra tabla, que en el ejemplo de la captura, refiere a la celda A7. Como estaremos trabajando sobre varias columnas, en realidad más que la celda específica nos interesa obtener su fila (propiedad .Row). La primera celda vacía será la siguiente, por lo que sumamos +1 y asignamos este resultado a una variable llamada UFila. Esta variable, será de tipo Long por los valores que puede llegar a asumir:

Private Sub cmdAceptar_Click()

Dim UFila As Long

UFila = Cells(Rows.Count, 1).End(xlUp).Row + 1

End Sub

Paso 2) Cargar los datos

Recorreremos cada columna de la tabla dentro de UFila, cargando la información que exista en nuestro formulario. En este momento, agradecerás haberle definido nombres claros a los TextBox de tu formulario (ver UserForms | Etiquetas y Cuadros de Texto. Formato del Formulario).

El valor de la celda en la columna Legajo, deberá cargar el valor del TextBox que habíamos llamado txtLegajo. Te darás cuenta de que no es necesario que los objetos del formulario y la tabla sigan el mismo orden: con llamarlos por su nombre queda claro:

Cells(UFila,1).Value = txtLegajo.Value

Continuamos del mismo modo con los demás campos:

Cells(UFila,2).Value = txtNombre.Value

Cells(UFila,3).Value = txtApellido.Value

Cells(UFila,4).Value = txtEdad.Value

Paso 3) Vaciar el Formulario

Una vez que hemos cargado los datos en nuestra base de datos, ya no es necesario mantenerlos en nuestro formulario. Lo conveniente en estos casos es vaciar los campos, y luego cerrar el formulario, o, por el contrario, dejarlo abierto y preparado para un nuevo ingreso. De esa forma nos aseguramos de que no existan datos que se mantengan “pegados” de un ingreso anterior. Aplicaremos la segunda estrategia en nuestro ejemplo, asignando como valor del cada uno de los textbox, un texto vacío:

txtLegajo.Value = ""

txtNombre.Value = ""

txtApellido.Value = ""

txtEdad.Value = ""

Con esto hemos terminado nuestros tres bloques, y ha quedado listo el formulario de carga de datos:

Private Sub cmdAceptar_Click()

Dim UFila As Long

UFila = Cells(Rows.Count, 1).End(xlUp).Row + 1

Cells(UFila, 1).Value = txtLegajo.Value

Cells(UFila, 2).Value = txtNombre.Value

Cells(UFila, 3).Value = txtApellido.Value

Cells(UFila, 4).Value = txtEdad.Value

txtLegajo.Value = ""

txtNombre.Value = ""

txtApellido.Value = ""

txtEdad.Value = ""

End Sub

Hagamos un intento de cargar un nuevo registro a nuestra base. Abrimos el formulario a través del botón que creamos en la hoja, y empezamos a cargar datos en cada campo:

Presionamos Aceptar, y…

¿Parece magia, verdad? Espero que estés tan emocionado como yo de continuar explorando el universo de los UserForms. ¡Te espero en la próxima entrega!

Puedes descargar el archivo de nuestro ejemplo, aquí: UserForms - Ejemplo Artículo Carga de Información.xlsm

Siguiente artículo:

Botones de Opción