Mostrar datos filtrados en un listbox

14/01/2007 - 21:59 por ~ jose ~ | Informe spam
Hola muy buenas,
ya se que este caso se ha planteado en este foro pero no logro hacerlo
funcionar.
Tengo un formulario que contiene un listbox y un textbox.
Quisiera que al insertar texto en el textbox me muestre a tiempo real
los datos filtrados en el listbox.
El listbox se carga con este código en el evento "Initialize":
ListBox1CuadroTitulo.List = Range("d11:d" &
Range("d65536").End(xlUp).Row).Value

y el textbox contiene este código en el evento "Change":
Call filtro
With ListBox1CuadroTitulo
.Clear
.List = Range("d11:d" &
Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Value
End With

La macro filtro es:
Range(("d10"), Range("d65536").End(xlUp)).AdvancedFilter
Action:=xlFilterInPlace, CriteriaRange:= _
Range("D10:D11"), Unique:=False

Porque no me muestra el listbox los datos filtrados?

Gracias un saludo,
jose

Preguntas similare

Leer las respuestas

#1 ~ jose ~
14/01/2007 - 23:17 | Informe spam
Hola otra vez,
he encontrado este código para que me muestre los datos filtrados en
el listbox pero solo funciona si el filtro es "Autofiltro", quisiera
modificar el código para que me muestre el resultado con "Filtro
Avanzado"

Private Sub UserForm_Initialize()
Dim c As Range, rng As Range
With ActiveSheet.AutoFilter.Range
Set rng = .Offset(1, 0). _
Resize(.Rows.Count - 1, .Columns.Count)
End With
For Each c In rng.Columns(1).Cells
If c.Value <> "" And c.EntireRow.Hidden = False Then _
UserForm1.ListBox1CuadroTitulo.AddItem c.Value
Next c
End Sub

Gracias.

~ jose ~ ha escrito:

Hola muy buenas,
ya se que este caso se ha planteado en este foro pero no logro hacerlo
funcionar.
Tengo un formulario que contiene un listbox y un textbox.
Quisiera que al insertar texto en el textbox me muestre a tiempo real
los datos filtrados en el listbox.
El listbox se carga con este código en el evento "Initialize":
ListBox1CuadroTitulo.List = Range("d11:d" &
Range("d65536").End(xlUp).Row).Value

y el textbox contiene este código en el evento "Change":
Call filtro
With ListBox1CuadroTitulo
.Clear
.List = Range("d11:d" &
Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Value
End With

La macro filtro es:
Range(("d10"), Range("d65536").End(xlUp)).AdvancedFilter
Action:=xlFilterInPlace, CriteriaRange:= _
Range("D10:D11"), Unique:=False

Porque no me muestra el listbox los datos filtrados?

Gracias un saludo,
jose
Respuesta Responder a este mensaje
#2 Héctor Miguel
15/01/2007 - 08:23 | Informe spam
hola, hose !

1) [hasta donde se]... la instruccion con la que 'intentas' llenar el control con [solo] celdas 'visibles' de un rango filtrado...
NO devuelve una matriz 'manipulable' [o del tipo necesario] para asignarla como los elementos de un control de lista/combo :-((
MsgBox IsArray(Range("d11:d" & Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Value)

2) si quieres llenar un control de lista/combo con celdas visibles de un autofiltro/filtro avanzado
es necesario 'irlas' agregando [p.e.] con una variable de tipo rango +/- como sigue:

Dim Celda As Range
With ListBox1CuadroTitulo
.Clear
For Each Celda In Range("d11:d" & Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
.AddItem Celda
Next
End With

[seguramente] habra otras alternativas y/o variantes [conociendo los detalles 'pendientes'] :))
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
ya se que este caso se ha planteado en este foro pero no logro hacerlo funcionar.
Tengo un formulario que contiene un listbox y un textbox.
Quisiera que al insertar texto en el textbox me muestre a tiempo real los datos filtrados en el listbox.
El listbox se carga con este codigo en el evento "Initialize":
ListBox1CuadroTitulo.List = Range("d11:d" & Range("d65536").End(xlUp).Row).Value
y el textbox contiene este código en el evento "Change":
Call filtro
With ListBox1CuadroTitulo
.Clear
.List = Range("d11:d" &
Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Value
End With
La macro filtro es:
Range(("d10"), Range("d65536").End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _


Range("D10:D11"), Unique:=False
Porque no me muestra el listbox los datos filtrados?
Respuesta Responder a este mensaje
#3 ~ jose ~
15/01/2007 - 17:41 | Informe spam
Muy buenas,
Tu propuesta funciona perfectamente, pero ahora tengo el siguiente
problema:
Cuando muestra el listbox todos los datos sin filtrar, si pincho en
cualquier dato se activa la celda conde esté dicho dato mediante este
código:

Private Sub ListBox1CuadroTitulo_Click()
Rows(ListBox1CuadroTitulo.ListIndex + 12).Select
ActiveCell(0, 4).Select
End Sub

Pero si tengo los datos filtrados al pinchar en el listbox el dato que
quiero, no me selecciona la celda donde se encuentra el dato.
Como puedo seleccionar la celda que contiene el dato con el listbox
filtrado?

Gracias y un saludo,
jose

Héctor Miguel ha escrito:

hola, hose !

1) [hasta donde se]... la instruccion con la que 'intentas' llenar el control con [solo] celdas 'visibles' de un rango filtrado...
NO devuelve una matriz 'manipulable' [o del tipo necesario] para asignarla como los elementos de un control de lista/combo :-((
MsgBox IsArray(Range("d11:d" & Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Value)

2) si quieres llenar un control de lista/combo con celdas visibles de un autofiltro/filtro avanzado
es necesario 'irlas' agregando [p.e.] con una variable de tipo rango +/- como sigue:

Dim Celda As Range
With ListBox1CuadroTitulo
.Clear
For Each Celda In Range("d11:d" & Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
.AddItem Celda
Next
End With

[seguramente] habra otras alternativas y/o variantes [conociendo los detalles 'pendientes'] :))
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
> ya se que este caso se ha planteado en este foro pero no logro hacerlo funcionar.
> Tengo un formulario que contiene un listbox y un textbox.
> Quisiera que al insertar texto en el textbox me muestre a tiempo real los datos filtrados en el listbox.
> El listbox se carga con este codigo en el evento "Initialize":
> ListBox1CuadroTitulo.List = Range("d11:d" & Range("d65536").End(xlUp).Row).Value
> y el textbox contiene este código en el evento "Change":
> Call filtro
> With ListBox1CuadroTitulo
> .Clear
> .List = Range("d11:d" &
> Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Value
> End With
> La macro filtro es:
> Range(("d10"), Range("d65536").End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("D10:D11"), Unique:=False
> Porque no me muestra el listbox los datos filtrados?
Respuesta Responder a este mensaje
#4 Héctor Miguel
15/01/2007 - 18:38 | Informe spam
hola, jose !

Tu propuesta funciona... pero ahora tengo el siguiente problema: Cuando muestra el listbox todos los datos sin filtrar
si pincho en cualquier dato se activa la celda conde este dicho dato mediante este codigo:
Private Sub ListBox1CuadroTitulo_Click()
Rows(ListBox1CuadroTitulo.ListIndex + 12).Select
ActiveCell(0, 4).Select
End Sub
Pero si tengo los datos filtrados al pinchar en el listbox el dato que quiero
no me selecciona la celda donde se encuentra el dato.
Como puedo seleccionar la celda que contiene el dato con el listbox filtrado?



el 'detalle' lo sigue siendo la propiedad 'visible' de los elementos/rangos/filas/... en una lista filtrada
que no puedes 'trabajarla' de una manera 'convencional' sino igual a la forma en que 'llenaste' el control ;)
[p.e.] una forma seria +/- como la siguiente:

Private Sub ListBox1CuadroTitulo_Click()
Dim Celda As Range, Esta As Byte
For Each Celda In Range("d11:d" & Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
If Esta = ListBox1CuadroTitulo.ListIndex Then Celda.Select: Exit For
Esta = Esta + 1
Next
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#5 ~ jose ~
15/01/2007 - 20:32 | Informe spam
Estupendo!!!
Funciona todo muy bien,
Gracias, colega!

Héctor Miguel ha escrito:

hola, jose !

> Tu propuesta funciona... pero ahora tengo el siguiente problema: Cuando muestra el listbox todos los datos sin filtrar
> si pincho en cualquier dato se activa la celda conde este dicho dato mediante este codigo:
> Private Sub ListBox1CuadroTitulo_Click()
> Rows(ListBox1CuadroTitulo.ListIndex + 12).Select
> ActiveCell(0, 4).Select
> End Sub
> Pero si tengo los datos filtrados al pinchar en el listbox el dato que quiero
> no me selecciona la celda donde se encuentra el dato.
> Como puedo seleccionar la celda que contiene el dato con el listbox filtrado?

el 'detalle' lo sigue siendo la propiedad 'visible' de los elementos/rangos/filas/... en una lista filtrada
que no puedes 'trabajarla' de una manera 'convencional' sino igual a la forma en que 'llenaste' el control ;)
[p.e.] una forma seria +/- como la siguiente:

Private Sub ListBox1CuadroTitulo_Click()
Dim Celda As Range, Esta As Byte
For Each Celda In Range("d11:d" & Range("d65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
If Esta = ListBox1CuadroTitulo.ListIndex Then Celda.Select: Exit For
Esta = Esta + 1
Next
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida