VBA Listbox (Cuadro de Lista)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on agosto 17, 2022

Este tutorial demostrará cómo trabajar con Listboxes (Cuadros de Lista) usando VBA.

En VBA, puede crear un Listbox donde un usuario puede elegir una de las opciones de la lista. Los cuadros de lista se utilizan a menudo en los formularios, pero también pueden utilizarse en una hoja de cálculo. En este tutorial, aprenderá a crear, rellenar y eliminar un Listbox. También verá cómo obtener una opción del usuario en VBA y utilizarla en el código.

Si quieres aprender a crear un ComboBox, haz clic aquí: VBA ComboBox

Si quieres aprender a crear un Checkbox, haz clic aquí: VBA Checkbox

Crear un Listbox

Para insertar un Listbox en la Hoja de Trabajo, debe ir a la sección Pestaña de Programador, hacer clic en Insertar y en Controles ActiveX elegir Cuadro de lista :

Insertar Cuadro de Lista

 

Cuando seleccione el Listbox que ha insertado, puede hacer clic en Propiedades en la pestaña Programador:

Ventana de Propiedades del ListBox

 

Aquí puedes establecer diferentes propiedades del Listbox. Para empezar, cambiamos el atributo Name a lstListBox. Ahora, podemos usar el Listbox con este nombre en el código VBA.

Rellenar un Listbox en Código VBA

En primer lugar, tenemos que rellenar el Listbox con valores. En la mayoría de los casos, un Listbox necesita ser rellenado cuando se abre el Libro de Trabajo. Debido a esto, necesitamos poner un código para poblar el Listbox en el objeto Workbook, procedimiento Open. Este procedimiento se ejecuta cada vez que un usuario abre el Libro de Trabajo. Este es el código:

With Hoja1.lstListBox

    .AddItem "John"
    .AddItem "Michael"
    .AddItem "Jennifer"
    .AddItem "Lilly"
    .AddItem "Robert"

End With

Como puedes ver en la Imagen 3, hemos rellenado nuestro Listbox con 5 nombres (John, Michael, Jennifer, Lilly y Robert):

Hoja con ListBox Rellenado

Imagen 3 – Rellenar el ListBox en VBA

 

Rellenar un Listbox desde un Rango de Celdas

Otra forma posible de rellenar un Listbox es dejar que el usuario lo haga. Un Listbox puede estar vinculado a un rango de celdas. Por lo tanto, cada vez que un usuario introduzca un nuevo valor en el rango de celdas, el Listbox se actualizará con ese valor.

Si quieres habilitar esto, tienes que ir a las Propiedades del ListBox y establecer el atributo ListFillRange:

Rellenar ListBox con Rango de Datos

Vinculamos nuestro Listbox con el rango E2:E6, donde ponemos los nombres que queremos (Pedro, Juan, Andrés, Diana, Ana). Como resultado, el Listbox está ahora poblado con estos nombres.

Obtener un Elemento Seleccionado de un Listbox en VBA

El propósito de un Listbox es obtener la elección de un usuario. Para recuperar un valor seleccionado por un usuario, necesitas usar este código:

Dim strSelectedItem As Variant

strSelectedItem = Hoja1.lstListBox.Value

La selección del usuario está en el atributo Value del objeto Hoja1.lstListbox. Este valor se asigna a la variable strSelectedItem:

Obtener Item Seleccionado con VBA

Seleccionamos a Harry en el Listbox y ejecutamos el procedimiento. Como puedes ver en la Imagen 5, el valor del strSelectedItem es Harry, que es el valor que hemos seleccionado. Además, puedes procesar esta variable en el código.

Borrar un Listbox

Para borrar un Listbox en VBA, necesitas utilizar el método Clear del objeto Hoja1.lstListBox. Esto borrará todos los elementos del Listbox. Este es el código:

Sub BorrarListBox()
    Hoja1.lstListBox.Clear
End Sub

(Nota: Si el atributo ListFillRange está activado, el código anterior producirá un error. Tienes que borrar el atributo ListFillRange primero) Cuando ejecutamos el código, obtenemos el Listbox vacío:

ListBox Vacío

 

Usar un Listbox en un UserForm (Formulario)

Como hemos mencionado, el Listbox se utiliza con mayor frecuencia en los UserForms. Para explicar cómo se puede hacer, primero insertaremos un Userform. En el Editor VBA, haga clic con el botón derecho del ratón sobre el nombre del Módulo, haga clic en Insertar y elija UserForm:

Insertar Formulario en VBA

 

Para mostrar los controles de inserción, es necesario activar la Caja de herramientas. Para ello, haga clic en el icono de la caja de herramientas en la barra de herramientas. Después de eso, obtendrá las ventanas con todos los controles disponibles. Puede hacer clic en ListBox para crearlo en el Userform.

Propiedades de ListBox

Llamaremos al ListBox lstListBox. Para rellenarla con valores, necesitamos poner el siguiente código en el método Initialize del objeto UserForm:

Private Sub UserForm_Initialize()
    With UserForm1.lstListBox

        .AddItem "John"
        .AddItem "Michael"
        .AddItem "Jennifer"
        .AddItem "Lilly"
        .AddItem "Robert"

    End With
End Sub

Este código se activa cada vez que un usuario ejecuta el Userform y rellena el Listbox con estos 5 nombres:

Formulario con ListBox Inicializado

Si desea obtener el valor seleccionado del ListBox, necesita utilizar la misma lógica para el Listbox en una Hoja de Trabajo, que se explica anteriormente en el artículo.

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples