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.
Tabla de Contenido
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.
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.
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.
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.
Docente, IT Manager, Blogger & Developer. Escribo por diversión, educo por pasión. | Grandstanding is not my thing.