miércoles, 30 de agosto de 2017

VBA: Botones de Siguiente y Anterior en un UserForm

Días atrás recibí una solicitud de ayuda de un lector que demandaba colaboración para realizar un formulario de usuario con VBA donde implementar unos botones típicos de Siguiente y Anterior, así como dos más de Inicio y Fin.
Aunque el desarrollo es bastante sencillo, me pareció interesante compartirlo...


Para el ejemplo necesitamos una base de datos simple de cuatro campos (Nombre, Apellidos, Edad y Sexo):

VBA: Botones de Siguiente y Anterior en un UserForm



Igualmente necesitamos componer nuestro formulario con los siguientes controles:
4 cuadros de texto (TextBox):
txtNombre
txtApellido
txtEdad
txtSexo
4 botones de comando (CommandBox):
cmdInicio
cmdAnterior
cmdSiguiente
cmdFin
y opcionalmente unas etiquetas para identificar los campos en el UserForm.
Este podría ser un diseño:

VBA: Botones de Siguiente y Anterior en un UserForm



Y ahora lo importante.. en la ventana de código del UserForm incluimos los siguiente procedimientos:

'variables a emplear entre los diferentes procedimientos más abajo
Dim fila As Long
Dim NumItems As Long

Private Sub UserForm_Initialize()
Dim filaIni As Long
'damos valores de partida
fila = 2
'rellenamos el formulario
RecuperaDatos (fila)
'y determinamos el número total de registros
NumItems = WorksheetFunction.CountA(Range("A:A")) - 1
End Sub

'Gestionamos los botones  de Siguiente y Anterior
Private Sub cmdSiguiente_Click()
'controlamos el botón de Siguiente
'limitándolo por el último registro
If fila <= NumItems Then
    fila = fila + 1
    RecuperaDatos (fila)
Else
    MsgBox "Último registro"
End If
End Sub

Private Sub cmdAnterior_Click()
'controlamos el botón de Anterior
'limitándolo por el primer registro
If fila > 2 Then
    fila = fila - 1
    RecuperaDatos (fila)
Else
    MsgBox "Primera entrada!!"
End If
End Sub
  
Private Sub cmdFin_Click()
fila = NumItems + 1
RecuperaDatos (fila)
End Sub

Private Sub cmdInicio_Click()
fila = 2
RecuperaDatos (2)
End Sub

'Procedimiento para recuperar datos de la hoja hacia el UserForm
Private Sub RecuperaDatos(nRow As Long)
    Me.TxtNombre.Value = Cells(nRow, 1)
    Me.TxtApellido.Value = Cells(nRow, 2)
    Me.txtEdad.Value = Cells(nRow, 3)
    Me.txtSexo.Value = Cells(nRow, 4)
End Sub



Listo... puedes comprobar rápidamente el correcto funcionamiento de los diferentes botones.

1 comentario:

Nota: solo los miembros de este blog pueden publicar comentarios.