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

Como Crear CRUD Excel VBA Parte2 - CableNaranja

¡Comparte nuestro contenido!

En la primera parte, dejamos todo el escenario preparado para desarrollar nuestro CRUD: creamos la tabla, le dimos formato e hicimos el formulario para el Alta de nuestros datos. Es momento de echar a andar esa parte.

De regreso a VBA

Una vez abierto nuestro archivo, presionemos Alt + F11 para regresar al IDE de VBA. En el administrador de proyectos bajo la sección Formularios, busquemos frmAlta y demosle un doble click.

Como crear un CRUD en Excel con VBA - CableNaranja

Para programar el botón que hemos rotulado como “Guardar Datos”, sólo tenemos que darle un doble click para que nos muestre el editor de código con el evento Click de nuestro objeto.

Como crear un CRUD en Excel con VBA - CableNaranja

Añadiendo las variables necesarias

Necesitamos algunas variables de tipo String para el nombre, sexo y telefono, otra para el mensaje que mostraremos cuando suceda algo y un par más para hacer validación. En cuanto a variables de tipo Integer necesitaremos una para la edad, otra para saber la cantidad de registros y una más para recorrer la tabla.

También vamos a añadir dos variables de tipo Boolean una para saber si estamos en condiciones de guardar los datos y otra para saber si el dato que queremos registrar ya existe. La primera la iniciaremos en True y la segunda en False. Finalmente, usaremos una variable de tipo ListRow para añadir una fila nueva a la tabla.

Dim nombre, telefono, sexo, mensaje, hNombre, hTelefono As String
Dim edad, cantidad, c As Integer
Dim guardado, hallado As Boolean
Dim nuevafila As ListRow
guardado = True
hallado = False
mensaje = ""

Comprobando los valores

Haremos una comprobación simple. La función Len permite conocer la longitud de una variable u objeto de texto, mientras que, la función Trim elimina los espacios innecesarios que puedan llegar a añadirse a un texto. Con ambas funciones revisaremos los objetos de nuestro formulario con unos valores mínimos que podemos ajustar según nuestra necesidad, por ejemplo: 3 caracteres para el nombre.

Cuando se cumpla alguna de estas condiciones, guardaremos y concatenaremos el mensaje correspondiente y, cambiaremos el valor de la variable guardado a False.

If Len(Trim(txtNombre.Text)) < 3 Then
        mensaje = "Escriba el NOMBRE de la persona" + vbCrLf
        guardado = False
    End If
    If Len(Trim(cmbEdad.Value)) = 0 Then
        mensaje = mensaje + "Seleccione un valor para EDAD" + vbCrLf
        guardado = False
    End If
    If Len(Trim(cmbSexo.Value)) = 0 Then
        mensaje = mensaje + "Seleccione un valor para SEXO" + vbCrLf
        guardado = False
    End If
    If Len(Trim(txtTelefono.Text)) < 10 Then
        mensaje = mensaje + "Escriba el número de TELÉFONO" + vbCrLf
        guardado = False
    End If

Por cierto, el valor vbCrLf equivale a salto de línea.

Si nos llega a faltar alguno de los 4 valores, entonces la variable guardado cambiará a False, en ese caso es hora de mostrar el mensaje. Usaremos el operador Not para revisar el valor contrario a True.

If Not(guardado) Then
   MsgBox mensaje
Else
' Y si guardado nunca cambió a False...
End if

Comprobando la existencia de un dato

Trabajando dentro del Else, lo primero que necesitamos es pasar los valores de los objetos de formulario a las variables correspondientes.

nombre = txtNombre.Text
edad = cmbEdad.Value
sexo = cmbSexo.Value
telefono = txtTelefono.Text

Necesitamos saber la cantidad de filas que hay en nuestra tabla. Para saber eso, necesitamos invocar la propiedad Count del arreglo ListRows de la colección ListObjects. Para entenderlo mejor, ListObjects contiene objetos que representan listas de datos, ListRows representa todas las filas de la lista y Count es el valor exacto de filas que hay.

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

Con un ciclo For de 1 hasta cantidad, revisaremos nuestra lista por medio de la colección DataBodyRange que representa los datos de la tabla (sin encabezados) en formato de filas y columnas.

For c = 1 To cantidad

Dentro de ese For, tomemos el nombre y teléfono que encontremos. Importante usar Trim ya que en algunos casos DataBodyRange añade espacios en blanco sobrantes y eso puede ser muy frustrante porque la documentación oficial no menciona nada al respecto.

hNombre = Trim(Hoja1.ListObjects("datos").DataBodyRange(c, 1))
hTelefono = Trim(Hoja1.ListObjects("datos").DataBodyRange(c, 4))

Notese que usamos la variable C para recorrer las filas y establecimos la columna a 1 para el nombre y 4 para teléfono. Ahora bien, si el nombre y teléfono que tomemos de la lista son los mismos que capturamos en nuestro formulario.

If nombre = hNombre And telefono = hTelefono Then
   hallado = True
   Exit For
End If

Cambiamos la variable hallado de False a True y terminamos el For para no seguir revisando el resto de la tabla. Una vez cerrado el If anterior, resta el Next para nuestro For.

Next

Así debe verse esta parte del código.

Como crear un CRUD en Excel con VBA - CableNaranja

Guardando finalmente el valor en nuestra tabla

La variable hallado únicamente pasa de False a True si encontramos un valor con el mismo nombre y teléfono dentro de la tabla, por lo tanto si nunca cambia a True significa que podemos insertar con seguridad el nuevo elemento a nuestra tabla. En caso contrario, guardamos el mensaje correspondiente.

If Not(hallado) Then
   ' Aquí trabajaremos
Else
   mensaje = "El registro ya existe, intente con otros datos"
End if

ListRows contiene un método llamado Add que permite insertar una nueva fila a la tabla. Utilizaremos nuestra variable de tipo ListRow y la asignaremos precisamente a ese método de nuestra tabla.

Set nuevafila = Hoja1.ListObjects("datos").ListRows.Add

Invocando al arreglo Range que contiene la relación de columnas, asignamos nuestras variables en las posiciones que les corresponden.

nuevafila.Range(1) = nombre
nuevafila.Range(2) = edad
nuevafila.Range(3) = sexo
nuevafila.Range(4) = telefono

Ahora, limpiemos las cajas de texto y hagamos que los cuadro combinados apunten al elemento 0 de su colección, todo esto con el fin de dejar el formulario como estaba al inicio.

txtNombre.Text = ""
cmbEdad.ListIndex = 0
cmbSexo.ListIndex = 0
txtTelefono.Text = ""

Ahora, guardamos el mensaje de éxito

mensaje = "Registro guardado con éxito"

Saliendonos del If hemos de mostrar el mensaje que obtuvimos, cualquiera que este sea.

MsgBox mensaje

Finalmente, descargamos el formulario.

Unload Me

¡A probar el ejemplo!

Es hora de probar todo lo que hemos escrito. Observa el siguiente video con el resultado.

¿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!

Israel García

Docente, IT Manager, Blogger & Developer. Escribo por diversión, educo por pasión. | Grandstanding is not my thing.

Podría también gustarte...

Deja un comentario

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

shares