Buscar un dato de un textbox en una Base de datos de Excel

Tengo una base de datos de 167 columnas, en mi UserForm tengo un ComboBox que indica la columna a buscar y el TextBox2 el dato buscado, al dar click en el Commandbutton me arroja la base de datos en el ListBox1, este es mi código:

Private Sub CommandButton1_Click()

On Error GoTo Errores
If Me.TextBox2.Value = "" Then Exit Sub
Me.ListBox1.Clear

Columna = Me.ComboBox1.ListIndex

ListBox1.ColumnCount = 167

j = 1
Filas = Range("a17").CurrentRegion.Rows.Count
For i = 2 To Filas
If LCase(Cells(i, j).Offset(0, CInt(Columna)).Value) Like "*" & LCase(Me.TextBox2.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, j)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, j).Offset(0, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Cells(i, j).Offset(0, 5)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, j).Offset(0, 6)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = Cells(i, j).Offset(0, 7)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = Cells(i, j).Offset(0, 8)
Else
End If
Next i
Exit Sub
Errores:
MsgBox "No se encuentra.", vbExclamation, "EXCELeINFO"

End Sub

El problema es que solo me permite buscar los datos de las primeras cuatro columnas, a partir de la quinta ya no me arroja datos en el ListBox, otro problema es que en el listBox soslo me muestra las primeras 8 columnas, me podrían indicar qué es lo que estoy haciendo mal

2

2 Respuestas

4.666.550 pts. Sancho, si los perros ladran ...

Con el método .AddItem no es posible cargar más de 10 columnas, para cargar más de 10 columnas, puedes utilizar la propiedad .Rowsouce o .List.

Revisa las siguientes respuestas, ahí explico cómo utilizar la propiedad .RowSource

Codigo VBA para un Listbox con mas de 10 columnas

Tengo un Listbox con 20 columnas pero sólo me muestra 10


Si tienes dudas de cómo aplicarlo, avísame y te apoyo.

Para saber por qué no busca en después de la columna 4, tendría que ver cómo están tus datos.

Tal vez tienes algún espacio y el contador de filas solamente llega hasta la fila 1, no lo sé. Pero prueba con lo siguiente, cambia esta línea:

Filas = Range("a17").CurrentRegion.Rows.Count

Por esta

Filas = Range("A" & rows.count).end(xlup).row

Entendiendo que en la columna A siempre hay datos para todas las filas.


No olvides votar las respuestas y regresar a valorar.

Hola:

Disculpa, he intentado hacer las modificaciones que me indicaste en los ejemplos, pero no me quedan, por favor me podrías apoyar.

Te anexo el código completo. Crea una hoja llamada "Temp"

Actualiza en el código estos datos:

    Set h1 = Sheets("Datos")        'hoja con los datos
    Set h2 = Sheets("Temp")         'hoja temporal
    fila = 1                        'número de fila donde tienes los encabezados


Private Sub CommandButton1_Click()
'Por Dante Amor
    'Filtrar la hoja en base a la columna seleccionada en el combo
    'y al dato del textbox
    '
    Set h1 = Sheets("Datos")        'hoja con los datos
    Set h2 = Sheets("Temp")         'hoja temporal
    fila = 1                        'número de fila donde tienes los encabezados
    h2.Cells.Clear
    '
    'Validaciones
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then
        MsgBox "Selecciona un registro del combo", vbExclamation
        ComboBox1.SetFocus
        Exit Sub
    End If
    If TextBox1.Value = "" Then
        MsgBox "Captura un dato en el textbox", vbExclamation
        TextBox1.SetFocus
        Exit Sub
    End If
    '
    'Filtrar
    Application.ScreenUpdating = False
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    col = ComboBox1.ListIndex + 1
    uf = h1.Cells(Rows.Count, col).End(xlUp).Row
    uc = h1.Cells(fila, Columns.Count).End(xlToLeft).Column
    h1.Range("A" & fila, h1.Cells(uf, uc)).AutoFilter Field:=col, Criteria1:="=*" & TextBox1.Value & "*"
    uf = h1.Cells(Rows.Count, col).End(xlUp).Row
    If uf <= fila Then
        MsgBox "No existen datos con ese criterio", vbExclamation
    Else
        h1.Range("A" & fila, h1.Cells(uf, uc)).Copy
        h2.Range("A1").PasteSpecial xlValues
        Application.CutCopyMode = False
        h2.Cells.EntireColumn.AutoFit
        '
        'Cargar listbox
        For i = 1 To uc
            ancho = ancho & Int(h2.Cells(1, i).Width + 2) & "; "
        Next
        uf = h2.Cells(Rows.Count, col).End(xlUp).Row
        rango = h1.Range("A2", h1.Cells(uf, uc)).Address
        ListBox1.ColumnCount = uc
        ListBox1.ColumnHeads = True
        ListBox1.ColumnWidths = ancho
        ListBox1.RowSource = h2.Name & "!" & rango
    End If
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Application.ScreenUpdating = True
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Hola de nuevo:

Disculpa la lata, pero me marca "Se ha producido el error "13" en tiempo de ejecución: No coinciden los tipos", ¿sabes a qué se deba? 

Pero en mi macro yo puse esto:

fila = 1                        'número de fila donde tienes los encabezados

Y tú pones esto:

fila = ("A17")

Tienes que poner un número, tú estás poniendo letras. Si la fila de tus encabezados está en la fila 17, entonces tienes que poner:

Fila = 17

También veo que le hiciste más cambios a la macro.

Prueba primero con mi macro antes de hacerle cambios.

Cuando veas cómo funciona, entonces le haces todos los cambios que quieras.

302.125 pts. https://youtube.com/programarexcel...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas