Mostrar más de 10 columnas en un ListBox después de una consulta vba

No se si estoy en el lugar indicado pero necesito una ayuda.

Estoy haciendo una macro en Excel donde tengo un botón consultar y en el evento Click tengo el siguiente código:

'Encuentro la ultima fila y columna con datos
Ufila = Range("A" & Rows.Count).End(xlUp).Row      // Ufila=7
Ucol = (Range("B1").End(xlToRight).Column)          // Ucol=25
If Me.cmbNomProdBusqueda.Value = "" Then
    MsgBox "Escriba Nombre del producto a Buscar"
    Me.cmbNomProdBusqueda.SetFocus

else

Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
For i = 3 To Ufila
    If LCase(Cells(i, 3).Value) = LCase(Me.cmbNomProdBusqueda.Value) Then
        Me.ListBox1.ColumnCount = Ucol
        Me.ListBox1.AddItem Cells(i, 1)
        p = 1
        For c = 2 To Ucol
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, p) = Cells(i, c)
            p = p + 1
        Next
    End If
Next

End If

El código anterior me arroja el resultado pero no muestra las 25 columnas el cual me debería de mostrar, tengo entendido que la propiedad AddItem tiene limitación a 10 columnas, pero no se como solucionar este problema... Teniendo en cuenta que tengo un botón donde actualizo datos de la ListBox, por eso necesito mostrar todas las columnas para capturar todos los valores y modificaros.

2 Respuestas

Respuesta
2

Puedes usar la propiedad rowsource con la limitante de que si agregas nuevos registros tendrás que cambiar la referencia cada que agregues un nuevo dato, también esta la propiedad listbox1. List=matriz donde los datos se cargan a través de una matriz dinámica, la imagen que ves es un ejemplo de esto ultimo, así cada que agregues un registro este en automático se cargara en cuanto abras el formulario.

y esta es la macro

Private Sub UserForm_Initialize()
matriz = Range("a1").CurrentRegion
With ListBox1
    .List = matriz
    .ColumnCount = Range("a1").CurrentRegion.Columns.Count
End With
End Sub
Respuesta
1

:)

Hola! Joan

Mira: al "arrancar" el UserForm puedes hacer por primera y única vez lo siguiente:

Ucol = Range("B1").End(xlToRight).Column ' Ucol = 25
ListBox1.List = Range("A1").Resize(1, Ucol).Value
ListBox1. RemoveItem 0

Puse Range("A1") por citar alguna celda: ¡Cualquier otra celda hubiese sido lo mismo! Pues -inmediatamente- la línea es quitada del ListBox mediante Remove.

A partir de entonces, todo el procedimiento que nos has mostrado no tendrá esa limitación de las 10 columnas.

¿Te sirvió la idea?...
Saludos, Mario (Cacho) Rodríguez

.

:)

Hola Mario, el problema que tengo no es al cargar inicialmente la ListBox, el problema que tengo es que cuando hago el filtro o la búsqueda solo me trae 10 columnas y necesito que me traiga todas las columnas.

Al abrir el formulario estoy cargando la ListBox con RowSource, pero cuando hago el filtro (el código que esta arriba) no me muestra todas las columnas. ¿Si me hago entender?

.

¿Pusiste lo sugerido en el Initialize del UserForm?...

.

.

:)

A ver si esto te pone "en camino": es otro método más rápido que la línea que estás proponiendo:

http://www.mediafire.com/file/0l8j15dz56fm5u6/Ejemplo%20702.zip 

Saludos, Cacho R.

:)

.

el ejemplo me sirvió muchísimo gracias!!, solo que tengo un inconveniente.

al cargar me sale el encabezado como debe de ser, pero al filtrar o consultar me sale los encabezados abajo, adjunto imágenes.

al cargar:

al filtrar:

Gracias por la ayuda.

.

Eso era previsible desde el primer momento pues -entre otras diferencias- lo de los títulos es exclusivo del RowSource y no del dúo AddItem/List: ¿Acaso viste títulos en el ejemplo que te pasé?...

Si quieres ver los títulos entonces debes filtrar el rango mediante el filtro Avanzado, con copia a otro lugar auxiliar, y a lo obtenido lo cargas con RowSource.

¿Entiendes?...

.

.

No señor, no entiendo. 

Me podría hacer el favor de explicarme, gracias.

:)

Mira: me tomé el trabajo de prepararte un panorama muy completo. Esto es: Cinco métodos de filtrado de la información de un rango de datos para ser volcados a un listbox.

http://www.mediafire.com/file/p7bz9pjrntudw63/Ejemplo_703.zip/file 

Además de poder ver las diferentes técnicas que existen para dicho cometido, puedes ver que sus eficiencias difieren mucho en función de la cantidad de info a procesar.

Otro detalle que puedes analizar es que solamente el método RowSource te permite ver los encabezados en el Listbox (dos de los métodos que te muestro).

Los otros tres métodos se basan en: AddItem/List (el peor de los peores en cuanto a eficiencia si son muchos los datos), y dos métodos utilizando matrices auxiliares que disponen los datos a efectos de un List o de un Column.

¡A estudiar se ha dicho, amigo!...
Saludos, Mario (Cacho) Rodríguez

:)

.

.
Y me olvidé mencionarte que otra ventaja de los métodos basados en RowSource es que la info se visualiza en el listbox del mismo modo que los tienes en las celdas.

:)

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas