VBA Cuadro de Lista – Elemento seleccionado
In this Article
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.
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:
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.
Ahora, cuando ejecutamos el formulario, podemos seleccionar más de una opción en el cuadro de lista.
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.
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.
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.
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.
O Podemos ver el valor en la Ventana Inmediata.
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.
En la ventana de Propiedades, cambie el nombre del botón a cmdOK, y cambie el Título y el Acelerador del botón.
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.
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.
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.