Buscar información con Userform Excel

Acabo de crear un excel en el cual deseo realizar una búsqueda de datos, he revisado varios tutoriales pero de verdad que ninguno me funciona, siendo nuevo en este lenguaje pues se me complica, (¿Me pueden recomendar un libro?).
Tengo varias tablas de excel distribuidas en varias hojas, quería realizar un motor de búsqueda con un userform que al introducir una palabra este busque las distintas palabras que encuentre en dichas tablas, tengo 20 hojas, por lo tanto son 20 tablas para buscar y las tablas contienen 19 columnas. Quería que esta búsqueda se mostrara en un listbox.

Yo lo intente realizar guiandome de lo que he investigado pero el error quesurge es que simplemente no carga la data en el listbox cuando realizo la busqueda.

1 Respuesta

Respuesta
1

Antes de desarrollar la macro aclara un poco más la tarea:

- ¿Se busca un texto? en todas las tablas.. ¿en cualquier columna?

- una vez encontrado el dato... ¿qué información deseas agregar al listbox?

Creo que ayudaría si dejaras una imagen de 1 de tus tablas marcando un dato a buscar.

Esperaré tus aclaraciones. No valores aún.

* Podés encontrar algo de material en las secciones Macros y Ejemplos de mi sitio.

Si, deseo buscar informacion en todas las tablas y en cualquier columna.
Las 19 columnas de información deberían reflejarse en el listbox.

He visto varios tutoriales que hacen lo que digo, pero por alguna razon cuando intento implementarlo estos no se reflejan en el listbox.

Agradecido por la página que enviaste!

En primer lugar un listbox solo soporta la carga de 10 columnas, con la instrucción AddItem

El truco para llenar más columnas es asignándole un rango completo en su propiedad RowSource.

Por ej:

ListBox1.RowSource = "=Hoja1!A1:S200" 

Entonces, para tu buscador lo que debes hacer es contar con una hoja auxiliar donde se irán volcando todas las filas encontradas, y luego ese rango resultante asignárselo al listbox.

Ajusta el nombre de tu hoja auxiliar (tendrás que tenerla creada en este caso).

Ajusta el nombre de tus controles: textbox, listbox y commandbutton utilizado para disparar la búsqueda.

Private Sub CommandButton1_Click()
'x Elsamatilde
'impedir el movimiento de hojas
Application.ScreenUpdating = False
'limpiar la hoja auxiliar. La primer fila para el pegado será 1
On Error GoTo sinAuxilio
    Sheets("HojaAux").Cells.Clear
    filx = 1
On Error GoTo 0
'buscar el texto en todas las hojas. Si lo encuentra lo agrega en hoja auxiliar
For Each sh In Sheets
    'omite la hoja auxiliar
    If sh.Name = "HojaAux" Then GoTo sigo
    On Error GoTo sigo
    'se contempla posible error al intentar seleccionar la hoja
    sh.Select
    [A1].Select
    On Error GoTo 0
    On Error Resume Next
    Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    Cells.FindNext(After:=ActiveCell).Activate
    'se contempla posible error de no coincidencia
    If Err.Number > 0 Then
        On Error GoTo 0: GoTo sigo
    End If
    'copia la fila entera en hoja auxiliar e incrementa el nro de fila
    Range("A" & ActiveCell.Row).EntireRow.Copy Destination:=Sheets("HojaAux").Range("A" & filx)
    filx = filx + 1
sigo:
'pasa a otra hoja para continuar la búsqueda
Next sh
'se verifica si hubo resultados. en ese caso se asigna el rango completo al listbox de 19 col
Sheets("HojaAux").Select
If Application.WorksheetFunction.CountA(Cells) = 0 Then
    MsgBox "No se encontraron datos " & TextBox1 & " en el libro."
    Exit Sub
End If
ListBox1.ColumnCount = 19
ListBox1.RowSource = "=HojaAux!A1:S" & filx - 1
Exit Sub
sinAuxilio:
MsgBox "No se encontró la hoja auxiliar ('HojaAux'). Debes crearla y luego ejecutar nuevamente el proceso."
End Sub

Probala y si resuelve tu consulta no olvides valorarla (Excelente o Buena) para darla por cerrada.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas