Error en mi listbox de 20 me marca solo 10

Su ayuda no se a que se debe o si hay alguna propiedad que ignoro.

Tengo un formulario con un listbox que me muestra lo que hay en la planilla, y que le puedo dar intervalos de fechas o un numero en particular y me filtrará los datos.

Mi problema se inicia cuando filtro los datos, me muestra solo 10 datos y son 20 en total.

este es el codigo:

Private Sub busca_vta_Click()
On Error Resume Next
Set b = Sheets("VENTAS")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
dato1 = CDate(desde_vta)
dato2 = CDate(hasta_vta)
If dato2 = Empty Or dato1 = Empty Then
MsgBox ("Debe ingresar datos para consulta entre rango de fechas"), vbCritical, "AVISO"
Exit Sub
End If
If dato2 < dato1 Then
MsgBox ("La fecha final no puede ser mayor a la fecha inicial"), vbCritical, "AVISO"
Exit Sub
End If
b.AutoFilterMode = False
Me.detalle_vta = Clear
Me.detalle_vta.RowSource = Clear
For i = 5 To uf
   dato0 = CDate(b.Cells(i, 3).Value)
   If dato0 >= dato1 And dato0 <= dato2 Then
       Me.detalle_vta.AddItem b.Cells(i, 1)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 1) = b.Cells(i, 2)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 2) = b.Cells(i, 3)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 3) = b.Cells(i, 4)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 4) = b.Cells(i, 5)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 5) = b.Cells(i, 6)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 6) = b.Cells(i, 7)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 7) = b.Cells(i, 8)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 8) = b.Cells(i, 9)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 9) = b.Cells(i, 10)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 10) = b.Cells(i, 11)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 11) = b.Cells(i, 12)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 12) = b.Cells(i, 13)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 13) = b.Cells(i, 14)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 14) = b.Cells(i, 15)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 15) = b.Cells(i, 16)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 16) = b.Cells(i, 17)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 17) = b.Cells(i, 18)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 18) = b.Cells(i, 19)
       Me.detalle_vta.List(Me.detalle_vta.ListCount - 1, 19) = b.Cells(i, 20)
   End If
Next i
Me.detalle_vta.ColumnWidths = "30 pt;5 pt;50 pt;40 pt;40 pt;60 pt;100 pt;50 pt;120 pt;20 pt;20 pt;50 pt;50 pt;40 pt;40 pt;40 pt;50 pt;50 pt;50 pt;50 pt"
End Sub
Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set b = Sheets("VENTAS")
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.detalle_vta
    .ColumnCount = 20
    .ColumnWidths = "30 pt;5 pt;50 pt;40 pt;40 pt;60 pt;100 pt;50 pt;120 pt;20 pt;20 pt;50 pt;50 pt;40 pt;40 pt;40 pt;50 pt;50 pt;50 pt;50 pt"
    .RowSource = "VENTAS!A5:" & wc & uf
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
On Error GoTo Fin
If CloseMode <> 1 Then Cancel = True
Fin:
End Sub

pliss ayuda :(

1 Respuesta

Respuesta
1

Con el método .AddItem, es una limitación de VBA, solamente puedes agregar hasta 10 columnas. Para agregar más de 10 columnas, tienes que utilizar la propiedad .RowSource o .List

Te anexo unas respuestas donde hay un ejemplo para List y otro para Rowsource

Codigo VBA para un Listbox con mas de 10 columnas

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



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

¿Me podría ejemplificar? No entiendo el ejemplo que me envió. Por favor :)

Para cargar más de 10 columnas tienes que cargar con la propiedad rowsource.

Te anexo el código. Supongo que en la fila 4 están tus encabezados y tus datos empiezan en la fila 5, también supongo que los datos los vas a cargar desde la columna A hasta la T.

El código carga los títulos en el listbox y ajusta el ancho de las columnas en automático.

Nota: Debes crear una nueva hoja llamada "TEMP"

Private Sub busca_vta_Click()
'Por Dante Amor
    '
    Set h1 = Sheets("VENTAS")
    Set h2 = Sheets("TEMP")
    dato1 = Format(CDate(desde_vta), "mm/dd/yyyy")
    dato2 = Format(CDate(hasta_vta), "mm/dd/yyyy")
    If dato2 = Empty Or dato1 = Empty Then
        MsgBox ("Debe ingresar datos para consulta entre rango de fechas"), vbCritical, "AVISO"
        Exit Sub
    End If
    '
    If dato2 < dato1 Then
        MsgBox ("La fecha final no puede ser mayor a la fecha inicial"), vbCritical, "AVISO"
        Exit Sub
    End If
    '
    Application.ScreenUpdating = False
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    h2.Cells.ClearContents
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range("A4:T" & u1).AutoFilter Field:=3, _
        Criteria1:=">=" & dato1, Operator:=xlAnd, Criteria2:="<=" & dato2
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    If u1 > 4 Then
        h1.Rows("4:" & u1).Copy
        H2. Range("A1"). PasteSpecial xlValues
 h2.Columns("A:T"). EntireColumn.AutoFit
        u2 = h2.Range("A" & Rows. Count).End(xlUp). Row
 h2.Columns("A:T"). EntireColumn. AutoFit
        For i = 1 To 20
            ancho = ancho & Int(h2.Cells(1, i).Width) + 3 & "; "
        Next
        detalle_vta.ColumnHeads = True
        detalle_vta.ColumnWidths = ancho
        detalle_vta.RowSource = h2.Name & "!" & "A2:T" & u2
    Else
        MsgBox "No existen registros en ese rango de fechas", vbExclamation
    End If
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Application.ScreenUpdating = True
    Application.CutCopyMode = True
End Sub

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas