lunes, 20 de diciembre de 2021

Guardar buscar modificar y eliminar una fila de una hoja en userfom

En este ejemplo les muestro como guardar, buscar, modificar y eliminar un registro de una hoja en un formulario, esto es realmente muy sencillo. Para ello seguimos los siguientes pasos.

  1. Crear una hoja con datos.
  2. Ingresar al editor VBA excel.
  3. Insertar un formulario con los componentes:
    • 7 Etiqueta (Label1,2,3,4,5,6 y 7)
    • 6 Caja de texto (TextBox1, 2,3,4,5,6 y7)
    • 1 Cuadro combinado (ComboBox1)
    • 4 Botones de comando (CommandButton1,2,3,4)
  4. Escribir el siguiente código.
Private Sub UserForm_Initialize()
Dim intregistros As Integer
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
Me.TextBox1.Text = intregistros
Me.TextBox3.Text = Date
Me.ComboBox1.AddItem "FEMENINO"
Me.ComboBox1.AddItem "MASCULINO"
End Sub
Private Sub CommandButton1_Click()
Dim intregistros As Integer
Dim intrespuesta As Integer
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
intrespuesta = MsgBox("¿Los datos son correctos?", vbYesNo + vbQuestion, "Antes de guardar")
If intrespuesta = vbNo Then Exit Sub
Hoja1.Cells(intregistros + 1, 1) = Me.TextBox1.Text
Hoja1.Cells(intregistros + 1, 2) = Me.TextBox2.Text
Hoja1.Cells(intregistros + 1, 3) = Me.TextBox3.Text
Hoja1.Cells(intregistros + 1, 4) = Me.ComboBox1.Text
Hoja1.Cells(intregistros + 1, 5) = Me.TextBox4.Text
Hoja1.Cells(intregistros + 1, 6) = Me.TextBox5.Text
Hoja1.Cells(intregistros + 1, 7) = Me.TextBox6.Text
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
Me.TextBox1.Text = intregistros
LimpiarControles
End Sub
Private Sub CommandButton2_Click()
Dim intide As Integer
Dim intval As Integer
Dim intregistros As Integer
LimpiarControles
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
intval = 0
For intcon = 2 To intregistros
    intide = Hoja1.Cells(intcon, 1)
    If intide = Me.TextBox1.Text Then
        Me.TextBox2.Text = Hoja1.Cells(intcon, 2)
        Me.TextBox3.Text = Hoja1.Cells(intcon, 3)
        Me.ComboBox1.Text = Hoja1.Cells(intcon, 4)
        Me.TextBox4.Text = Hoja1.Cells(intcon, 5)
        Me.TextBox5.Text = Hoja1.Cells(intcon, 6)
        Me.TextBox6.Text = Hoja1.Cells(intcon, 7)
        intval = 1
        Exit For
    End If
Next intcon
If intval = 0 Then
    MsgBox "El registro no existe", vbInformation, "No encontrado"
End If
End Sub
Private Sub CommandButton3_Click()
Dim intide As Integer
Dim intval As Integer
Dim intregistros As Integer
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
intval = 0
For intcon = 2 To intregistros
    intide = Hoja1.Cells(intcon, 1)
    If intide = Me.TextBox1.Text Then
        Hoja1.Cells(intcon, 2) = Me.TextBox2.Text
        Hoja1.Cells(intcon, 3) = Me.TextBox3.Text
        Hoja1.Cells(intcon, 4) = Me.ComboBox1.Text
        Hoja1.Cells(intcon, 5) = Me.TextBox4.Text
        Hoja1.Cells(intcon, 6) = Me.TextBox5.Text
        Hoja1.Cells(intcon, 7) = Me.TextBox6.Text
        intval = 1
        MsgBox "El registro fué actualizado", vbInformation, "Registro actualizado"
        LimpiarControles
        Exit For
    End If
Next intcon
If intval = 0 Then
    MsgBox "El registro no se actualizó", vbInformation, "No actualizado"
End If
End Sub
Private Sub CommandButton4_Click()
Dim intide As Integer
Dim intval As Integer
Dim intregistros As Integer
Dim intrespuesta As Integer
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
intval = 0
For intcon = 2 To intregistros
    intide = Hoja1.Cells(intcon, 1)
    If intide = Me.TextBox1.Text Then
        intrespuesta = MsgBox("¿Deséa eliminar el registro?", vbYesNo + vbQuestion, "Antes de eliminar")
        If intrespuesta = vbYes Then
            Hoja1.Rows(intcon).EntireRow.Delete
            LimpiarControles
            intval = 1
            Exit For
        End If
    End If
Next intcon
If intval = 0 Then
    MsgBox "El registro no se eliminó", vbInformation, "No encontrado"
End If
End Sub
Private Sub LimpiarControles()
    Me.TextBox2.Text = Clear
    Me.TextBox3.Text = Clear
    Me.TextBox4.Text = Clear
    Me.TextBox5.Text = Clear
    Me.TextBox6.Text = Clear
    Me.ComboBox1.Text = Clear
End Sub


Hoja de datos


Operaciones con registros: guardar, buscar, modificar y eliminar un registro en UserForm

1 comentario:

  1. Buenos días mi estimado, cuando eliminamos un registro ya no es válido el ID utilizando la variable "intregistros", podría ser utilizando el número de ID mayor mas uno, solo es una sugerencia...

    ResponderBorrar