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.
Ver video Mostrar tabla en ListBox
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
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.
-
Si el archivo tiene varias hojas, el formulario tomará los datos de la tabla que comience en A1 y transpostará los datos al ListBox.
-
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.
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