Mostrar tabla en ListBox de Excel vba dependiendo la hoja activa

Hace un par de años publiqué el ejemplo Pasar datos de tabla a ListBox en Excel, el cual toma los datos de una tabla de Excel y los transporta a un ListBox.

El ejemplo está un poco limitado, ya que la tabla tiene un nombre definido que no cambia el rango de la tabla de manera dinámica, además de que si agregamos una columna, el código debe ser modificado.

Tip: Te invito a revisar qué otros ejemplos he publicado donde uso el control ListBox.

Haciendo el ejemplo más dinámico

Entonces, la pregunta que se amerita es: Por qué rediseñar ejemplo ? Por una simple razón, para hacerlo más dinámico.

A continuación menciono las mejoras del archivo.

  1. Si el archivo tiene varias hojas, el formulario tomará los datos de la tabla que comience en A1 y transpostará los datos al ListBox.
  2. El ListBox se adecúa al tamaño de filas y columnas de la tabla.

Cómo funciona

Usamos la propiedad RowSource del control ListBox para pasar los datos de una tabla. Dicha tabla deberá tener un nombre asignado para poder usar la propiedad.

De manera dinámica, el código vba asigna el nombre a la tabla activa, además de reconocer el tamaño de filas y columnas.

Mostrar tabla en ListBox de Excel

Figura 1. Mostrar tabla de Excel en ListBox.

Código vba

El código que hará todo el trabajo se encuentra dentro del evento Initialize del formulario, esto significa que al momento de abrir el formulario en cada hoja, los datos se mostrarán desde el inicio.

Private Sub UserForm_Initialize()
'
'Declaración de variables
'
Dim strTabla As String
Dim rngMirango As Range
Dim rngMirango2 As Range
Dim intColumnas As Integer

strTabla = "MiTabla"

On Error Resume Next
'
'Creamos el nombre a la tabla de la hoja activa
'
ActiveWorkbook.Names("MiTabla").Delete
Set rngMirango = ActiveSheet.Range("A1").CurrentRegion
Set rngMirango2 = rngMirango.Offset(1, 0).Resize(rngMirango.Rows.Count - 1, _
                                                 rngMirango.Columns.Count)

rngMirango2.Name = strTabla
intColumnas = rngMirango2.Columns.Count
'
'Formateamos ListBox
'
With Lista
    .ColumnCount = intColumnas
    .ColumnWidths = "60 pt;60 pt"
    .ColumnHeads = True
End With
Lista.RowSource = strTabla

On Error GoTo 0

End Sub

Anexos

:: Descargar el ejemplo Mostrar tabla en ListBox dependiendo de la hoja.zip

You may also like...