Buscar un dato en ListBox

Tengo un formulario con un Listbox donde se muestran datos segun el lugar, osea, mi ListBox tiene esto:

Entonces, lo que quiero es poner un textbox para que busque en el ListBox dicho registro, La búsqueda se debe realizar de acuerdo al DNI (La ultima columna del listbox)
Por ejemplo: Yo ingreso un DNI 2648183, quiero que en el ListBox solo me muestre los datos de ese DNI. Aquí una imágen de ejemplo.

1 respuesta

Respuesta
6

Lo más práctico es que limpies el formulario y busques el DNI en la hoja y cargues solamente ese registro.

Si quieres buscar el dato en el listbox y borrar los otros registros, también se puede hacer pero dependo de cómo hayas cargado los datos en el listbox:

A) Si los cargaste con RowSource, tienes que leer registro por registro y buscar el DNI, cuando lo encuentres poner en variables todos los datos del DNI, borrar todo el listbox y cargar los datos de las variables.

B) Si los cargaste con AddItem, entonces tienes que leer registro por registro y buscar el DNI, si no es el DNI lo borras con RemoveItem.

Cuál de las 3 opciones es la que quieres.

Como te dije, te recomiendo lo más práctico es borrar y buscar el DNI y cargarlo.

Hola Dante, antes que nada gracias por responderme.


Bueno los datos lo cargue con la propiedad RowSource, para evitar un mal entendido, aquí te dejo el archivo para que tu mismo lo revises. Gracias por tu ayuda y tu tiempo.

CLIC PARA DESCARGAR

Te anexo la macro

Private Sub CommandButton1_Click()
'Por.Dante Amor
    For Each c In Controls
        If TypeName(c) = "CheckBox" Then
            If c = True Then
                n1 = Split(c.Name, "_")
                n2 = n1(1)
                Set h1 = Sheets(n2)
                Set h2 = Sheets("tmp")
                h2.Cells.Clear
                h1.Rows(14).Copy h2.Rows(1)
                j = 2
                For i = 15 To h1.Range("C" & Rows.Count).End(xlUp).Row
                    If h1.Cells(i, "P") = Val(TextBox2) Then
                        h1.Rows(i).Copy h2.Rows(j)
                        j = j + 1
                    End If
                Next
                '
                LISTBOXPRINCIPAL.ColumnHeads = True
                LISTBOXPRINCIPAL.RowSource = h2.Name & "!C2:P" & h2.Range("C" & Rows.Count).End(xlUp).Row
            End If
        End If
    Next
End Sub

Para que funcione tuve que crear un textbox y un commandbuton. Te regreso el archivo con los cambios. En el archivo va un ejemplo de DNI en la hoja "WILCAYACO"

https://www.dropbox.com/s/y7g7zwbmsp2kzwy/HUANCASPATA%20USERFORM%20dam.xlsm?dl=0 

Saludos. Dante Amor

Recuerda valorar la respuesta.

¡Gracias Dante! 

¿Tienes alguna duda sobre la macro?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas