Como Crear CRUD en Excel con VBA y Macros - CableNaranja

Como crear un CRUD en #Excel con #VBA – Parte 3

¡Comparte nuestro contenido!

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

En las dos entregas anteriores, creamos todo lo necesario para comenzar a trabajar con nuestros datos y después hicimos el alta de registros en nuestra lista. En esta ocasión nos enfocaremos en el proceso de eliminación o baja de datos ¡Presionemos Alt + F11 para regresar a Visual Basic, es hora de trabajar!

Creando el formulario para eliminar

En la sección de Formularios de nuestro Administrador de proyectos, presionamos el botón secundario del ratón. Seleccionemos Insertar y luego UserForm.

Como crear un CRUD en Excel con VBA - Eliminar

Cambiemos la propiedad (Name) de nuestro formulario nuevo a frmBaja y la propiedad Caption a “Eliminar Personas”.

Como crear un CRUD en Excel con VBA - Eliminar

En el Cuadro de herramientas, seleccionamos la Etiqueta, coloquemos una en nuestro formulario. La propiedad Caption la cambiamos a “Seleccione la persona que desea eliminar”, juguemos un poco con la propiedad Font para hacer la letra más grande. Por último, ajustemos la propiedad TextAlign con el valor fmTextAlignCenter.

Como crear un CRUD en Excel con VBA - Eliminar

Regresemos al Cuadro de herramientas, utilizaremos ahora la herramienta Cuadro de lista. Dibujemos uno.

Como crear un CRUD en Excel con VBA - Eliminar

Le cambiamos su propiedad (Name) por lstPersona. También, modificamos la propiedad RowSource por la formula:

=datos[nombre]

Recordando que nuestra lista lleva por nombre “datos” y su primera columna precisamente es “Nombre”

Como crear un CRUD en Excel con VBA - Eliminar

Si todo salió bien, debemos tener una vista previa de los nombres en nuestro cuadro de lista.

Como crear un CRUD en Excel con VBA - Eliminar

Para terminar esta parte, tomemos el Botón de comando, dibujemos uno debajo del cuadro de lista, y la cambiamos su propiedad Caption a “Eliminar”

Como crear un CRUD en Excel con VBA - Eliminar

Modificando el módulo general

En nuestra sección de Módulos, demos doble click en Módulo1. Vamos a crear una función para algo que ya habíamos hecho antes. Dado que no quiero repetirlo de nuevo, es el momento perfecto para insertar una función. A diferencia de la subrutinas, las funciones si pueden regresar valores, esto se logra añadiendo al final del nombre de la función la palabra reservada As y de inmediato el tipo de datos que necesitamos.

En nuestro caso, llamaremos a la función totalPersonas y necesitamos que regrese un número entero con la totalidad de filas en la tabla, entonces queda así:

Function totalPersonas() As Integer
End Function

Para que la función regrese el valor que necesitamos, tenemos que asignarle dicho valor al nombre de la misma, en nuestro caso:

totalPersonas = Hoja1.ListObjects("datos").ListRows.Count

Debe quedar como sigue:

Como crear un CRUD en Excel con VBA - Eliminar

Ahora necesitamos la subrutina para invocar este formulario más adelante, le llamaremos MostrarBaja.

Sub MostrarBaja()
End Sub

Invocamos el método Show del formulario

frmBaja.Show

Y queda así:

Como crear un CRUD en Excel con VBA - Eliminar

Programando el botón de Eliminar

Regresemos a frmBaja. Es momento de añadir código al botón de comando que hicimos hace rato. Le damos un doble click y estaremos en su evento Click.

Necesitamos 3 variables de tipo Integer. La primera variable la llamaremos seleccion (sin acento) nos servirá para saber cual elemento del cuadro de lista hemos seleccionado. La segunda se llamará total y en ella guardaremos lo que nos regrese la función totalPersonas. La última la llamaremos simplemente f como abreviación de filas.

Dim seleccion, total, f as Integer

Usaremos dos variables de tipo String, la primera para la persona que hallamos seleccionado del cuadro de lista, y la segunda será la que busque dentro de nuestra tabla.

Dim persona, buscando as String

Con una variable de tipo ListRows podremos eliminar el dato encontrado. Le llamaremos fila, ya que nos permitirá ir de fila en fila hasta el final.

Dim fila as ListRows

La última de nuestras variables será de tipo Variant, esta servirá para detectar el botón Sí que le añadiremos a un MsgBox.

Dim respuesta as Variant

Capturamos el total de personas en nuestra tabla

total = totalPersonas()

Tomamos el índice del elemento seleccionado de nuestro Cuadro de lista.

seleccion = lstPersona.ListIndex

Si no hay ningún elemento seleccionado, entonces ListIndex entregará el valor de -1, entonces notificamos que no hay ningún dato seleccionado.

If seleccion = -1 then
   MsgBox "Por favor, seleccione una persona"
Else
End If

Trabajemos dentro del Else para programar lo que sigue. Tenemos que comprobar si quedan personas en la lista. La variable total nos dice eso, por lo que si vale 0 entonces ya no hay personas en la lista, queda simplemente cerrar el formulario.

If total = 0 Then
   MsgBox "No hay personas en la lista"
   Unload Me 'Le pedimos que se descargue
Else
End If

Trabajemos en este segundo Else. Si las dos comprobaciones anteriores son falsas significa que el cuadro de lista todavía tiene elementos, y tenemos datos en nuestra tabla. Es tiempo de eliminar un dato.

Comencemos recuperando el elemento seleccionado del cuadro de lista.

persona = lstPersona.Value

Creamos el objeto ListRows basado en nuestra tabla actual.

Set fila = Hoja1.ListObjects("datos").ListRows

Lancemos la pregunta, después de todo, no es buena idea dejar que se elimine un dato simplemente.

respuesta = MsgBox("¿En verdad desea eliminar a la persona?", vbYesNo)

Notemos que el MsgBox tiene un segundo parámetro. Este valor representa los botones “Sí” y “No” y regresa un valor de tipo Variant con uno de estos dos valores: vbYes (Botón Sí) y vbNo (Botón No)

Entonces, si la respuesta obtenida es “Sí”:

If respuesta = vbYes Then
End If

Trabajemos dentro de ese If. Con un For desde 1 hasta el total de elementos en la tabla, los iremos recorriendo.

For f = 1 To total
Next

Ya dentro del For, lo primero será ir buscando los nombres. Recordando un poco, cada tabla tiene una colección llamada DataBodyRange que contiene sólo los datos y recibe dos valores. El primer valor representa la fila y el segundo valor representa la columna. Entonces, tomamos el nombre y con Trim, eliminamos cualquier espacio en blanco extra.

buscando = Trim(Hoja1.ListObjects("datos").DataBodyRange(f, 1))

Si al comparar el nombre tomado de la tabla contra el nombre que seleccionamos en nuestro cuadro de lista, encontramos que son iguales…

If persona = buscando Then
End If

Todo objeto de tipo ListRows contiene una colección llamada Item que son los valores en fila, por lo tanto al haber encontrado la fila correspondiente, eliminamos con Delete esa fila.

fila.Item(f).Delete

Notificamos que se ha eliminado la persona buscada.

MsgBox "Se ha eliminado a la persona de la lista"

Quitamos el objeto de tipo ListRows al hacerlo valor a Nothing (Nada)

Set fila = Nothing

Y rompemos el For para que no continué buscando

Exit For

Después de tanto código. Debemos de tener escrito lo siguiente:

Como crear un CRUD en Excel con VBA - Eliminar

Añadir el botón en la Cinta de opciones

Vamos al menú Personas que hicimos en las entregas pasadas. Dentro del menú, presionamos el botón secundario del ratón y elegimos Personalizar la Cinta de opciones.

Como crear un CRUD en Excel con VBA - Eliminar

Ya en la ventana de dialogo, le damos click al grupo CRUD (personalizada)

Como crear un CRUD en Excel con VBA - Eliminar

Luego abrimos la sección Comandos disponibles en, elegimos la opción Macros, seleccionamos la subrutina MostrarBaja y presionamos el botón Agregar.

Como crear un CRUD en Excel con VBA - Eliminar

Una vez agregado lo seleccionamos, y en la parte inferior encontramos el botón Cambiar nombre.

Como crear un CRUD en Excel con VBA - Eliminar

Cambiemos su Nombre para mostrar a “Eliminar Personas” (sin las comillas), le ponemos un icono adecuado y presionamos Aceptar.

Como crear un CRUD en Excel con VBA - Eliminar

De regreso a la ventana Anterior, simplemente presionamos Aceptar.

Como crear un CRUD en Excel con VBA - Eliminar

Nuestro Menú ya comienza a tener más sentido.

Como crear un CRUD en Excel con VBA - Eliminar

Es hora de Probar el resultado

Con todo el trabajo terminado, ha llegado el momento de probar lo que hemos hecho. Observa el siguiente video demostrativo.

¿Te ha resultado? Déjanos saber en los comentarios aquí abajo, en nuestra cuenta de twitter @cablenaranja7 o en nuestra página de facebook.

¡Comparte nuestro contenido!

Entradas relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *