VBA Cuadro de Lista – Elemento seleccionado

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on abril 6, 2022

Este artículo demostrará cómo trabajar con el elemento seleccionado en un Cuadro de Lista en Excel VBA.

Los cuadros de lista muestran una lista de opciones a los usuarios, permitiéndoles seleccionar uno o más de los elementos. Se utilizan en gran medida en los formularios VBA, pero también se pueden utilizar dentro de su hoja de cálculo de Excel.

Crear un Cuadro de Lista en un Formulario VBA

Para crear un cuadro de lista en un formulario VBA, primero necesitamos crear el Formulario.

Una vez que haya creado su formulario, seleccione el control List Box en la caja de herramientas y luego arrastre para crear un cuadro de lista en su formulario.

Cuadro de lista

 

Añadir valores al  Cuadro de Lista

En el evento Initialize del formulario, escriba el siguiente código. El cuadro de lista recogerá los valores almacenados en un rango de celdas de la hoja de cálculo de Excel.

Private Sub UserForm_Initialize()
  Dim rng As Range
  For Each rng In Range("A1:A20")
        Me.lEstados.AddItem rng.Value
  Next rng
End Sub

Cuando ejecutamos el formulario, el cuadro de lista se mostrará como se demuestra en la imagen siguiente:

Ejecutar formulario con listbox

Seleccionar valores del cuadro de lista

Por defecto, se puede seleccionar un solo valor en un cuadro de lista en un formulario de usuario. Sin embargo, esto se puede modificar cambiando la propiedad Multi-Select del cuadro de lista. Haga clic en el cuadro de lista para seleccionarlo y, a continuación, en la ventana de propiedades, cambie la propiedad Multi-Select de 0-frmMultiSelectSingle a 1-frmMultiSelectMulti.

Listbox multiselect multi

Ahora, cuando ejecutamos el formulario, podemos seleccionar más de una opción en el cuadro de lista.

Ejecutar formulario listbox multi

Si cambiamos la opción a 2-frmMultiSelectExtended, significa que podemos seleccionar uno de los valores, y luego, manteniendo pulsada la tecla SHIFT, seleccionar otro valor más abajo en la lista, y todos los elementos entre los 2 valores seleccionados también serán seleccionados.

Ejecutar formulario listbox extendido

Trabajar con los valores seleccionados en VBA

Dependiendo del tipo de opción que hayamos utilizado para la propiedad Multi-Select en el Cuadro de Lista, existen varias formas de utilizar el valor o los valores seleccionados en el cuadro de lista en el Código VBA.

Asignando el valor a una variable

Podemos utilizar el evento After_Update del cuadro de lista para asignar el valor seleccionado a una variable. En primer lugar, vamos a crear una variable a nivel de módulo en la parte superior del módulo del formulario. Debajo de las palabras, Option Explicit, cree la siguiente variable de cadena.

Dim strState as String

Una vez que hayamos creado esta variable, podemos hacer doble clic en el cuadro de lista para ir al código detrás del formulario, o podemos hacer clic en el botón de código en el Editor VBE. El evento de clic del cuadro de lista se creará automáticamente. Seleccione el Evento After_Update de la lista de Procedimientos disponibles.

Eventos disponibles listbox

En el evento After_Update, escriba el siguiente código:

Private Sub lstState_AfterUpdate()
  strState = Me.lstState
End Sub

NOTA: Puede eliminar el evento Click ya que no es necesario. Ahora, si ejecutamos el formulario y hacemos clic en el cuadro de lista, el valor seleccionado se almacenará en la variable. Para probar esto, podemos poner un punto BREAK en el código.

AfterUpdate Debug

Ahora, cuando ejecutamos el formulario, si hacemos clic en el cuadro de lista, el código entrará en modo DEBUG y se detendrá en nuestro punto de interrupción. Si a continuación pulsamos F8 en el teclado para avanzar un paso más en el código, la variable se rellenará con el elemento seleccionado en la lista. Podemos ver este valor apoyando el ratón sobre la variable.

AfterUpdate Debug f8

O Podemos ver el valor en la Ventana Inmediata.

AfterUpdate Debug f8 inmediato

Utilizar un botón de comando para devolver el valor a Excel

En primer lugar, creamos un botón de comando en el formulario para disponer de un botón OK que devuelva a Excel el valor o valores seleccionados en el cuadro de lista. Selecciona el control Botón de Comando, y luego haz clic y arrastra en tu formulario para crear el botón.

Boton de comando

En la ventana de Propiedades, cambie el nombre del botón a cmdOK, y cambie el Título y el Acelerador del botón.

Propiedades boton de comando

El propósito del Acelerador es que el usuario utilice el teclado para activar el botón, en este caso Alt+O activaría el botón.

VBAControls Button Accelerator

Para que el botón de comando funcione, necesitamos añadir código detrás de él para que cuando se haga clic en el botón, se ejecute el código. Esto se llama el evento Click del botón. Para llegar al evento clic, haz doble clic en el botón en la vista de diseño del formulario. El evento clic se creará automáticamente, ya que es el evento más utilizado para los botones de comando. Escriba el siguiente código en el evento click del botón de comando.

Private Sub cmdOK_Click()
  Range("E1") = strState
End Sub

El código recogerá la variable que declaramos en el evento After_Update del Cuadro de Lista y devolverá el valor al Range en Excel. Alternativamente, podemos recoger el valor directamente del Cuadro de Lista sin usar una variable.

Private Sub cmdOK_Click()
  Range("E1") = me.lstState
End Sub

Cuando ejecutamos el formulario, el valor seleccionado será devuelto a Excel cuando hagamos clic en el botón Aceptar.

Uso de boton de comando

Seleccionar varios valores

Si hemos configurado la propiedad multiselección del cuadro de lista a 1 o 2 que nos permite seleccionar múltiples valores en la lista, entonces el código para seleccionar estos valores es ligeramente diferente. El evento After_Update ya no se dispara cuando se seleccionan los valores en el cuadro de lista – por lo tanto no podemos utilizar este evento. Todavía podemos utilizar el evento de clic del botón de comando, pero necesitamos hacer un bucle a través de los valores seleccionados en el cuadro de lista para devolverlos a Excel. En el evento Click del botón de comando, escriba el siguiente código.

Private Sub cmdOK_Click()
  Dim x As Integer
  Range("E1").Select
  For x = 0 To Me.lEstados.ListCount - 1
     If Me.lEstados.Selected(x) = True Then
        ActiveCell = Me.lEstados.List(x)
        ActiveCell.Offset(1, 0).Select
     End If
  Next x
End Sub

Ahora, cuando ejecutemos el formulario, sólo los valores seleccionados serán devueltos a la hoja de Excel.

Seleccion multiple listbox

 

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