VBA Listbox (Cuadro de Lista)
In this Article
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 :
Cuando seleccione el Listbox que ha insertado, puede hacer clic en Propiedades en la pestaña Programador:
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):
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:
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:
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:
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:
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.
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:
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.