ListBox solo muestra un resultado tras búsqueda

El siguiente código que me busca resultados en una hoja y los muestra en un ListBox lo he usado en muchísimas macros, pero esta vez no va bien, al hacer una búsqueda solo me arroja el primer resultado de la lista... Lo extraño es, como ya lo mencione, que en otras macros si me funciona...

Sub CBtn_BuscarREGISTROS_Click()
    Sheets("Hoja1").Select
    On Error GoTo Errores
    If Me.TextBoxBUSQUEDA.Value = "" Then GoTo Errores
    If Trim(Me.cmbEncabezado Is Nothing) Then GoTo Errores
    Me.ListBoxRESULTADOS.Clear
    Columna = Me.cmbEncabezado.ListIndex
    NoResults = False
    j = 1
    Filas = Range("A1").CurrentRegion.Rows.Count
    For i = 2 To Filas
        If LCase(Cells(i, j).Offset(0, CInt(Columna)).Value) Like "*" & LCase(Me.TextBoxBUSQUEDA.Value) & "*" Then
            ' Limpia el cuadro de lista para mostrar los nuevos resultados
            ListBoxRESULTADOS.Clear
            ' Rellena el listbox con los resultados de la busqueda
            Me.ListBoxRESULTADOS.AddItem Cells(i, j)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 4) = Cells(i, j).Offset(0, 4)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 5) = Cells(i, j).Offset(0, 5)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 6) = i
        Else
            NoResults = True
        End If
    Next i
    Exit Sub
'    Si la busqueda no produce resultados lanza este mensaje y fija el foco en la casilla de busqueda
    If NoResults = True Then
        MsgBox "Su búsqueda no produjo ningún resultado con el filtro seleccionado." & vbCrLf & _
                "Intente nuevamente con otro filtro de búsqueda u otro dato.", vbCritical, "Registro no encontrado"
        TextBoxBUSQUEDA.Value = ""
        TextBoxBUSQUEDA.SetFocus
    End If
Errores:
    MsgBox "Compruebe que seleccionó un filtro para la búsqueda" & vbCrLf & _
            "y/o definió un dato a buscar e inténtelo nuevamente", vbCritical, "Error de usuario"
End Sub

Alguna sugerencia

1 Respuesta

Respuesta
1

Mirando el código creo ver el motivo: estás limpiando la lista 'dentro' del bucle cuando debiera ser antes de empezar el bucle 'for'.

Comentame y luego seguimos si además te falla en otro lugar.

Sdos!

Otro detalle erróneo, tenés un Exit sub luego del for lo que impide que se siga ejecutando lo que viene a continuación.

Te dejo el código comentado y ajustado:

Sub CBtn_BuscarREGISTROS_Click()
'comentada y ajustada x Elsamatilde
    Sheets("Hoja1").Select
Dim esta As Byte    'para marcar si encontró algún registro
    On Error GoTo Errores
    If Me.TextBoxBUSQUEDA.Value = "" Then GoTo Errores
    If Trim(Me.cmbEncabezado Is Nothing) Then GoTo Errores
    Me.ListBoxRESULTADOS.Clear
    Columna = Me.cmbEncabezado.ListIndex
    'NoResults = False
    j = 1
    ' Limpia el cuadro de lista para mostrar los nuevos resultados
    ListBoxRESULTADOS.Clear
    Filas = Range("A1").CurrentRegion.Rows.Count
    For i = 2 To Filas
        If LCase(Cells(i, j).Offset(0, CInt(Columna)).Value) Like "*" & LCase(Me.TextBoxBUSQUEDA.Value) & "*" Then
            ' Rellena el listbox con los resultados de la busqueda
            Me.ListBoxRESULTADOS.AddItem Cells(i, j)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 4) = Cells(i, j).Offset(0, 4)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 5) = Cells(i, j).Offset(0, 5)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 6) = i
            'si encontró aunque sea 1 registro marca la variable
            esta = 1
        End If
    Next i
'    Si la busqueda no produce resultados lanza este mensaje y fija el foco en la casilla de busqueda
    If esta = 0 Then
        MsgBox "Su búsqueda no produjo ningún resultado con el filtro seleccionado." & vbCrLf & _
                "Intente nuevamente con otro filtro de búsqueda u otro dato.", vbCritical, "Registro no encontrado"
        TextBoxBUSQUEDA.Value = ""
        TextBoxBUSQUEDA.SetFocus
    End If
    Exit Sub
Errores:
    MsgBox "Compruebe que seleccionó un filtro para la búsqueda" & vbCrLf & _
            "y/o definió un dato a buscar e inténtelo nuevamente", vbCritical, "Error de usuario"
End Sub

Probala y comentame.

La pregunta no admite más respuestas

Más respuestas relacionadas