Botón siguiente y anterior en formulario excel.

Gracias a un experto estoy dando un toque más agradable a un programa de fórmulas medicas, funciona así, para guardar la información tengo un formulario donde dígito el numero de identificación, nombre, medicamentos etc. Y guardo el contenido del formulario.. Ahora quise hacer lo contrario, por medio de otro formulario tener la posibilidad de digitar en un textbox el numero de identificación y con un botón buscar ver las fórmulas del usuario con cada dato en su tetxbox coresspondiente, como nombre, medicamentos etc.
El problema esta en que hay usuarios que ya tienen varias facturas y de esta forma solo puedo ver la primera que esta en la lista, Y pues quiero darle la posibilidad de que día hay varias fórmulas tenga la posibilidad de avanzar o retroceder entre ellas por medio de botón siguiente y anterior. Anexo lo que tengo hasta el momento y agradezco la ayuda posible.
Private Sub CommandButton1_Click()
Dim Dato As String, Fila As Integer, HayDatos As Boolean
Dato = Me.TextBox1: HayDatos = False
Sheets(1).Select
For Fila = 1 To Range("A65536").End(xlUp).Row
If Cells(Fila, 1) = Dato Then
Me.Label1.Caption = Cells(Fila, 2)
Me.Label2.Caption = Cells(Fila, 3)
Me.Label3.Caption = Cells(Fila, 4)
Me.Label4.Caption = Cells(Fila, 5)
Me.Label5.Caption = Cells(Fila, 6)
Me.TextBox2.Text = Cells(Fila, 2)
Me.TextBox3.Text = Cells(Fila, 3)
Me.TextBox4.Text = Cells(Fila, 4)
Me.TextBox5.Text = Cells(Fila, 5)
Me.TextBox6.Text = Cells(Fila, 6)
'resto de controles
HayDatos = True
End If
Next
If HayDatos = False Then MsgBox "No hay datos de este usuario", vbOKOnly, "Info"
End Sub

1 respuesta

Respuesta
1
A tu UserForm añádele 2 CommandButton llamados:
                   CommandButton2 y CommandButton3
Copia este código en tu UserForm .
Dim Dato As String, HayDatos As Boolean
Private Sub UserForm_Initialize()
    CommandButton1.Caption = "Buscar Registro"
    CommandButton2.Caption = "Siguiente"
    CommandButton3.Caption = "Anterior"
    Sheets(1).Select
End Sub
Private Sub TextBox1_Enter()
    CommandButton1.Caption = "Buscar Registro"
    CommandButton1.Enabled = False
    CommandButton2.Enabled = False
    CommandButton3.Enabled = False
End Sub
Private Sub TextBox1_Change()
    CommandButton1.Enabled = True
End Sub
Private Sub CommandButton1_Click()
    Range("A1").Select
    Dato = TextBox1
    If Dato = "" Then Exit Sub
    HayDatos = False
    BuscarSiguiente
    If HayDatos = True Then
        CommandButton1.Caption = "Buscar desde el Inicio"
        CommandButton2.Enabled = True
        CommandButton3.Enabled = True
        CommandButton2.SetFocus
    End If
End Sub
Private Sub CommandButton2_Click() 'Buscar Siguiente
    HayDatos = False
    BuscarSiguiente
End Sub
Private Sub CommandButton3_Click() 'Buscar Anterior
    HayDatos = False
    BuscarAnterior
End Sub
Sub BuscarSiguiente()
    Do While ActiveCell <> ""
        ActiveCell.Offset(1, 0).Select
        If ActiveCell = Dato Then
            DatosEncontrados
            HayDatos = True
            CommandButton1.Enabled = True
            CommandButton2.Enabled = True
            Exit Do
        End If
    Loop
    If HayDatos = False Then
        If CommandButton3.Enabled = False Then
            MsgBox "No hay datos de este usuario", vbOKOnly, "Info"
            TextBox1 = ""
            CommandButton1.Enabled = False
        Else
            MsgBox "No hay mas datos de este usuario", vbOKOnly, "Info"
        End If
    End If
End Sub
Sub BuscarAnterior()
    Do While ActiveCell <> Range("A1")
        ActiveCell.Offset(-1, 0).Select
        If ActiveCell = Dato Then
            DatosEncontrados
            HayDatos = True
            Exit Do
        End If
    Loop
    If HayDatos = False Then MsgBox "No hay mas datos de este usuario", vbOKOnly, "Info"
End Sub
Sub DatosEncontrados()
Label1.Caption = ActiveCell.Offset(0, 1)
Label2.Caption = ActiveCell.Offset(0, 2)
Label3.Caption = ActiveCell.Offset(0, 3)
Label4.Caption = ActiveCell.Offset(0, 4)
Label5.Caption = ActiveCell.Offset(0, 5)
TextBox2.Text = ActiveCell.Offset(0, 1)
TextBox3.Text = ActiveCell.Offset(0, 2)
TextBox4.Text = ActiveCell.Offset(0, 3)
TextBox5.Text = ActiveCell.Offset(0, 4)
TextBox6.Text = ActiveCell.Offset(0, 5)
End Sub
Gracias por la pronta respuesta,, esa es la idea pero hay algo que no me deja que funciones bien,, y ademas si tengo un solo dato se me queda enganchado la ultima búsqueda y no me deja hacer más nada,, agradezco la orientación.
¿Podrías ser más especifico en tus observaciones?
¿Cuándo mencionas "hay algo que no me deja que funciones bien" y "si tengo un solo dato se me queda enganchado la ultima búsqueda y no me deja hacer más nada" a que te refieres exactamente?
En este código, se asume que en el UserForm solo existen los siguientes controles :
5 Label ( Label1, Label2, Label3, Label4, Label5)
6 TextBox (TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6). En el TextBox1 se ingresa el usuario buscado.
3 CommandButton (CommandButton1, CommandButton2, CommandButton3)
Gracias por la atención era un error mio ya que estaba dejando en la primera fila los primeros datos,, solo me faltaba poner los títulos de las columnas en A1, B1, C1, D1, E1 y problema resuelto ya puedo recorrer hacia adelante y hacia atrás por los formularios. Excelente trabajo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas