¿Un listbox puede tener más de 11 columnas? Vba excel

Estoy configurando un listbox y agregado los datos pero al querer introducir la línea

list_dades.List(.ListCount - 1, 10) = i

Salta un error 380 en tiempo de ejecución,  no se puede configurar la propiedad list

Pero si en vez de la columna 10 pongo la 9 el código corre perfectamente, es por eso que pieso que podría tener un limite de columnas.

En las propiedades del listbox el parámetro ColumnCount es 12

¿Estoy realizando algo mal? ¿O es que no admite más de 11 columnas?

2 respuestas

Respuesta
1

Si estás utilizando el métod AddItem, efectivamente el límite son 10 columnas, de la 0 a la 9.

Para cargar más de 10 columnas, puedes utilizar la propiedad .List o . RowSource.

Por lo que puedo ver en tu código, estás tratando de poner el número de fila en una columna del listbox, entonces podrías almacenar los datos en una arreglo y después pasarlo a listbox.

Aquí unas propuestas:

Codigo VBA para un Listbox con mas de 10 columnas

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

Gracias por tu respuesta Dante,

¿A qué te refieres con arreglo exactamente?
He intentado rehacer el código original con las indicaciones dadas (RowSource) pero no logro adaptar el código correctamente.
Este es el código original con el AddItem

Dim filas As Variant
Dim i As Variant
j = 1
  Set hojabase = ThisWorkbook.Sheets("Dades")
  filas = Range("Dades_taula").CurrentRegion.Rows.Count
  For i = 3 To filas
    If LCase(hojabase.Cells(i, j).Offset(1, 0).Value) Like "*" Then
      With Me.list_dades
        .AddItem hojabase.Cells(i, j)
        .List(.ListCount - 1, 1) = hojabase.Cells(i, j).Offset(0, 1)
        .List(.ListCount - 1, 2) = hojabase.Cells(i, j).Offset(0, 2)
        .List(.ListCount - 1, 3) = hojabase.Cells(i, j).Offset(0, 3)
        .List(.ListCount - 1, 4) = hojabase.Cells(i, j).Offset(0, 6)
        .List(.ListCount - 1, 5) = hojabase.Cells(i, j).Offset(0, 7)
        .List(.ListCount - 1, 6) = hojabase.Cells(i, j).Offset(0, 8)
        .List(.ListCount - 1, 7) = hojabase.Cells(i, j).Offset(0, 9)
        .List(.ListCount - 1, 8) = hojabase.Cells(i, j).Offset(0, 10)
        .List(.ListCount - 1, 9) = hojabase.Cells(i, j).Offset(0, 13)
        .List(.ListCount - 1, 10) = i
      End With
    End If
  Next i

Muchas gracias

Podrías explicarme para qué tienes esta línea:

If LCase(hojabase.Cells(i, j).Offset(1, 0).Value) Like "*" Then

Esa línea no filtra nada, es decir, todos los casos se cumplen y entonces todos los datos se cargan en el listbox.

Si quieres cargar todos los datos puedes utilizar alguna de las opciones de James Bond.


Una vez que hayas hecho la carga y para saber el número de fila seleccionado, revisa el siguiente ejemplo:

Private Sub list_dades_Click()
  Dim fila
  fila = list_dades.ListIndex + 3
End Sub

Quisiera completar esta respuesta.

De la siguiente manera se pueden agregar más de 10 columnas, utilizando el método .AddItem:

Primero se establece con la propiedad .List el número de columnas:

Private Sub UserForm_Activate()
  ReDim b(1 To 1, 1 To 20)  'número de columnas a agregar
  With ListBox1
    .ColumnCount = 20       'número de columnas a agregar
    .List = b               'se habilitan las columnas en el list
    .Clear                  'se limpia el list
  End With
End Sub

Y posteriormente puedes utilizarlo así:

Private Sub CommandButton1_Click()
  With ListBox1
    .AddItem Cells(1, 1)
    .List(.ListCount - 1, 1) = Cells(1, 2)
    .List(.ListCount - 1, 2) = Cells(1, 3)
    .List(.ListCount - 1, 3) = Cells(1, 4)
    .List(.ListCount - 1, 4) = Cells(1, 5)
    .List(.ListCount - 1, 5) = Cells(1, 6)
    .List(.ListCount - 1, 6) = Cells(1, 7)
    .List(.ListCount - 1, 7) = Cells(1, 8)
    .List(.ListCount - 1, 8) = Cells(1, 9)
    .List(.ListCount - 1, 9) = Cells(1, 10)
    .List(.ListCount - 1, 10) = Cells(1, 11)
    .List(.ListCount - 1, 11) = Cells(1, 12)
    .List(.ListCount - 1, 12) = Cells(1, 13)
    .List(.ListCount - 1, 13) = Cells(1, 14)
    .List(.ListCount - 1, 14) = Cells(1, 15)
    .List(.ListCount - 1, 15) = Cells(1, 16)
    .List(.ListCount - 1, 16) = Cells(1, 17)
    .List(.ListCount - 1, 17) = Cells(1, 18)
    .List(.ListCount - 1, 18) = Cells(1, 19)
    .List(.ListCount - 1, 19) = Cells(1, 20)
  End With
End Sub
Respuesta
1
Private Sub UserForm_Initialize()
'matriz = Range("c1").CurrentRegion
'With ListBox1
'    .List = matriz
'    .ColumnCount = Range("c1").CurrentRegion.Columns.Count
'End With
With ListBox1
    .RowSource = Range("c1").CurrentRegion.Columns.Address
    .ColumnCount = Range("c1").CurrentRegion.Columns.Count
    .ColumnHeads = True
End With
End Sub

aqui estan dos alternativas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas