miércoles, 22 de diciembre de 2021

Navegar por registros: primero anterior siguiente y ultimo en userform

A continuación les comparto el código que nos permite navegar registro por registro de una hoja con fatos en un Userform.

Con programación VBA Excel es prácticamente sencillo. Para ello debemos seguir 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.
'Declaramos variables publicas que manejaremos en todo el formulario
Public intvalor As Integer
Public intregistros As Integer
Private Sub UserForm_Initialize()
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
End Sub
Private Sub CommandButton1_Click()
intvalor = 2
Me.TextBox1.Text = Hoja1.Cells(2, 1)
Me.TextBox2.Text = Hoja1.Cells(2, 2)
Me.TextBox3.Text = Hoja1.Cells(2, 3)
Me.ComboBox1.Text = Hoja1.Cells(2, 4)
Me.TextBox4.Text = Hoja1.Cells(2, 5)
Me.TextBox5.Text = Hoja1.Cells(2, 6)
Me.TextBox6.Text = Hoja1.Cells(2, 7)
Me.CommandButton1.Enabled = False
Me.CommandButton2.Enabled = False
Me.CommandButton3.Enabled = True
Me.CommandButton4.Enabled = True
End Sub
Private Sub CommandButton2_Click()
If intvalor = 2 Then
    Me.CommandButton1.Enabled = False
    Me.CommandButton2.Enabled = False
    Me.CommandButton3.Enabled = True
    Me.CommandButton4.Enabled = True
    MsgBox "Estas en el primer registro", vbOKOnly + vbInformation, "Primer registro"
Else
    intvalor = intvalor - 1
    Me.TextBox1.Text = Hoja1.Cells(intvalor, 1)
    Me.TextBox2.Text = Hoja1.Cells(intvalor, 2)
    Me.TextBox3.Text = Hoja1.Cells(intvalor, 3)
    Me.ComboBox1.Text = Hoja1.Cells(intvalor, 4)
    Me.TextBox4.Text = Hoja1.Cells(intvalor, 5)
    Me.TextBox5.Text = Hoja1.Cells(intvalor, 6)
    Me.TextBox6.Text = Hoja1.Cells(intvalor, 7)
    Me.CommandButton3.Enabled = True
    Me.CommandButton4.Enabled = True
End If
End Sub
Private Sub CommandButton3_Click()
intvalor = intvalor + 1
If intvalor = intregistros + 1 Then
    Me.CommandButton1.Enabled = True
    Me.CommandButton2.Enabled = True
    Me.CommandButton3.Enabled = False
    Me.CommandButton4.Enabled = False
    MsgBox "Estas en el último registro", vbOKOnly + vbInformation, "Ultimo registro"
Else
    Me.TextBox1.Text = Hoja1.Cells(intvalor, 1)
    Me.TextBox2.Text = Hoja1.Cells(intvalor, 2)
    Me.TextBox3.Text = Hoja1.Cells(intvalor, 3)
    Me.ComboBox1.Text = Hoja1.Cells(intvalor, 4)
    Me.TextBox4.Text = Hoja1.Cells(intvalor, 5)
    Me.TextBox5.Text = Hoja1.Cells(intvalor, 6)
    Me.TextBox6.Text = Hoja1.Cells(intvalor, 7)
End If
If intvalor > 2 Then
    Me.CommandButton1.Enabled = True
    Me.CommandButton2.Enabled = True
End If
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
End Sub
Private Sub CommandButton4_Click()
'Contamos el numero de registros en la hoja 1
intregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
intvalor = intregistros
Me.TextBox1.Text = Hoja1.Cells(intregistros, 1)
Me.TextBox2.Text = Hoja1.Cells(intregistros, 2)
Me.TextBox3.Text = Hoja1.Cells(intregistros, 3)
Me.ComboBox1.Text = Hoja1.Cells(intregistros, 4)
Me.TextBox4.Text = Hoja1.Cells(intregistros, 5)
Me.TextBox5.Text = Hoja1.Cells(intregistros, 6)
Me.TextBox6.Text = Hoja1.Cells(intregistros, 7)
Me.CommandButton1.Enabled = True
Me.CommandButton2.Enabled = True
Me.CommandButton3.Enabled = False
Me.CommandButton4.Enabled = False
End Sub

Navegar por registros en userform

Mensaje cuando llegamos al primer registro

Mensaje cuando llegamos al ultimo registro

Hoja 1 con datos


1 comentario: