Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Llenar Listbox con VBA

| 21 comentarios

¿Qué es un Listbox?

Un cuadro de lista es un elemento de control gráfico que le permite al usuario seleccionar uno o más elementos de una lista contenida dentro de un cuadro de texto estático de varias líneas.

¿Cómo hacer un Listbox en un Userform?

En el siguiente ejemplo mostraremos como pasar una lista de una hoja de excel hacia un Listbox en un formulario de Vba.

1)Tener la lista que se desea  en una hoja de excel (con la estructura como se desea tener en la listbox)
2)Abrir en el excel el visual Basic (alt+f11)
3)Damos clic en insertar y seleccionamos userform
4)En el cuadro de herramientas seleccionamos cuadro lista y lo colocamos encima de la ventana del Userform(Lo ajustamos a un tamaño razonable que muestre los datos de nuestra lista en excel)

Llenar Listbox 2 Llenar Listbox 2

5)Damos doble click en el formulario(userform) para abrir la ventana de codificación.

Llenar Listbox 3 Llenar Listbox 3
6)Cambiamos el evento para esto le damos click al evento Initialize(para que cuando inicie el formulario se cargue los datos de la hoja1)

Llenar Listbox 4 Llenar Listbox 4

7)Empezamos la codificación:

Private Sub Userform_Initialize()

Me.Listbox1.Rowsource= "Hoja1!A2:C11" '(esto es para poner elementos de una hoja hacia nuestro listbox ("Me." hace referencia a nuestra hoja1)en este caso la hoja tiene como nombre Hoja1(Se podría omitir el uso del "Me.")

Me.Listbox1.ColumnCount=3 '(con esto ponemos el número de columnas que queremos que se muestren en el listbox)

Me.Listbox1.ColumnWidths=" 25;100;40" '(Con esto modificamos el ancho de las columnas a medida que nuestro Listbox se vea de una manera ordenada,el 1er valor hace referencia la primera columna ,el 2do a la segunda columna y el 3ro a la tercera columna)

Me.Listbox1.ColumnHeads=True '(esto hace que la listbox tome los titulos de las cabeceras de la lista en excel y los muestre)

 

End Sub

8)Damos F5 para correr la programación y ver nuestro listbox

Llenar Listbox 5 Llenar Listbox 5

Llenar Listbox con VBA

21 comentarios

  1. y si queremos que las opciones desplegadas en el listbox, sea el contenido de una tabla creada manualmente. Por ejemplo Dim a (5) as string. a(0)="hola", a(1)="adios"...

  2. Muy buena explicación, fácil de entender y de realizar. No soy un experto programando, aún estoy iniciando; tuve este problema de cómo llenar un ListBox, había buscado en muchas páginas y todas tenían cosas que no necesitabas y te explicaban cosas que no necesitas saber aún.
    Pero encontré tu publicación y es exactamente lo que necesitaba, sin más ni menos.

    Excelente aporte

  3. hola, muchas gracias, me sirvio mucho, y ahora me surge una duda, si el valor introducido no existe dentro de la tabla que seleccionamos, como advertimos que es un valor no asignado?

  4. BUENAS NOCHES ,TENGO LA SIGUIENTE PREGUNTA,¿SE PUEDE MOSTRAR EL VALOR DE UNA VARIABLE DENTRO DE UN LISTBOX?

  5. una serie de TextBox1...2...3...n, con una serie de valores
    si quiero pasar los datos a variables cambiando los nombres de campo en un bucle for por ejemplo. ¿Cómo se hace?...acompaño planteamiento.

    For a=1 to 100
    Range(1, a)=Textbox_a
    next a

  6. No me funciona "Could not set the RowSource, Invalid property value"

  7. tengo un listbox donde cargo mis datos que estan en una TABLA, cuando digo tabbla hablo de una con nombre y formato tabla. el tema es que los cargo bien, pero deseo poder modificar los datos. yo lo he hecho pero nunca cuando la tabla tiene nombre y forma.

    • Private Sub UserForm_Initialize()
      With ListBox1
      .ColumnCount = 4
      .ColumnWidths = "60 pt;60 pt;70 pt"
      .ColumnHeads = True
      End With
      ListBox1.RowSource = "Tabla1"
      End Sub

  8. Hola.
    Como se puede llenar un Listbox, que esta por ejemplo en la Hoja 2 (sin utilizar formulario), pero sin utilizar la macro genérica, es decir, lo quiero hacer desde el apartado de programación de la misma Hoja 2. Por ejemplo, yo entro en la Hoja 2, al activarse la hoja, llena el listbox con unos datos que están en la Hoja 1, espero haber podido explicarlo bien, y que se entienda.
    No se como llamar una macro que esta integrada en una hoja, el programa solo me deja hacer llamadas a macros que se encuentran en los modulos. Gracias

  9. Tengo una tabla de donde levanto los datos para cargarlos en el listbox (Formato tabla con encabezado) y la propiedad columnheads =true.
    Pero cuando carga los datos no me aparecen los encabezados. Alguien sabe cual puede ser la razon?.Muchas gracias

  10. Buen día
    Tengo un formulario que llena ciertas tablas. Dentro del formulario tengo un listbox que carga la información de la tabla que esta enlazada, lo que quiero es que al ingresar un nuevo dato a esa tabla dentro del mismo formulario donde está el listbox , este se actualice automáticamente , unicamente con los datos que corresponde al consecutivo de este formulario

  11. Así de simple, así de fácil diría un conocido personaje. Gracia

  12. Hola
    Tengo excel 2013
    Veo que se puede usar esto para definir ancho de columnas de los listbox:
    Me.Listbox1.ColumnWidths=" 25;100;40"
    El tema es que yo tengo una sola columna y queria reducirla pero con ese código no pude. Puse :
    Me.ListboxDia.ColumnWidths="5"
    ListboxDia.ColumnWidths=" 5" y no me cambió nada.

    Gracias

    • No te cambiara la columna debido a que solo tienes una, para ajustar el tamaño tienes que cambiar el tamaño completo del listbox, de lo contrario no lo podrás hacer, en otro caso puedes agregar una columna vacía para que te genere dos columnas y la primera puedas cambiar el ancho

  13. Hola.

    tengo una tabla de un club y quiero hacer un formulario para pasar lista. para eso necesito mostrar en el listbox solamente a los socios activos y posteriormente en el formulario filtrar dependiendo de si es clase de adultos o niños.
    ¿Cómo puedo haecr esto?

  14. Buenas, como puede pasar a un listbox solo las columnas que quiera de una tabla, es decir que solo quiero la 1 la 2 y la 4

  15. hola, mi listbox carga bien los datos pero necesito que una de las columnas tenga formato de porcentaje como puedo hacer? gracias de antemano.

  16. Hola , tengo una tabla con 13 columnas se ve perfecto en el lisbox, pero cuando la filtro y pongo Clear, se me borra el colunhead y me aparecen solo 10 columnas.
    If Me.btniniciodeobra.value = True Then
    On Error Resume Next
    uf = hjiniciodeobra.Range("A" & Rows.Count).End(xlUp).Row

    If txtfiltro = "" Then
    Me.LISTA.RowSource = "inicio_de_obra"
    Exit Sub
    End If

    hjiniciodeobra.AutoFilterMode = False
    Me.LISTA = Clear
    Me.LISTA.RowSource = Clear

    Me.LISTA.ColumnCount = 13
    Me.LISTA.ColumnHeads = True

    For fila = 10 To uf
    lote = hjiniciodeobra.Cells(fila, 2).value 'Variable para LOTE
    visado = hjiniciodeobra.Cells(fila, 8).value 'Variable para VISADO
    inicio = hjiniciodeobra.Cells(fila, 12).value 'Variable para INICIO

    If UCase(lote) Like "*" & UCase(txtfiltro.value) & "*" Then

    Me.LISTA.AddItem
    Me.LISTA.List(X, 0) = hjiniciodeobra.Cells(fila, 1).value
    Me.LISTA.List(X, 1) = hjiniciodeobra.Cells(fila, 2).value
    Me.LISTA.List(X, 2) = hjiniciodeobra.Cells(fila, 3).value
    Me.LISTA.List(X, 3) = hjiniciodeobra.Cells(fila, 4).value
    Me.LISTA.List(X, 4) = hjiniciodeobra.Cells(fila, 5).value
    Me.LISTA.List(X, 5) = hjiniciodeobra.Cells(fila, 6).value
    Me.LISTA.List(X, 6) = hjiniciodeobra.Cells(fila, 7).value
    Me.LISTA.List(X, 7) = hjiniciodeobra.Cells(fila, 8).value
    Me.LISTA.List(X, 8) = hjiniciodeobra.Cells(fila, 9).value
    Me.LISTA.List(X, 9) = hjiniciodeobra.Cells(fila, 10).value
    Me.LISTA.List(X, 10) = hjiniciodeobra.Cells(fila, 11).value
    Me.LISTA.List(X, 11) = hjiniciodeobra.Cells(fila, 12).value
    Me.LISTA.List(X, 12) = hjiniciodeobra.Cells(fila, 13).value

    X = X + 1

    ' '----------------------------------------------------------------------------------
    'He añadido todo este fragmento para que me busque al mismo tiempo por visado.
    End If
    If UCase(visado) Like "*" & UCase(txtfiltro.value) & "*" Then
    Me.LISTA.AddItem
    Me.LISTA.List(X, 0) = hjiniciodeobra.Cells(fila, 1).value
    Me.LISTA.List(X, 1) = hjiniciodeobra.Cells(fila, 2).value
    Me.LISTA.List(X, 2) = hjiniciodeobra.Cells(fila, 3).value
    Me.LISTA.List(X, 3) = hjiniciodeobra.Cells(fila, 4).value
    Me.LISTA.List(X, 4) = hjiniciodeobra.Cells(fila, 5).value
    Me.LISTA.List(X, 5) = hjiniciodeobra.Cells(fila, 6).value
    Me.LISTA.List(X, 6) = hjiniciodeobra.Cells(fila, 7).value
    Me.LISTA.List(X, 7) = hjiniciodeobra.Cells(fila, 8).value
    Me.LISTA.List(X, 8) = hjiniciodeobra.Cells(fila, 9).value
    Me.LISTA.List(X, 9) = hjiniciodeobra.Cells(fila, 10).value
    Me.LISTA.List(X, 10) = hjiniciodeobra.Cells(fila, 11).value
    Me.LISTA.List(X, 11) = hjiniciodeobra.Cells(fila, 12).value
    Me.LISTA.List(X, 12) = hjiniciodeobra.Cells(fila, 13).value

    X = X + 1
    End If

  17. hola buen dia estoy programado un registro de
    formulario ,estoy intentando mostralo en una lista
    estoy usando esde comandito ColumnCount
    y me manda este error

    Error de compilacion:
    No se encontro el metodo o el dato miembro

    ya hise un archivo antes y corre normal
    en la misma hoja quiero repetir el programita
    y no lo reconoce el comando ColumnCount

  18. hola buen dia estoy programado un registro de
    formulario ,estoy intentando mostralo en una lista
    estoy usando esde comandito ColumnCount
    y me manda este error

    Error de compilacion:
    No se encontro el metodo o el dato miembro

    ya hise un archivo antes y corre normal
    en la misma hoja quiero repetir el programita
    y no lo reconoce el comando ColumnCount

    Private Sub UserForm_Activate()

    Me.txt_lista.RowSource = "Tabla1"
    Me.txt_lista.ColumnCount = 5
    facturas.Height = 210

    End Sub

  19. Me gustó mucho de vera se merecen 10 estrella ayer probé este y de vera me salió haci mismo..

    Muy buena explicación

Deja una respuesta

Los campos requeridos estan marcados con *.