Saltar al contenido

ayuda con aumento de columnas en listbox


viejo

Recommended Posts

publicado

hola necesito una pequeña ayuda si no les causa molestia claro, se trata de un archivo que encontré en la red  y es un buscador que contiene userform que tiene un listbox, un textbox y un boton que al darle click funciona como buscador y se supone que realiza el filtrado en 3 columnas y mi intencion es adaptarlo para que lo haga en una cantidad mayor de columnas (esa parte si la logro) pero lo que no puedo adaptar es que una vez que realiza la busqueda o mas bien dicho el filtraje en el listbox aparezcan las demas columnas agregadas; esa parte donde aumento el numero de culumnas a filtrar es la que no me da resultado. saludos

el codigo es el siguiente:

Private Sub CommandButton1_Click()
Range("A2").Activate
ListBox1.Clear 
Do Until ActiveCell = ""
   texto = ActiveCell & Format(Cells(ActiveCell.Row, 2), "hh:mm") & Cells(ActiveCell.Row, 3) 
   If UCase(texto) Like "*" & UCase(TextBox1) & "*" Then
      ListBox1.AddItem ""
      ListBox1.List(ListBox1.ListCount - 1, 0) = ActiveCell
      ListBox1.List(ListBox1.ListCount - 1, 1) = Format(Cells(ActiveCell.Row, 2), "hh:mm")
      ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(ActiveCell.Row, 3)
      ListBox1.List(ListBox1.ListCount - 1, 3) = ActiveCell.Row
   End If
   ActiveCell.Offset(1, 0).Activate
Loop
End Sub

Private Sub ListBox1_Click()
Rows(ListBox1.List(ListBox1.ListIndex, 3)).Select
End Sub

 

publicado

Adjunto posible solución.

Las columnas las puedes agregar con las siguientes lineas:

ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(ActiveCell.Row, 3)'<-Aqui cambia a 4, luego agrega otra linea con el numero 5 y asi hasta el 10

De este modo:

      ListBox1.List(ListBox1.ListCount - 1, 0) = ActiveCell
      ListBox1.List(ListBox1.ListCount - 1, 1) = Format(Cells(ActiveCell.Row, 2), "hh:mm")
      ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(ActiveCell.Row, 3)
      ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(ActiveCell.Row, 4)
      ListBox1.List(ListBox1.ListCount - 1, 4) = Cells(ActiveCell.Row, 5)
      ListBox1.List(ListBox1.ListCount - 1, 5) = Cells(ActiveCell.Row, 6)
      ListBox1.List(ListBox1.ListCount - 1, 6) = Cells(ActiveCell.Row, 7)
      ListBox1.List(ListBox1.ListCount - 1, 7) = Cells(ActiveCell.Row, 8)
      ListBox1.List(ListBox1.ListCount - 1, 8) = Cells(ActiveCell.Row, 9)
      ListBox1.List(ListBox1.ListCount - 1, 9) = Cells(ActiveCell.Row, 10)

Comenta tus impresiones.

Saludos.

Ayuda Excel-UserFormconFiltroenListbox.xlsm

publicado

gracias de antemano, nada mas que pues la parte donde aparecen en el listbox es a lo que me refiero, osea, ¿como le hago para aparezcan en el listbox todas las columnas? o mas bien ¿como le hago para que aparezcan solo las columnas que yo quiera aumentar?

publicado
Hola

Un ejemplo con la siguiente linea:

ListBox1.List(ListBox1.ListCount - 1, 7) Esta linea determina la columna 8 del ListBox.
ListBox1.List(ListBox1.ListCount - 1, 7) = Cells(ActiveCell.Row, 8)

Cells(ActiveCell.Row, 8) Es la columna 8 de la hoja.

Bajo ese principio, ya puedes saber a cual columnas mostrar.

Saludos.

publicado

@Enigma25 te agradezco la paciencia, de antemano,

refiriendo al tema, si comprendo lo que me acabas de decir;

mi problema principal es cuando le doy click al boton de buscar ahi requiero que los resultados se muestren como tal en el listbox, ¿a que me refiero con esto?, pues quiero que se muestren todas sus respectivas columnas (para este caso son 10), pero mi problema es que no logro que se muestren en el listbox todas esas columnas asi tambien trato de aunmentar el numero de columnas que mostrar en listbox; pero pues si no logro hacer que muestre las 10 mucho menos podre aumentar;

con respecto al combobox veo que lo insertaste como un selector de columnas, esa no es la idea y pido me disculpes si no me di a entender. saludos

publicado

Hola

 

En el evento Initialize de tu Form coloca estas lineas:

 

Private Sub UserForm_Initialize()

    With ListBox1
        .ColumnCount = 10
    End With

End Sub

Con este bloque, colocas la cantidad a 10 columnas a tu ListBox.

Adjunto el archivo sin el Combobox y con el mismo código para filtrar.

Saludos.

Ayuda Excel-UserFormconFiltroenListbox.xlsm

publicado

te agradezco nuevamente la paciencia @Enigma25 ; estoy viendo el archivo y precisamente eh logrado comprender la parte de filtraje, pero me surgen algunas dudas y es si ese filtraje se pasmará o trabará cuando se trate de muchos registros?, puse .ColumnHeads = True y no me muestra el nombre de las columnas,¿que hice mal?, al darle click al listbox es no se posiciona en el renglon que debe estar deacuerdo al item seleccionado, este se muestra un registro arriba o un registro abajo, ¿cual será el problema?. saludos

publicado

hola @Enigma25, nuevamente muchas gracias por tu ayuda me impresiona el genio que tienes para esto, mas sin embargo no me eh dado mucho a entender con lo que pretendo hacer, pido me disculpes de nueva cuenta;

no se como ponerlo sin que se vea que yo exijo algo por que esa no es mi intencion pero intento adaptar lo que me has ayudado, pero la idea principal es que el texto o palabra que el usuario final escriba en el textbox1 al momento de darle click al boton de buscar (CommandButton1), que el proceso sea buscar en todas las columnas pero que estas columnas se vean reflejadas en el listbox1, por ejemplo si pongo en el textbox1 "negro" me filtre y ponga todos los registros con la palabra "negro", o si pongo "100" haga lo mismo, repito, que se busque en todas las columnas y que estas columnas con sus respectivos resultados se visualicen en el listbox1 con todo y sus encabezado...hasta este punto estaba yo inicialmente, sin embargo; la adaptacion que queria hacer es poder hacer un aumento de columnas la hoja y que de igualmanera se vieran reflejas en el proceso de busqueda y que se visualizaran en el listbox1.... no se si me doy a entender, dejame decirte que me gusto mucho este ultimo formulario donde escribes y se va filtrando los resultados, el detalle es que solo filtra una columna que es la de horas, estaria mejor que filtrara todas las columnas, en fin de antemano te agradezco tu valiosa colaboracion y pasciencia. saludos

publicado

Hola @viejo

Por lo general, cuando buscamos información en una hoja Excel desde un textbox, indicamos a cual columna se hará la consulta. Ejemplo

If TextBox1=Hoja1.Cells(Lin,1) Then'Lin es la varible de las fila y el 1 es la columna

...entonces si deseamos hacer la busqueda por columnas, podemos usar una variable que se incremente de a 1 en caso de que no muestre resultado. Así consultaremos en la columna 1, si no en la columna 2 y así sucesivamente.

El siguiente código emplea lo comentado:

With ListBox1
Col = 1 'Inicia el contador de columna en 1
Contador = 0 'Inicia el contador a 0

De_Nuevo:
If Contador = 10 Then Exit Sub 'Si es igual a 10, que se detenga el filtro
Lin = 2 'Inicia el recorrido de las filas a partir de la fila 2

.Clear 'Limpia el listbox
.AddItem 'Agrega una nueva fila al listbox
'Aqui las nuevas filas
.List(.ListCount - 1, 0) = Hoja1.Range("A1")
.List(.ListCount - 1, 1) = Hoja1.Range("B1")
.List(.ListCount - 1, 2) = Hoja1.Range("C1")
.List(.ListCount - 1, 3) = Hoja1.Range("D1")
.List(.ListCount - 1, 4) = Hoja1.Range("E1")
.List(.ListCount - 1, 5) = Hoja1.Range("F1")
.List(.ListCount - 1, 6) = Hoja1.Range("G1")
.List(.ListCount - 1, 7) = Hoja1.Range("H1")
.List(.ListCount - 1, 8) = Hoja1.Range("I1")
.List(.ListCount - 1, 9) = Hoja1.Range("J1")
    
    Do While Hoja1.Cells(Lin, 1) <> "" 'Mientras la columna (Col) tenga datos...

      If Hoja1.Cells(Lin, Col).Text Like "*" & TextBox1 & "*" Then  'Si las filas de la columna (Col) coincide con el textbox
      
        .AddItem 'Agrega una nueva fila
        'Las nuevas filas
        .List(.ListCount - 1, 0) = Hoja1.Cells(Lin, 1)
        .List(.ListCount - 1, 1) = Format(Hoja1.Cells(Lin, 2), "hh:mm")
        .List(.ListCount - 1, 2) = Hoja1.Cells(Lin, 3)
        .List(.ListCount - 1, 3) = Hoja1.Cells(Lin, 4)
        .List(.ListCount - 1, 4) = Hoja1.Cells(Lin, 5)
        .List(.ListCount - 1, 5) = Hoja1.Cells(Lin, 6)
        .List(.ListCount - 1, 6) = Hoja1.Cells(Lin, 7)
        .List(.ListCount - 1, 7) = Hoja1.Cells(Lin, 8)
        .List(.ListCount - 1, 8) = Hoja1.Cells(Lin, 9)
        .List(.ListCount - 1, 9) = Hoja1.Cells(Lin, 10)
    End If
    
    Lin = Lin + 1 'Suma la siguinte fila
    Loop
    If ListBox1.ListCount < 2 Then 'Si el resultado es menor a 2, entonces ...
        Contador = Contador + 1 'contador suma un nuevo valor =a 1
        
        Col = Col + 1 'Incremente la variable columna a +1 para ejecutar el filtro a la nueva columna (Col)
        GoTo De_Nuevo 'Salto de linea al inicio para repetir el proceso
    Else 'Si no...
        Exit Sub 'Sale
    End If
End With

Adjunto archivo.

Saludos.

Ayuda Excel-UserFormconFiltroenListbox2.xlsm

publicado

hola @Enigma25 muy buen dia, aun tengo la duda o terquedad (sea el caso) perdona mi torpesa e ignorancia pero si quiesiera aumentar el numero de columnas que aparezcan en el listbox y asi tambien en las cuales buscar tendria que poner el codigo como se muestra?

With ListBox1
Col = 1 'Inicia el contador de columna en 1
Contador = 0 'Inicia el contador a 0

De_Nuevo:
If Contador = 11 Then Exit Sub 'Si es igual a 10, que se detenga el filtro | <---lo aumenté a 11
Lin = 2 'Inicia el recorrido de las filas a partir de la fila 2

.Clear 'Limpia el listbox
.AddItem 'Agrega una nueva fila al listbox
'Aqui las nuevas filas
.List(.ListCount - 1, 0) = Hoja1.Range("A1")
.List(.ListCount - 1, 1) = Hoja1.Range("B1")
.List(.ListCount - 1, 2) = Hoja1.Range("C1")
.List(.ListCount - 1, 3) = Hoja1.Range("D1")
.List(.ListCount - 1, 4) = Hoja1.Range("E1")
.List(.ListCount - 1, 5) = Hoja1.Range("F1")
.List(.ListCount - 1, 6) = Hoja1.Range("G1")
.List(.ListCount - 1, 7) = Hoja1.Range("H1")
.List(.ListCount - 1, 8) = Hoja1.Range("I1")
.List(.ListCount - 1, 9) = Hoja1.Range("J1")
.List(.ListCount - 1, 10) = Hoja1.Range("K1")'<--aunmenté esta
    
    Do While Hoja1.Cells(Lin, 1) <> "" 'Mientras la columna (Col) tenga datos...

If Hoja1.Cells(Lin, Col).Text Like "*" & TextBox1 & "*" Then  'Si las filas de la columna (Col) coincide con el textbox
      
        .AddItem 'Agrega una nueva fila
        'Las nuevas filas
        .List(.ListCount - 1, 0) = Hoja1.Cells(Lin, 1)
        .List(.ListCount - 1, 1) = Format(Hoja1.Cells(Lin, 2), "hh:mm")
        .List(.ListCount - 1, 2) = Hoja1.Cells(Lin, 3)
        .List(.ListCount - 1, 3) = Hoja1.Cells(Lin, 4)
        .List(.ListCount - 1, 4) = Hoja1.Cells(Lin, 5)
        .List(.ListCount - 1, 5) = Hoja1.Cells(Lin, 6)
        .List(.ListCount - 1, 6) = Hoja1.Cells(Lin, 7)
        .List(.ListCount - 1, 7) = Hoja1.Cells(Lin, 8)
        .List(.ListCount - 1, 8) = Hoja1.Cells(Lin, 9)
        .List(.ListCount - 1, 9) = Hoja1.Cells(Lin, 10)
	.List(.ListCount - 1, 10) = Hoja1.Cells(Lin, 11)
    End If
    
    Lin = Lin + 1 'Suma la siguinte fila
    Loop
    If ListBox1.ListCount < 2 Then 'Si el resultado es menor a 2, entonces ...
        Contador = Contador + 1 'contador suma un nuevo valor =a 1
        
        Col = Col + 1 'Incremente la variable columna a +1 para ejecutar el filtro a la nueva columna (Col)
        GoTo De_Nuevo 'Salto de linea al inicio para repetir el proceso
    Else 'Si no...
        Exit Sub 'Sale
    End If
End With

 

publicado

Hola @viejo

Con el método Additem, solo puedes disponer de 10 columnas como máximo en un ListBox. Por tal motivo se debe emplear otra forma de cargarlo y es con la propiedad RowSource.

Sin embargo, para que esto sea posible, debemos emplear una hoja aparte y en la cual enviamos los datos filtrados y luego cargamos el ListBox desde dicha hoja.

En el adjunto dejo la solución al mismo.

Comenta tus impresiones.

Saludos.

Ayuda Excel-UserFormconFiltroenListbox2.xlsm

Invitado Cacho R
publicado
Hace 6 horas, viejo dijo:

... si quisiera aumentar el numero de columnas que aparezcan en el listbox y asi tambien en las cuales buscar ...?

Hola! a todos

Hay cuestiones de automaticidad en lo que pides que requieren un tratamiento más cuidadoso (por ejemplo: la cantidad variable de columnas o los propios anchos de las columnas del listbox).

En la línea de lo que te ha comentado@Enigma25 podrías hacer como adjunto.

En este caso no te lo estoy mostrando (para " no cargar" la sugerencia) pero a través de un conocido aporte de@Antoni puedes parametrizar -asimismo- la columna de búsqueda.

Saludos, Cacho R.

UF con Filtro en Listbox_2.xlsm

Invitado Cacho R
publicado
Hace 14 horas, viejo dijo:

¿?:(

Una re pregunta, Viejo:

Tu incredulidad y tristeza se deben a...

publicado

incredubilidad no lo es...y triztesa tal vez porque soy medio bruto para entender el codigo...es que pruebo los codigos pero no me funcionan, razono un poco y le muevo una cosa y se altera otra, se me dificulta, no se, tal vez necesito un poco de paciencia, lo checare de nuevo a ver si dios me ilumina y logro avanzar. de antemano gracias.saludos

publicado

@viejo 

Si puedes, comenta en donde n lo ves y con cual aporte te sientes mas cómodo de manera que lo puedas usar.

Insisto en que veas el código fuente del aporte. Este tiene comentarios del como funciona el mismo.

Saludos.

publicado

hola buenas noches, no se porque me sucedia que cuando aplicaba los codigos en mi maquina del trabajo no me funcionaban, puedo inferir que se trata de un excel que estaba recien instalado y no tenia los complementos o bibliotecas habilitados como yo esperaba, de hecho es algo que no comprendo mucho pero al estar intentando e intentando pues heme aqui en mi computara y puedo ejecutar cosas que en el trabajo no podia, obviamente eso causaba una frustracion en mi que pues bueno me nublaba la mente feo...por otro lado estuve intentando con tu codigo pero mas no le entendia y tampoco me resultaba y es que mi poca paciencia nomas me dice que aumente la cantidad de columnas y ya hasta ahi llegó mi pensamiento desgraciadamente, pues bueno para ello, al estar navegando en la red encontre un archivo que hasta ahorita las modificaciones (aunmento de columna) que le hecho me ha funcionado ya que el archivo original filtra solamente por 4 columnas y yo ya le aumente 2 mas y e sigue fltrando lo que eh pedido, no lo se si a la hora de filtrar muchisima cantidad de datos sea funcional o no en fin,   aunque no le he metido mucho analisis eh visto que puede funcionar, obviamente es de la autoria que en el mismo archivo viene pero aun asi quiero compartirlo agregando que cualquier credito, beneficio o perjuicio es para esa persona que se describe en el archivo y pues en lo de mientras me podrias ayudar diciendome que tan estable será ese archivo que encontre, lo curioso para mi es que no habre el formulario a mnos que este seleccionado alguna celda de la tabla, quien sabe si eso llehgara a ser un problema, en fin,.saludos

Formulario para filtrar datos de una tabla en ListBox eligiendo la columna de búsqueda en un ComboBox.xlsm

publicado

Buenas noches @viejo

Como le dije anteriormente: El código fuente está comentado de manera que usted pueda entenderlo e incluir las columnas. Ya queda de usted analizar con calma y aplicarlo.

 

Aun así, si tiene alguna duda lo comenta.

 

Saludos

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.