Propiedades del listbox

14/02/2005 - 11:55 por Adolfo | Informe spam
Hola gente,

Tengo un formulario con un listbox en el que necesito que me aparezca un
rango de datos. Hasta aqui no hay problema, lo pongo en la propiedad
RowSource y listo, el problema surge cuando no quiero que se vea el rango
completo, sino determinadas columnas. ¿Cómo se puede hacer para que por
ejemplo de un rango de 10 columnas solo se vea la 1, la 3 y la 7?

Y ya que estamos les comento lo que quiero hacer, que seguro me pueden dar
ideas, lo que necesito es que dentro de un formulario pueda mostrar todos
los registros de un rango de datos que cumplan unas determinadas
condiciones. A mi se me ha ocurrido hacerlo con un listbox, aunque me
gustaría mas que quedase con una estructura de celdas, eso si, no tengo ni
idea que como voy a filtrar los datos que no cumplan las condiciones
deseadas, la única idea es filtrar previamente los datos y mostrar
posteriormente los datos en el listbox. ¿Alguna idea? Se aceptan
sugerencias.

Un saludo y gracias por anticipado

Adolfo

Preguntas similare

Leer las respuestas

#6 Adolfo
16/02/2005 - 10:38 | Informe spam
Nuevamente muchas gracias por la información,

Lo que estoy intentando crear es lo siguiente: tengo una hoja donde descargo
el listado de vencimientos de las facturas de los clientes, el número de
filas por lo tanto es variable, el número de columnas no (te pregunte como
calcularlos para posibles usos futuros). Como bien has dicho la definicion
de los rangos es dinamica, utilizando para ello la función "desref". Y lo
que necesito es presentar en un formulario todos aquellos vencimientos que
sean inferiores a una fecha. La columna donde estan las fechas es la
primera. No me haria falta trasladar todas las columnas al listbox las que
necesito son la 1,3,4,5 partiendo que el primer dato esta en A2.

Hasta donde yo he llegado es aqui, como puedes ver todavía no he resuelto el
problema de mostrar solo aquellos registros que cumplan una condición, pero
primero tengo que solventar el problema de definir la matriz, no hay
problemas si es un número de filas "fijo" pero no funciona cuando es
variable.


Private Sub CommandButton1_Click()
Dim i As Single
Dim Filas As Long

ListBox1.ColumnCount = 4

With Range("Prueba")
Filas = .Rows.Count
End With

Dim MyArray(Filas, 4) <- Aqui esta el problema

For i = 0 To Filas
For a = 2 To Filas
MyArray(i, 0) = Hoja1.Cells(a, 1).Value
MyArray(i, 1) = Hoja1.Cells(a, 2).Value
MyArray(i, 2) = Hoja1.Cells(a, 3).Value
MyArray(i, 3) = Hoja1.Cells(a, 4).Value
Next a
Next i

ListBox1.List() = MyArray

End Sub

Se aceptan sugerencias, sobre todo a la hora de definir la matriz.

Un saludo,

"Héctor Miguel" escribió en el mensaje
news:
hola, Adolfo !

> ... he optado por montar una matriz y cargar los datos... dentro del


listbox.
> ... los bucles necesito que me recorran todas las filas del rango y


todas las columnas
> ... ¿como puedo decir a la aplicacion cuantas filas o columnas son?
> ... el numero de filas y columnas es variable.
> ... sera definir una variable con el numero de filas o columnas, pero


¿como se cuantas son?

p.e.
Dim Filas As Long, Cols As Byte
With Range("NombreDelRango")
Filas = .Rows.Count
Cols = .Columns.Count
End With

[probablemente estes usando nombres de rangos 'dinamicos' -?-] ... si


puedes indicar:
- cual es 'el rango' [y/o de que depende la variacion en filas/columnas]
- en cual columna se busca 'la coincidencia'
- cuales serian las columnas a trasladar al listbox [y el orden si fuera


'diferente']
se podria [tratar de] proponer una [posible] solucion 'mas en concreto'


;)

saludos,
hector.


Respuesta Responder a este mensaje
#7 Héctor Miguel
16/02/2005 - 11:15 | Informe spam
hola, Adolfo !

... una hoja donde descargo el listado de vencimientos de las facturas de los clientes
... necesito... presentar en un formulario todos aquellos vencimientos... inferiores a una fecha.
... columna... fechas es la primera las columnas al listbox... que necesito son la 1,3,4,5
... el primer dato esta en A2.
... no he resuelto el... mostrar solo aquellos registros que cumplan una condicion [...]



para iniciar... ve si te sirve algo +/- como lo siguiente...
[seguramente habra que 'ajustar el ancho' de las columnas del listbox pero... 'por partes']
si cualquier duda [o informacion adicional]... ¿comentas?
saludos,
hector.
en el modulo de codigo del formulario [se 'actualizara' cada vez que se muestre]
Private Sub UserForm_Initialize()
Dim Datos, Col As Byte, FilaRango As Long, FilaLista As Long, Fecha As Date
Datos = Array(1, 3, 4, 5) ' las columnas del rango que necesitas 'pasar' al listbox '
Fecha = DateSerial(2005, 2, 25) ' la fecha <= a la que necesitas comparar la columna 1 '
ListBox1.ColumnCount = 4 ' el numero de columnas que tendra al listbox '
With Worksheets("Hoja1").Range("NombreDelRango") ' corrige nombre de hoja y rango '
For FilaRango = 1 To .Rows.Count
If .Cells(FilaRango, 1) <= Fecha Then
ListBox1.AddItem
For Col = LBound(Datos) To UBound(Datos)
ListBox1.List(FilaLista, Col) = .Cells(FilaRango, Datos(Col)).Text
Next
FilaLista = FilaLista + 1
End If
Next
End With
End Sub
Respuesta Responder a este mensaje
#8 Adolfo
16/02/2005 - 11:29 | Informe spam
He conseguido variar el tamaño de la matriz y que no me de error, lo hago de
la siguiente forma:
Primero defino la matriz
dim myarray () as variant
y posteriormente la redefino con el valor de las filas
redim myarray(filas,4)

Se que no esta optimizado el sistema, puesto que estoy creando una matriz de
muchas mas filas de las que necesito, pero bueno, primero consigo que
funcione y despues optimizo.

Sigo aceptando ideas.

Un saludo,
Adolfo
"Adolfo" escribió en el mensaje
news:
Nuevamente muchas gracias por la información,

Lo que estoy intentando crear es lo siguiente: tengo una hoja donde


descargo
el listado de vencimientos de las facturas de los clientes, el número de
filas por lo tanto es variable, el número de columnas no (te pregunte como
calcularlos para posibles usos futuros). Como bien has dicho la definicion
de los rangos es dinamica, utilizando para ello la función "desref". Y lo
que necesito es presentar en un formulario todos aquellos vencimientos que
sean inferiores a una fecha. La columna donde estan las fechas es la
primera. No me haria falta trasladar todas las columnas al listbox las que
necesito son la 1,3,4,5 partiendo que el primer dato esta en A2.

Hasta donde yo he llegado es aqui, como puedes ver todavía no he resuelto


el
problema de mostrar solo aquellos registros que cumplan una condición,


pero
primero tengo que solventar el problema de definir la matriz, no hay
problemas si es un número de filas "fijo" pero no funciona cuando es
variable.


Private Sub CommandButton1_Click()
Dim i As Single
Dim Filas As Long

ListBox1.ColumnCount = 4

With Range("Prueba")
Filas = .Rows.Count
End With

Dim MyArray(Filas, 4) <- Aqui esta el problema

For i = 0 To Filas
For a = 2 To Filas
MyArray(i, 0) = Hoja1.Cells(a, 1).Value
MyArray(i, 1) = Hoja1.Cells(a, 2).Value
MyArray(i, 2) = Hoja1.Cells(a, 3).Value
MyArray(i, 3) = Hoja1.Cells(a, 4).Value
Next a
Next i

ListBox1.List() = MyArray

End Sub

Se aceptan sugerencias, sobre todo a la hora de definir la matriz.

Un saludo,

"Héctor Miguel" escribió en el mensaje
news:
> hola, Adolfo !
>
> > ... he optado por montar una matriz y cargar los datos... dentro del
listbox.
> > ... los bucles necesito que me recorran todas las filas del rango y
todas las columnas
> > ... ¿como puedo decir a la aplicacion cuantas filas o columnas son?
> > ... el numero de filas y columnas es variable.
> > ... sera definir una variable con el numero de filas o columnas, pero
¿como se cuantas son?
>
> p.e.
> Dim Filas As Long, Cols As Byte
> With Range("NombreDelRango")
> Filas = .Rows.Count
> Cols = .Columns.Count
> End With
>
> [probablemente estes usando nombres de rangos 'dinamicos' -?-] ... si
puedes indicar:
> - cual es 'el rango' [y/o de que depende la variacion en filas/columnas]
> - en cual columna se busca 'la coincidencia'
> - cuales serian las columnas a trasladar al listbox [y el orden si fuera
'diferente']
> se podria [tratar de] proponer una [posible] solucion 'mas en concreto'
;)
>
> saludos,
> hector.
>
>


Respuesta Responder a este mensaje
#9 Adolfo
17/02/2005 - 19:53 | Informe spam
Pues eso, que funciona perfecto, al final yo tambien consegui solucionarlo,
pero escribiendo 3 veces mas código, y supongo que encima consumiendo muchos
mas recursos.

Un saludo y gracias de nuevo
Adolfo

"Héctor Miguel" escribió en el mensaje
news:OqHy%
hola, Adolfo !

> ... una hoja donde descargo el listado de vencimientos de las facturas


de los clientes
> ... necesito... presentar en un formulario todos aquellos


vencimientos... inferiores a una fecha.
> ... columna... fechas es la primera las columnas al listbox... que


necesito son la 1,3,4,5
> ... el primer dato esta en A2.
> ... no he resuelto el... mostrar solo aquellos registros que cumplan una


condicion [...]

para iniciar... ve si te sirve algo +/- como lo siguiente...
[seguramente habra que 'ajustar el ancho' de las columnas del listbox


pero... 'por partes']
si cualquier duda [o informacion adicional]... ¿comentas?
saludos,
hector.
en el modulo de codigo del formulario [se 'actualizara' cada vez


que se muestre]
Private Sub UserForm_Initialize()
Dim Datos, Col As Byte, FilaRango As Long, FilaLista As Long, Fecha As


Date
Datos = Array(1, 3, 4, 5) ' las columnas del rango que necesitas 'pasar'


al listbox '
Fecha = DateSerial(2005, 2, 25) ' la fecha <= a la que necesitas


comparar la columna 1 '
ListBox1.ColumnCount = 4 ' el numero de columnas que tendra al listbox '
With Worksheets("Hoja1").Range("NombreDelRango") ' corrige nombre de


hoja y rango '
For FilaRango = 1 To .Rows.Count
If .Cells(FilaRango, 1) <= Fecha Then
ListBox1.AddItem
For Col = LBound(Datos) To UBound(Datos)
ListBox1.List(FilaLista, Col) = .Cells(FilaRango,


Datos(Col)).Text
Next
FilaLista = FilaLista + 1
End If
Next
End With
End Sub


Respuesta Responder a este mensaje
#10 Héctor Miguel
18/02/2005 - 06:58 | Informe spam
hola, Adolfo !

... funciona
... yo tambien consegui solucionarlo, pero... 3 veces mas codigo, y supongo... mas recursos.



ve que 'recortes' le harias a la solucion que encontraste y...
... ya tienes otra forma de 'matar pulgas' [o... ¿'moscas a cañonazos'?] :))

saludos, y gracias por el 'feed-back' ;)
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida