Hola expertos como coger datos de un listbox y realizar autofiltro en excel con macros.

Necesito una ayudita estoy haciendo formulario que me permita hacer filtros, cuento con dos combo1, combo2, txt1, txt2 y un botón

Este es el código que utilizo:

Application.ScreenUpdating = False
Workbooks.Open Filename:="D:\DATA\data.xlsx"
Range("A1").Select
Application.ScreenUpdating = False
Selection.AutoFilter
Range("A1").Select
ActiveSheet.Range("$A$1:$F$394").AutoFilter Field:=1, Criteria1:=Left(combo1.Text, 2)
Range("B1").Select
ActiveSheet.Range("$A$1:$F$394").AutoFilter Field:=2, Criteria1:=Left(combo2.Text, 3)
Range("C1").Select
ActiveSheet.Range("$A$1:$F$394").AutoFilter Field:=3, Criteria1:=txtaño.Text
Range("D1").Select
ActiveSheet.Range("$A$1:$F$394").AutoFilter Field:=4, Criteria1:=txtcodigoproducto.Text
Application.Goto reference:="R1C1"

Bueno esto me funciona bien, pero solo para una búsqueda tengo el siguiente resultado:

Dato1 dato2 2012 codproducto1 serie1

Dato1 dato2 2012 codproducto1 serie2

Dato1 dato2 2012 codproducto1serie3

Lo que necesito es que en una sola búsqueda pueda traer varios codproducto a la vez solo tengo una caja de texto para codproducto:

Con la grabadora de macros obtengo esto:

ActiveSheet.Range("$A$1:$F$394").AutoFilter Field:=4, Criteria1:=Array( _
"000004", "000005", "000007", "000008", "000009", "000010"), Operator:= _
XlFilterValues.

Se me ocurrió una caja de texto EL CUAL SIRVA PARA LLENAR un LISTBOX LOS CÓDIGOS QUE SE DESEA FILTRAR, LUEGO COGER LOS CODPRODUCTOS INGRESADOS AL LISTBOX Y PONERLO EN EL ARRAY COMO MUESTRA CON LA MACROS ARRIBA(REEMPLAZAR "000004","000005", etc) por los valores del listbox, pero no se como hacerlo.

1 respuesta

Respuesta
3

Para hacer autofiltros con los datos de un listbox, lo primera es ponerle la propiedad multiselect al listbox para que puedes seleccionar varios valores al mismo tiempo y después programarlo en vba. Yo he hecho el siguiente ejemplo:

-Tengo una tabla de 5 columnas con datos escrita en el rango A1:¿E?.

-Quiero filtrar varios valores de la columna A mediante un listbox que he dibujado en la propia hoja en el que elegiré los valores

Estas son las macros necesarias:

Una para llenar el listbox y otra para ejecutar el filtro con los valores elegidos del listbox

Sub llena_listbox()
Range("a2").Select
Do While ActiveCell.Value <> ""
If InStr(valores, ActiveCell) = 0 Then
valores = valores & "," & ActiveCell.Value
End If
ActiveCell.Offset(1, 0).Select
Loop
valores = Mid(valores, 2, Len(valores) - 1)
valores = Split(valores, ",")
For x = 0 To UBound(valores)
ActiveSheet.ListBox1.AddItem valores(x)
Next
End Sub
Sub hacer_filtro()
For p = 0 To ActiveSheet.ListBox1.ListCount - 1
If ActiveSheet.ListBox1.Selected(p) = True Then
lista = lista & "," & ActiveSheet.ListBox1.List(p, 0)
End If
Next
lista = Mid(lista, 2, Len(lista) - 1)
lista = Split(lista, ",")
Range("a1").AutoFilter field:=1, Criteria1:=lista, Operator:=xlFilterValues
End Sub

muchas gracias.Lo estaba intentando pero con lo que me das ya termine de solucionarlo.

como haría si al momento de realizar el filtro de 4 valores que se ingresan por caja de texto no encuentra ningún valor filtrado(osea puede ser que se equivocaron al digitar algún código como suele suceder).

Entonces como validaría eso(que no me bote la hoja sin ningún dato filtrado sino que regrese al formulario y me diga que no encontró ningún dato,"vuelva a ingresar" algo asi mas o menos.

Y que salga de la función. que no continué con el proceso ya que después del filtro llamo varios módulos.

Discupa la molestia.

Muchas gracias

Utiliza la sentencia:

...

...

.

on error goto salida

...

...

...

exit sub

salida:

msgbox "no se encontró repita el proceso"

end sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas