Como hacer que un listbox muestre una busqueda filtrada?

22/04/2006 - 01:20 por JM | Informe spam
Hola a todos.
Me explico con el enunciado.
Tengo una hoja excel que contiene una relacion de libros.
He creado un formulario VBA que contiene una serie de campos
1. un listbox que muestra el listado completo de publicaciones que hay en la
hoja,
con un bucle recorre las lineas y copia en el todas las publicaciones.
2. una serie de campos de texto que me muestran los detalles de la publicacion
(libro) que yo selecciono en el listbox al hacer click en el. (detalles
como año,
publicacion, tema, etc.)

LO que quiero conseguir y no me salgo es:
1. añadir un boton de busqueda que muestre un mensaje de "Libro a Buscar"
(esto ya lo tengo y el resultado lo almaceno en una variable)
2. me filtre la hoja excel y solo muestre ese libro/publicacion, o todos los
libros que
contengan la palabra introducida en el inputbox por el usuario.
3. en el listbox me aparezcan tambien solo esos mismos libros que en la hoja
ya estan filtrados y que ademas si tengo que realizar una modificacion
sobre
ellos, lo cual hago desde el formulario, realmente lo aplique a el libro
que
he seleccionado.


Muchas gracias de antemano a todos.

Preguntas similare

Leer las respuestas

#6 JM
02/05/2006 - 18:32 | Informe spam
Hola Luka, de nuevo.
Hace dias que le doy vueltas al codigo que me enviaste pero no hay forma, me
salen errores. tengo un archivo de ejemplo que si quieres te envio para que
puedas comprobar lo que hago y veas los errores que me provoca. Me puedes dar
tu mail para que te lo envie?
Muchas gracias de antemano.
Un saludo.

"luka" escribió:

Hola JM
He revisado el código y hay un error en lo que te mandé,
la línea en la que se calcula el número de filas tiene que quedar así
ultimafila = Cells(Rows.Count, 2).End(xlUp).Row
sin la s final
por lo demás, he probado el código y a mí me funciona

Comentas cualquier otra cosa

Saludos
Javier B.

JM escribió:
> Hola Luka, estoy intentando probar el codigo y me da error 381 en la
> definicion de la matriz y no consigo hacerlo funcionar.
>
> Yo he definido las variables y me queda algo así:
>
> Private Sub buscarYMostrar2()
> 'probar este codigo
>
>
> Dim txtABuscar As String
> Dim txtAbuscar2 As Variant
> Dim ultimafila As Variant
> Dim entrada1 As Variant
> Dim salida As Variant
> Dim nextfila As Variant
> Dim matriz As Variant
>
> txtABuscar = Application.InputBox("Introduce el Nombre de la Publicación que
> quieres buscar (o PARTE de él)")
> ultimafila = Cells(Rows.Count, 2).End(xlUp).Rows
>
> Selection.AutoFilter Field:=3, Criteria1:="*" & txtABuscar & "*"
>
> Set entrada1 = Range("b2").Resize(ultimafila,
> 1).SpecialCells(xlCellTypeVisible)
>
> Set salida = Cells(2, 40)
>
> entrada1.Copy Destination:=salida
>
> nextfila = Cells(Rows.Count, 40).End(xlUp).Row
>
> matriz = Cells(2, 40).Resize(nextfila, 1)
>
> lstPublicaciones.List = matriz
>
> End Sub
>
>
> Es asi como te funciona a ti?
> Gracias de antemano.
>
> "JM" escribió:
>
>> Muchas gracias Javier B.
>> voy a probar el codigo a ver que tal me funciona.
>> Actualmente el volumen de lineas que uso no llega a las 1000 por lo que si a
>> ti con 1500 te funciona...
>> De nuevo muchas gracias, ya te dire algo.
>>
>> "luka" escribió:
>>
>>> Hola JM
>>> Yo estoy haciendo algo parecido, aunque no de libros.
>>> No sé si para un gran volumen de lineas es operativo o no, yo tengo
>>> sobre 1500
>>> Quizas sea un poco rebuscado pero lo que hago es copiar en un rango
>>> nuevo todas las celdas visibles una vez que he hecho el autofiltro
>>> y dar el valor del rango al listbox.
>>> bueno yo trabajo con combobox pero es igual
>>>
>>> ultimafila = Cells(Rows.Count, 2).End(xlUp).Rows
>>>
>>> Selection.AutoFilter Field:=3, Criteria1:="*" & txtABuscar & "*"
>>>
>>> Set entrada1 = Range("b2").Resize(ultimafila, 1).
>>> _SpecialCells(xlCellTypeVisible)
>>>
>>> Set salida = Cells(2, 40)
>>>
>>> entrada1.Copy Destination:=salida
>>>
>>> nextfila = Cells(Rows.Count, 40).End(xlUp).Row
>>>
>>> matriz = Cells(2, 40).Resize(nextfila, 1)
>>>
>>> lstPublicaciones.List = matriz
>>>
>>> Espero que te sirva.
>>> Saludos
>>> Javier B.
>>>
>>> JM escribió:
>>>
>>> Range("C2").Select
>>>
>>>> Selection.AutoFilter Field:=3, Criteria1:="*" & txtABuscar & "*"
>>>>
>>>> 'a partir de aqui es para que muestre los resultados en el formulario
>>>> '
>>>> With ThisWorkbook.Worksheets("Publicaciones")
>>>> .Activate
>>>> Set rng = .Range("A1").CurrentRegion
>>>> Set rng = .Range("A2:K" & rng.Rows.Count + 3)
>>>> lstPublicaciones.Clear
>>>> For Each linea In rng.Rows
>>>> If Cells(linea.Row, 3) <> "" Then
>>>>
>>>> 'si elimino este if y dejo la instruccion solo debajo del
>>>> anterior if funciona
>>>> 'a medias ya que me muestra el listado completo, no el filtrado.
>>>> 'si pongo este if, no funciona, no muestra nada.
>>>>
>>>> If Cells(linea.Row, 3) = txtAbuscar2 Then
>>>> lstPublicaciones.AddItem Cells(linea.Row, 1) & " " &
>>>> Cells(linea.Row, 3) & " ( " & Cells(linea.Row, 4) & " )"
>>>>
>>>> End If
>>>>
>>>> Else
>>>> Exit For
>>>> End If
>>>>
>>>>
>>>> Next linea
>>>> End With
>>>>
>>>> End Sub
>>>>
>>>>
>>>>
>>>>
>>>> "JM" escribió:
>>>>
>>>>> Hola a todos.
>>>>> Me explico con el enunciado.
>>>>> Tengo una hoja excel que contiene una relacion de libros.
>>>>> He creado un formulario VBA que contiene una serie de campos
>>>>> 1. un listbox que muestra el listado completo de publicaciones que hay en la
>>>>> hoja,
>>>>> con un bucle recorre las lineas y copia en el todas las publicaciones.
>>>>> 2. una serie de campos de texto que me muestran los detalles de la publicacion
>>>>> (libro) que yo selecciono en el listbox al hacer click en el. (detalles
>>>>> como año,
>>>>> publicacion, tema, etc.)
>>>>>
>>>>> LO que quiero conseguir y no me salgo es:
>>>>> 1. añadir un boton de busqueda que muestre un mensaje de "Libro a Buscar"
>>>>> (esto ya lo tengo y el resultado lo almaceno en una variable)
>>>>> 2. me filtre la hoja excel y solo muestre ese libro/publicacion, o todos los
>>>>> libros que
>>>>> contengan la palabra introducida en el inputbox por el usuario.
>>>>> 3. en el listbox me aparezcan tambien solo esos mismos libros que en la hoja
>>>>> ya estan filtrados y que ademas si tengo que realizar una modificacion
>>>>> sobre
>>>>> ellos, lo cual hago desde el formulario, realmente lo aplique a el libro
>>>>> que
>>>>> he seleccionado.
>>>>>
>>>>>
>>>>> Muchas gracias de antemano a todos.

Respuesta Responder a este mensaje
#7 luka
02/05/2006 - 19:08 | Informe spam
Hola JM

luka79arrobatelefonica.net


sustituye arroba por @


JM escribió:
Hola Luka, de nuevo.
Hace dias que le doy vueltas al codigo que me enviaste pero no hay forma, me
salen errores. tengo un archivo de ejemplo que si quieres te envio para que
puedas comprobar lo que hago y veas los errores que me provoca. Me puedes dar
tu mail para que te lo envie?
Muchas gracias de antemano.
Un saludo.

"luka" escribió:

Hola JM
He revisado el código y hay un error en lo que te mandé,
la línea en la que se calcula el número de filas tiene que quedar así
ultimafila = Cells(Rows.Count, 2).End(xlUp).Row
sin la s final
por lo demás, he probado el código y a mí me funciona

Comentas cualquier otra cosa

Saludos
Javier B.

JM escribió:
Hola Luka, estoy intentando probar el codigo y me da error 381 en la
definicion de la matriz y no consigo hacerlo funcionar.

Yo he definido las variables y me queda algo así:

Private Sub buscarYMostrar2()
'probar este codigo


Dim txtABuscar As String
Dim txtAbuscar2 As Variant
Dim ultimafila As Variant
Dim entrada1 As Variant
Dim salida As Variant
Dim nextfila As Variant
Dim matriz As Variant

txtABuscar = Application.InputBox("Introduce el Nombre de la Publicación que
quieres buscar (o PARTE de él)")
ultimafila = Cells(Rows.Count, 2).End(xlUp).Rows

Selection.AutoFilter Field:=3, Criteria1:="*" & txtABuscar & "*"

Set entrada1 = Range("b2").Resize(ultimafila,
1).SpecialCells(xlCellTypeVisible)

Set salida = Cells(2, 40)

entrada1.Copy Destination:=salida

nextfila = Cells(Rows.Count, 40).End(xlUp).Row

matriz = Cells(2, 40).Resize(nextfila, 1)

lstPublicaciones.List = matriz

End Sub


Es asi como te funciona a ti?
Gracias de antemano.

"JM" escribió:

Muchas gracias Javier B.
voy a probar el codigo a ver que tal me funciona.
Actualmente el volumen de lineas que uso no llega a las 1000 por lo que si a
ti con 1500 te funciona...
De nuevo muchas gracias, ya te dire algo.

"luka" escribió:

Hola JM
Yo estoy haciendo algo parecido, aunque no de libros.
No sé si para un gran volumen de lineas es operativo o no, yo tengo
sobre 1500
Quizas sea un poco rebuscado pero lo que hago es copiar en un rango
nuevo todas las celdas visibles una vez que he hecho el autofiltro
y dar el valor del rango al listbox.
bueno yo trabajo con combobox pero es igual

ultimafila = Cells(Rows.Count, 2).End(xlUp).Rows

Selection.AutoFilter Field:=3, Criteria1:="*" & txtABuscar & "*"

Set entrada1 = Range("b2").Resize(ultimafila, 1).
_SpecialCells(xlCellTypeVisible)

Set salida = Cells(2, 40)

entrada1.Copy Destination:=salida

nextfila = Cells(Rows.Count, 40).End(xlUp).Row

matriz = Cells(2, 40).Resize(nextfila, 1)

lstPublicaciones.List = matriz

Espero que te sirva.
Saludos
Javier B.

JM escribió:

Range("C2").Select

Selection.AutoFilter Field:=3, Criteria1:="*" & txtABuscar & "*"

'a partir de aqui es para que muestre los resultados en el formulario
'
With ThisWorkbook.Worksheets("Publicaciones")
.Activate
Set rng = .Range("A1").CurrentRegion
Set rng = .Range("A2:K" & rng.Rows.Count + 3)
lstPublicaciones.Clear
For Each linea In rng.Rows
If Cells(linea.Row, 3) <> "" Then

'si elimino este if y dejo la instruccion solo debajo del
anterior if funciona
'a medias ya que me muestra el listado completo, no el filtrado.
'si pongo este if, no funciona, no muestra nada.

If Cells(linea.Row, 3) = txtAbuscar2 Then
lstPublicaciones.AddItem Cells(linea.Row, 1) & " " &
Cells(linea.Row, 3) & " ( " & Cells(linea.Row, 4) & " )"

End If

Else
Exit For
End If


Next linea
End With

End Sub




"JM" escribió:

Hola a todos.
Me explico con el enunciado.
Tengo una hoja excel que contiene una relacion de libros.
He creado un formulario VBA que contiene una serie de campos
1. un listbox que muestra el listado completo de publicaciones que hay en la
hoja,
con un bucle recorre las lineas y copia en el todas las publicaciones.
2. una serie de campos de texto que me muestran los detalles de la publicacion
(libro) que yo selecciono en el listbox al hacer click en el. (detalles
como año,
publicacion, tema, etc.)

LO que quiero conseguir y no me salgo es:
1. añadir un boton de busqueda que muestre un mensaje de "Libro a Buscar"
(esto ya lo tengo y el resultado lo almaceno en una variable)
2. me filtre la hoja excel y solo muestre ese libro/publicacion, o todos los
libros que
contengan la palabra introducida en el inputbox por el usuario.
3. en el listbox me aparezcan tambien solo esos mismos libros que en la hoja
ya estan filtrados y que ademas si tengo que realizar una modificacion
sobre
ellos, lo cual hago desde el formulario, realmente lo aplique a el libro
que
he seleccionado.


Muchas gracias de antemano a todos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida