Como realizar una búsqueda en un listbox que tiene cargada una tabla de excel

Código del formulario para mostrar datos

'Cerrar formulario
Private Sub CommandButton2_Click()
Unload Me
End Sub
'
'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
Modificar.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
    Fila = Me.ListBox1.ListIndex + 2
    Rows(Fila).Delete
Application.ScreenUpdating = True
End If
End Sub
'
'Activar la celda del registro elegido
Private Sub ListBox1_Click()
Fila = Me.ListBox1.ListIndex + 2
For i = 1 To 4
    Cells(Fila, 1).Activate
Next i
End Sub
'Dar formato al ListBox y traer datos de la tabla
Private Sub UserForm_Initialize()
With ListBox1
    .ColumnCount = 4
    .ColumnWidths = "60 pt;60 pt;70 pt"
    .ColumnHeads = True
End With
ListBox1.RowSource = "Tabla1"
End Sub

Código del formulario para modificar

'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
'
'Cerrar formulario
Private Sub CommandButton2_Click()
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

1 respuesta

Respuesta
2

[Hola. Si añades un TextBox para buscar, te hará un filtrado en el ListBox. Solo tienes que pegar el código en el evento change del TextBox.

En el ejemplo estoy suponiendo que la tabla esta en la hoja3, si no es la cambias, y hace el filtrado buscando en la columna 1, si no es la que te interesa la cambias.

Private Sub TextBox1_Change()
Datos = Hoja3.Range("A" & Rows.Count).End(xlUp).Row
Hoja3.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
Y = 0
For fila = 2 To Datos
Ref = Hoja3.Cells(fila, 1).Value '<-aquí cambias la columna donde quieres que busque
    If UCase(Ref) Like "*" & UCase(Me.TextBox1.Value) & "*" Then
        Me.ListBox1.AddItem
        Me.ListBox1.List(Y, 0) = Hoja3.Cells(fila, 1).Value
        Me.ListBox1.List(Y, 1) = Hoja3.Cells(fila, 2).Value
        Me.ListBox1.List(Y, 2) = Hoja3.Cells(fila, 3).Value
        Me.ListBox1.List(Y, 3) = Hoja3.Cells(fila, 4).Value
    Y = Y + 1
    End If
Next
End Sub

Salu2 Carlos Arrocha

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas