Formularios para búsqueda, alta, baja y actualización de registros en Excel
En este ejemplo les comparto algunos formularios con las acciones más comunes y solicitadas al momento de manejo de registros en bases de datos.
-
Búsqueda.
-
Alta.
-
Baja.
-
Actualización.
Tenemos una tabla con los encabezados ID, USARIO, DEPARTAMENTO y PUESTO, donde obligatoriamente el ID debe ser un registro único para que todas las acciones funcionen bien.
El primer formulario tendrá las acciones de ALTA y BUSCAR.
Figura 1. Acciones de Alta y búsqueda.
Ver el video Alta, Baja, Búsqueda y actualización de registros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Alta de registros
Al presionar el botón Alta se mostrará el segundo formulario para dar de alta datos en la tabla. Este formulario tiene la capacidad de detectar si el ID está dado de alta en la tabla y no podremos dar de alta el registro a menos que indiquemos otro ID.
Figura 2. No se podré registrar un ID duplicado.
Búsqueda de registros
Al registrar un ID que no esté repetido en la tabla, ahora procedemos a dar click en el botón Buscar del formulario de acciones.
La búsqueda se hace por departamento y ésta usa un operador LIKE para encontrar todos los registros similares, es decir, que contengan el texto a buscar.
Al filtrar nuestra búsqueda en el ListBox se mostrarán todos los resultados que coinciden con el texto buscado.
Figura 3. Resultado de la búsqueda en un ListBox.
Eliminar registros
Al tener el filtro con los resultados devueltos podemos elegir cualquiera de la lista y al presionar Eliminar se dará de baja el registro en la base de datos.
Actualizar registros
De la misma manera en que podemos eliminar registros, si damos click en el botón Modificar se mostrará otro formulario donde podremos modificar los campos del registro seleccionado.
Figura 4. Actualización de datos.
Código de las macros
Alta de registros
'Alta de un registro Private Sub CommandButton1_Click() 'Declaración de variables ' Dim strTitulo As String Dim Continuar As String Dim TransRowRng As Range Dim NewRow As Integer Dim Limpiar As String ' strTitulo = "EXCELeINFO" ' Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo) If Continuar = vbNo Then Exit Sub ' Cuenta = Application.WorksheetFunction.CountIf(Range("A:A"), Me.txtID) ' If Cuenta > 0 Then ' MsgBox "El ID '" & Me.txtID & "' ya se encuentra registrado", vbExclamation, strTitulo ' Else ' Set TransRowRng = ThisWorkbook.Worksheets("Hoja1").Cells(1, 1).CurrentRegion NewRow = TransRowRng.Rows.Count + 1 With ThisWorkbook.Worksheets("Hoja1") .Cells(NewRow, 1).Value = Me.txtID .Cells(NewRow, 2).Value = Me.txtUsuario .Cells(NewRow, 3).Value = Me.txtDepartamento .Cells(NewRow, 4).Value = Me.txtPuesto End With ' MsgBox "Alta exitosa.", vbInformation, strTitulo ' Unload Me End If
Búsqueda de registros
'Abrir el formulario para modificar Private Sub CommandButton3_Click() If Me.ListBox1.ListIndex < 0 Then MsgBox "No se ha elegido ningún registro", vbExclamation, "EXCELeINFO" Else frmModificar.Show End If End Sub ' 'Eliminar el registro Private Sub CommandButton4_Click() Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "EXCELeINFO") If Pregunta <> vbNo Then ActiveCell.EntireRow.Delete End If Call CommandButton5_Click End Sub ' 'Mostrar resultado en ListBox Private Sub CommandButton5_Click() On Error GoTo Errores If Me.txtFiltro1.Value = "" Then Exit Sub Me.ListBox1.Clear j = 1 Filas = Range("a1").CurrentRegion.Rows.Count For i = 2 To Filas If LCase(Cells(i, j).Offset(0, 2).Value) Like "*" & LCase(Me.txtFiltro1.Value) & "*" Then Me.ListBox1.AddItem Cells(i, j) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(i, j).Offset(0, 3) Else End If Next i Exit Sub Errores: MsgBox "No se encuentra.", vbExclamation, "EXCELeINFO" End Sub ' 'Activar la celda del registro elegido Private Sub ListBox1_Click() Range("a2").Activate Cuenta = Me.ListBox1.ListCount Set Rango = Range("A1").CurrentRegion For i = 0 To Cuenta - 1 If Me.ListBox1.Selected(i) Then Valor = Me.ListBox1.List(i) Rango.Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Activate End If Next i End Sub ' 'Dar formato al ListBox y traer datos de la tabla Private Sub UserForm_Initialize() For i = 1 To 4 Me.Controls("Label" & i) = Cells(1, i).Value Next i With ListBox1 .ColumnCount = 4 .ColumnWidths = "60 pt;60 pt;60 pt;60 pt" End With End Sub
Actualizar registros
'Actualizar el registro Private Sub CommandButton1_Click() For i = 1 To 4 ActiveCell.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value Next i Unload Me End Sub ' 'Llenar los cuadro de texto con los datos del registro elegido Private Sub UserForm_Initialize() For i = 1 To 4 Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value Next i End Sub
Descarga el archivo de ejemplo
:: Descargar el ejemplo Alta, Baja y actualización de registros con búsqueda en ListBox.rar