Cargar listbox con columnas específicas

A toda la comunidad.

Estoy usando un listbox para visualizar una serie de registros que tengo en una hoja, el detalle es es que solo quiero mostrar en el mismo algunas columnas Ejemplo: los registros a partir de la fila 9 (fila 8 encabezado) y las columnas A, D, E, F y H... ¿Cómo puedo hacerlo?

1 Respuesta

Respuesta
1

. :)

Hola! Jesús. Tienes -al menos- 5 formas de hacerlo.

Suponiendo que tu información se encontrase en la hoja 'Datos' y que debieras incorporar '15' filas, te muestro dos métodos que te pueden interesar:

1) Es el más eficiente en términos de tiempos de ejecución y en uso de memoria, pero requiere de algunas líneas más de programación:

Private Sub UserForm_Initialize()
Dim Mat(1 To 5)
With Sheets("Datos")
  Mat(1) = Application.Transpose(.Range("a9").Resize(15))
  Mat(2) = Application.Transpose(.Range("d9").Resize(15))
  Mat(3) = Application.Transpose(.Range("e9").Resize(15))
  Mat(4) = Application.Transpose(.Range("f9").Resize(15))
  Mat(5) = Application.Transpose(.Range("h9").Resize(15))
End With
With ListBox1
  .ColumnCount = 5
  .ColumnWidths = "33; 33; 33; 33; 33"
  .List = Application.Transpose(Mat)
End With
End Sub

2) Similar al anterior en tiempo de ejecución y pocas líneas de código, a cambio de mayor uso de memoria (porque se cargan todos los datos pero se ocultan las columnas que no quieres ver):

Private Sub UserForm_Initialize()
With ListBox1
  .ColumnCount = 8
  .ColumnWidths = "33; 0; 0; 33; 33; 33; 0; 33"
  .List = Sheets("Datos").Range("a9:h9").Resize(15).Value
End With
End Sub

Espero te sea de utilidad.

Saludos, Mario (Cacho) Rodríguez

. :)

¡Gracias! 

Voy a adaptarlo a mi proyecto y te informo.

Dios te bendiga...

Mario!! en mi proyecto almaceno los registros en "n" filas, por los momentos no tengo cuantificado hasta cuantas puedo almacenar  por ahora solo tengo unas pocas porque estoy realizando pruebas  pero pueden pasar de 1000 filas ya que registro datos por fecha :-/

Amigo Mario, me funciono de manera exitosa y ademas pude resolver con lo que te comente de las "n" filas, ahora bien, en ese mismo listbox yo realizo un filtro por rango de fechas mediante un botón,  lo que necesito es adaptarlo a los datos que cargue en el listbox como comprenderás son las mismas filas pero diferentes columnas. Te adjunto el código:

Private Sub RANGO_AGUA_Click()
On Error Resume Next
Set b = Sheets("AGUA")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
dato1 = CDate(FECHA1)
dato2 = CDate(FECHA2)
If dato2 = Empty Or dato1 = emtpy Then
MsgBox ("Debe ingresar datos para consulta entre rango de fechas"), vbCritical, "AVISO"
Exit Sub
End If
If dato2 < dato1 Then
MsgBox ("La fecha final no puede ser mayor a la fecha inicial"), vbCritical, "AVISO"
Exit Sub
End If
b.AutoFilterMode = False
Me.LISTA_AGUA = Clear
Me.LISTA_AGUA.RowSource = Clear
For i = 9 To uf
   dato0 = CDate(b.Cells(i, 2).Value)
   If dato0 >= dato1 And dato0 <= dato2 Then
       Me.LISTA_AGUA.AddItem b.Cells(i, 1)
       Me.LISTA_AGUA.List(Me.LISTA_AGUA.ListCount - 1, 1) = b.Cells(i, 2)
       Me.LISTA_AGUA.List(Me.LISTA_AGUA.ListCount - 1, 2) = b.Cells(i, 3)
       Me.LISTA_AGUA.List(Me.LISTA_AGUA.ListCount - 1, 3) = b.Cells(i, 4)
       Me.LISTA_AGUA.List(Me.LISTA_AGUA.ListCount - 1, 4) = b.Cells(i, 5)
       Me.LISTA_AGUA.List(Me.LISTA_AGUA.ListCount - 1, 5) = b.Cells(i, 6)
       Me.LISTA_AGUA.List(Me.LISTA_AGUA.ListCount - 1, 6) = b.Cells(i, 7)
   End If
Next i
Me.LISTA_AGUA.ColumnWidths = "50 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt"
End Sub

Cuando se ejecuta el condicional el me muestra los datos filtrados en el listbox, ¿Como puedo arreglar el código? 

Soy nuevo en este mundo de la programación en VBA y mas bien aprendido muy rápido gracias a la ayuda de ustedes la comunidad de todoexpertos.

. :)

¡No entendí!... ¿Quieres cargar en el listbox los datos de las columnas ya analizadas siempre que la fecha de la columna B se encuentre en el rango estipulado?...

. :)

.

Hola Mario! De antemano gracias por tu tiempo... Fíjate te explico

En la base de datos registro los datos por fechas de la siguiente manera:

Luego mediante un botón se apertura un formulario para realizar una consulta entre rango de fechas, el formulario consta de dos textbox, un listbox (Al iniciar muestra los datos por columnas especificas con el código que me diste) y un botón (búsqueda) que filtra los datos del listbox entre rango de fechas, ahora yo te pase un código que realiza este botón pero no me filtra por columnas especificas y quisiera arreglarlo para que funcione.Te muestro el formulario.

En la imagen se aprecia la carga de registros desde la base de datos por columnas especificas sin problema, sin embargo cuando realizo la búsqueda entre rango de fechas no funciona por eso te envié el código que tengo. Espero me comprendas!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas