............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Rangos no contiguos para cargar un ListBox

Ver el tema anterior Ver el tema siguiente Ir abajo

Rangos no contiguos para cargar un ListBox

Mensaje por Roberto2010 el Mar Ago 30, 2011 8:12 pm

Hola Foristas!
Con el siguiente código se puede cargar un ListBox:
ListBox1.RowSource = "A2:D" & Hoja1.Range("A" & Rows.Count).End(xlUp).Row

Ahora bien, Pregunto ¿es posible que el Listbox cargue o muestre varios rangos no contiguos?
Por ejemplo un Listbox de 8 columnas mostrando las siguientes columnas de la hoja:
de la A a la B, de la D a la E, de la G a la J
Si un ListBox no lo permite, ¿Existe alguna otra herramienta que sí lo permita?

Esto lo pregunto porque tengo una base que va de la A a la BA aproximadamente y no necesitaria visualizar todas esas columnas.
Desde ya, Muchas gracias por la orientación.
avatar
Roberto2010

Masculino Cantidad de envíos : 76
Edad : 40
Ciudad - Pais : ARGENTINA
Version de Excel : 2003-2007
Fecha de inscripción : 03/09/2010

Volver arriba Ir abajo

Re: Rangos no contiguos para cargar un ListBox

Mensaje por moises melgar el Miér Ago 31, 2011 8:43 pm

Excel 2007,
Mi idea es enviar la informacion de excel a una matriz y de ahi al listbox
Código:
Private Sub UserForm_Initialize()
'de la A a la B, de la D a la E, de la G a la J
Dim valores(4, 8) 'son 4 filas y 8 columnas (ADAPTAR)
Dim filas, columna, col
' Valores de "A" y todos con el mismos Num de filas   
filas = Hoja1.Range("A" & Rows.Count).End(xlUp).Row
ListBox1.ColumnCount = 8 'Numero de columnas en mi listbox
col = Array(1, 2, 4, 5, 7, 8, 9, 10) 'que columnas son las que deseo
columna = ListBox1.ColumnCount - 1
    For x = 0 To columna
        For a = 0 To filas - 1
            valores(a, x) = Hoja1.Cells(1 + a, col(x)).Value
        Next a
    Next x
   
    ListBox1.List() = valores
End Sub
Adjunto Archivo
Archivos
listbox con diferentes rangos.xlsm No tienes los permisos para descargar los archivos.(22 KB) Descargado 76 veces
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 531
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Rangos no contiguos para cargar un ListBox

Mensaje por Roberto2010 el Jue Sep 01, 2011 12:48 am

Moisés, haber... que puedo decir: gracias, muchas gracias a ti a a todos los maestros que siempre me están ayudando. Agradezco tus notas explicativas en el código. Poco a poco voy constuyendo un proyecto gracias a tanta colaboración desinteresada en este foro.
Te comento si no es molestia el siguiente error:
Se ha producido el error '9' en tiempo de ejecución. Sub índice fuera de intervalo.
Moisés ese es el error que notifica cuando agrego más datos hacia abajo en la columna A de la hoja, ¿se podrá hacer que el numero de filas que muestre el ListBox sea dinámico siempre dependiendo de la columna A?
Muchas gracias!
avatar
Roberto2010

Masculino Cantidad de envíos : 76
Edad : 40
Ciudad - Pais : ARGENTINA
Version de Excel : 2003-2007
Fecha de inscripción : 03/09/2010

Volver arriba Ir abajo

Re: Rangos no contiguos para cargar un ListBox

Mensaje por moises melgar el Jue Sep 01, 2011 1:59 pm

hola Gracias
Elabore otro, un poco mas complejo pero es mas dinamico, pero antes como comentas ese es el unico detalle de mi primera idea, no es dimamico en los sig aspectos:
Dim valores(4, 8) son 4 filas y 8 columnas del listbox(ADAPTAR)
Es decir deben cuadrar siempre estos valores:
ListBox1.ColumnCount = 8 columnas del listbox
Hoja1.Range("A" & Rows.Count).End(xlUp).Row (de aqui salio mi cuatro) 4 filas del Listbox
col = Array(1, 2, 4, 5, 7, 8, 9, 10) 'que columnas son las que deseo(son 8 valores entre parentesis)

Pero ahora esta es mas dinamica:
Código:
'Boton que Ejecuta la macro:
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False 'no se mira el movimiento de la hoja al copiar
Application.DisplayAlerts = False ' se desactivan los mensajes del Excel
Dim filas
' Deseo los valores de "A" y todos tienen el mimo Num de filas
filas = Hoja1.Range("A" & Rows.Count).End(xlUp).Row
' ahora creo una nueva hoja donde acumulare mis datos y sera la referencia de mi RowSource
    Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "calculo"
'Selecciono los datos de la hoja1, con los rangos especificados segun las columnas:
Hoja1.Range("A1:B" & filas & ", D1:E" & filas & ", G1:J" & filas).Copy
' pego los valores copiados a la hoja nueva hoja
Sheets("calculo").Range("A1").PasteSpecial xlPasteValues
'esto es para que no quede aun la copia disponible
Application.CutCopyMode = False
' ejecuto el userform con el listbox
UserForm2.Show
End Sub
Para modificarlo solo Seria cuestion de:
Para saber que columna tendra el numero de filas a usar:
filas = Hoja1.Range("A" & Rows.Count).End(xlUp).Row
las columnas que se desea en el listbox (incluyendo los encabezados), ya que el listbox usa desde la fila 2 en la nueva hoja:
Hoja1.Range("A1:B" & filas & ", D1:E" & filas & ", G1:J" & filas).Copy

Código:
'USERFORM2:
'Codigo que se ejecuta al inicial el Form
Private Sub UserForm_Initialize()
'Determino el numero de columnas existentes en la nueva hoja
ListBox1.ColumnCount = Sheets("calculo").Range("A" & Rows.Count).End(xlUp).End(xlToRight).Column
'DEtermino el Rango de los valores en la nueva hoja y la uso para el listbox
UserForm2.ListBox1.RowSource = "calculo!A2:" & Range("A" & Rows.Count).End(xlUp).End(xlToRight).Address
End Sub

'Antes de Cerrar el Form:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.ScreenUpdating = False ' desactivo el movimiento de Excel
Application.DisplayAlerts = False ' Desactivo los mensajes que salen de Excel
Sheets("calculo").Delete ' Elimino la hoja Creada
Hoja1.Activate 'Es donde esta mi boton
' Regreso a la normalidad las dos aplicaciones de Excel
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Archivos
listbox con diferentes rangos (1).xlsm No tienes los permisos para descargar los archivos.(26 KB) Descargado 110 veces
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 531
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Rangos no contiguos para cargar un ListBox

Mensaje por Roberto2010 el Jue Sep 01, 2011 8:28 pm

Moises, tus explicaciones aclaran la situación, en especial sobre como poder modificar la columna que determine las filas a mostrar.
Muchas gracias por tu tiempo !
avatar
Roberto2010

Masculino Cantidad de envíos : 76
Edad : 40
Ciudad - Pais : ARGENTINA
Version de Excel : 2003-2007
Fecha de inscripción : 03/09/2010

Volver arriba Ir abajo

Re: Rangos no contiguos para cargar un ListBox

Mensaje por Roberto2010 el Jue Sep 01, 2011 9:02 pm

Private Sub UserForm_Initialize()
ListBox1.ColumnCount = Sheets("calculo").Range("A" & Rows.Count).End(xlUp).End(xlToRight).Column
Moisés la siguiente línea de código demora en ejecutarse:
UserForm2.ListBox1.RowSource = "calculo!A2:" & Range("A" & Rows.Count).End(xlUp).End(xlToRight).Address
End Sub

Remplacé la macro por la siguiente que es un poco mas rápida.
Private Sub UserForm_Initialize()
UserForm2.ListBox1.RowSource = "calculo!A2:H" & Hoja1.Range("A" & Rows.Count).End(xlUp).Row
End Sub
claro... ya sabiendo de antemano que hasta la columna H son 8 columnas, las cuales son la que se desean ver.
Muchas gracias nuevamente!
avatar
Roberto2010

Masculino Cantidad de envíos : 76
Edad : 40
Ciudad - Pais : ARGENTINA
Version de Excel : 2003-2007
Fecha de inscripción : 03/09/2010

Volver arriba Ir abajo

Re: Rangos no contiguos para cargar un ListBox

Mensaje por moises melgar el Jue Sep 01, 2011 9:11 pm

de nada que bueno que sabes usar el codigo
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 531
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Rangos no contiguos para cargar un ListBox

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.