ListBox MultiSelect con Cabeceras sin Rowsource

Tengo un ListBox con varias columnas dentro de un formulario que se forma leyendo de varias hojas excel.
La primera hoja la recorre para recuperar datos de varias columnas alternas (no correlativas) y que son cargados en el ListBox en orden para cada columnas.
De la segunda Hoja, la deberá recorrer para obtener los datos de la cabecera del ListBox.
Estas casuísticas me impiden utilizar un Rowsource concreto, ya que el ListBox se carga cada vez siguiendo unos parámetros distintos.
¿Cómo puedo cargar las cabeceras del ListBox y los datos de sus respectivas columnas sin utilizar un Rowsource?

1 respuesta

Respuesta
1
Te dejo algunas instrucciones de ejemplo:
En el primer grupo, se cargan datos fijos de títulos para un listbox de 4 col:
i=0
ListBox1.AddItem "NOMBRE"
ListBox1.List(i, 1) = "DETALLE"
ListBox1.List(i, 2) = "STOCK"
ListBox1.List(i, 3) = "MINIMO"
ListBox1.List(i, 4) = "FALTA"
Si los datos se toman de algún rango utilizá esto:
i=0
activesheet.Range("A1").Select      'primer celda de títulos
ListBox1.AddItem Activecell.value
ListBox1.List(i, 1) = Activecell.Offset(0, 1)     'col 2
ListBox1.List(i, 2) = activecell.Offset(0, 2)     'col 3
ListBox1.List(i, 3) = activecell.Offset(0, 3)      'col 4
En el siguiente ejemplo, se carga el mismo listbox pero a partir del 2do registro (el 1ro fue de los títulos), tomando datos de un rango
i = 1 '2da fila del listbox
For Each cd In Sheets("BASES").Range("A3:A100")
ListBox1.AddItem cd
ListBox1.List(i, 1) = cd.Offset(0, 1)
ListBox1.List(i, 2) = cd.Offset(0, 2)
ListBox1.List(i, 3) = cd.Offset(0, 3)
i = i + 1
Next cd
Cambiá y ajustá tus referencias y pruébalo. Comentame si todo se entendió y solucionó.
Sdos
Hola Elsa
Primeramente, agradecerte una respuesta tan rápida.
Lo he probado y me vale en parte.
El problema que tengo es que los primeros datos recuperados deberían formar la cabecera del ListBox y permanecer fijos, a modo de cabecera.
Para ello, he puesto la propiedades del ListBox ColumnHeads a True y ColumnCount a 5.
Esas son las cabeceras de cada columna del ListBox que necesito sean cargadas con la primera lectura.
A partir de ahí, el resto está correcto para cargarlo, aunque deberé adaptar un poco más los campos a ser cargados basado en tu código
Si tienes alguna duda de lo que intento, indícamelo.
Si establecés la prop ColumnHeads en True te tomará lo que está por encima de tu rango de valores. Es decir que si RowSource tiene el rango A2:B7 te colocará lo que aparece en A1:B1
Como el rango lo vas a colocar con código, tenés que colocarl a prop en False y cargar los títulos como si fuese el primer registro (con la rutina que te indiqué)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas