Filtro en Listbox mientras se escribe en textbox

Tengo un problema con este código y espero me puedan ayudar, tengo 50 columnas mostradas en el listbox, pero cuando escribo en el textbox (CC_Nombre) para que haga el filtro en automático si lo hace, pero solo me muestra 10 columnas, ¿me podrían ayudar a decirme que estoy haciendo mal? :( #Help saludos y gracias :D

PD: aprovechando también me podrían ayudar a que la cabecera siempre este visible al hacer el filtro por favor.

Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set b = Sheets("Clientes")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
uc = b.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, "$") + 1, InStr(2, uc, "$") - 2)
With Me.ListBox1
    .ColumnCount = 100
    .ColumnWidths = "50 pt;155 pt;60 pt;60 pt;60 pt;50 pt;60 pt"
    .RowSource = "Clientes!A1:" & wc & uf
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub CC_Nombre_Change()
On Error Resume Next
Set b = Sheets("Clientes")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
'-------------v-------------'
'-------NOMBRE TEXBOX-------'
'-------------v-------------'
If Trim(CC_Nombre.Value) = "" Then
     'Me.ListBox1.List() = b.Range("A1:AX" & uf).Value
     Me.ListBox1.RowSource = "Clientes!A1:AX" & uf
   Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
For i = 2 To uf
'--------------------v--------------------'
'------CAMBIO DE COLUMNA PARA FILTRO------'
'--------------------v--------------------'
   strg = b.Cells(i, 2).Value
   If UCase(strg) Like UCase(CC_Nombre.Value) & "*" Then
        Me.ListBox1.AddItem b.Cells(i, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = b.Cells(i, 7)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = b.Cells(i, 8)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = b.Cells(i, 9)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = b.Cells(i, 10)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 10) = b.Cells(i, 11)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 11) = b.Cells(i, 12)
   End If
Next i
Me.ListBox1.ColumnWidths = "50 pt;155 pt;60 pt;60 pt;60 pt;50 pt;60 pt;60 pt;60 pt;60 pt"
End Sub

2 respuestas

Respuesta
1

Existen varios métodos para agregar datos a un listbox, uno de ellos es .AddItem, pero este método solamente te permite 10 columnas, es una limitante de este método.

Otros métodos pueden ser .RowSource o .List. Revisa los siguientes enlaces:

Agregar más de 10 columnas en un listbox. Excel-vb

Codigo VBA para un Listbox con mas de 10 columnas

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

Codigo VBA para un Listbox con mas de 10 columnas

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda o si necesitas que te ayude a adaptar el código

.

Amigo, estuve tratando toda la tarde pero la verdad no pude hacerlo funcionar :( me sigue únicamente mostrando 10 columnas :( 

Saludos.

Envíame tu archivo y me explicas qué columnas quieres mostrar en el listbox y con todo gusto te apoyo con el código

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Bicktor Fuentes

¡Gracias! amigo, pero al parecer ya no ocupo tandas columnas, te agradezco tu ayuda y una disculpa por contestar hasta ahorita. un saludo :D 

Respuesta
1

Prueba esta macro

Option Base 1
Private Sub UserForm_Initialize()
Set datos = Sheets("CLIENTES").Range("A1").CurrentRegion
With datos
    .Name = "datos"
    With Me.ListBox1
        .ColumnCount = datos.Columns.Count
        .ColumnWidths = "50 pt;155 pt;60 pt;60 pt;60 pt;50 pt;60 pt"
        .RowSource = "datos"
    End With
End With
End Sub
'
Private Sub Cc_Nombre_Change()
Set origen = Range("datos")
Set b = Sheets("Clientes")
Set c = Worksheets("hoja2")
With origen
    filas = .Rows.Count: columnas = .Columns.Count
    Set origen = .Rows(2).Resize(filas, columnas)
    Set destino = c.Range("a2").Resize(filas, columnas)
    destino.Rows(0).Value = origen.Rows(0).Value
End With
If Trim(CC_Nombre.Value) = "" Then
    destino.Clear: Me.ListBox1.RowSource = "datos"
   Exit Sub
End If
b.AutoFilterMode = False: Me.ListBox1 = Clear
ReDim matriz(filas, columnas): X = 1
For i = 1 To filas
     strg = origen.Cells(i, 2).Value:
   If UCase(strg) Like UCase(CC_Nombre.Value) & "*" Then
    For j = 2 To columnas
        matriz(X, j - 1) = origen.Cells(i, j - 1)
    Next j
    X = X + 1
    End If
Next i
With c
        destino.Clear:  .Range(destino.Address) = matriz
        With ListBox1
            .ColumnHeads = True
            .RowSource = "hoja2!" & destino.Address
        End With
    End With
End Sub

al colocar la macro y escribo algo en el texbox para que haga el filtro en el listbox me borra todos los datos de mi base de datos :( 

Pues probé la macro y funciona aquí esta el resultado, a mi no me borra nada y me muestra en el listbox las 50 columnas con sus encabezados

¡Gracias! por la ayuda bro, pero ya de momento ya no ocupó las 50 columnas, tuve que quitar columnas innecesarias... un abrazo y una disculpa por contestar hasta ahorita... saludos. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas