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

#1 JM
22/04/2006 - 08:54 | Informe spam
El codigo que tengo y que actualmente me falla a la hora de mostrar los
resultados en el listbox es el siguiente:

Private Sub buscarYMostrar()
'Realizaremos una busqueda de publicacion y haremos que solo muestre esas
publicaciones
'en el listado de publicaciones
'//

Dim rng As Range
Dim linea As Range
Dim txtABuscar As String ' esta es la variable que almacena el inputbox
Dim txtAbuscar2 As Variant 'esta la utilizo para que al inputbox se le añada
' cualquier palabra delante o detras.

'con lo de abajo pide el nombre y filtra la hoja, y lo hace correctamente.

txtABuscar = Application.InputBox("Introduce el Nombre de la Publicación que
quieres buscar (o PARTE de él)")
txtAbuscar2 = "*" & txtABuscar & "*"
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
#2 luka
22/04/2006 - 20:23 | Informe spam
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
#3 JM
23/04/2006 - 10:27 | Informe spam
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
#4 JM
24/04/2006 - 22:44 | Informe spam
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
#5 luka
24/04/2006 - 23:37 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida