Luego de haber visto el uso y aplicación del botón de Combo Box o Cuadro combinado, vamos a contemplar ahora el uso del botón de Cuadro de Lista en un formulario de usuario.
Así como el Cuadro combinado permite añadir un conjunto de datos (items) para formar una lista de elementos, igualmente un Cuadro de lista o List Box permite añadir items para formar una lista.
¿En qué se diferencian? Luego de disponer de una lista en un cuadro combinado, podemos seleccionar a uno de ellos y realizar alguna acción.
En el caso del cuadro combinado, la selección es única; es decir, sólo se puede seleccionar un elemento de la lista. Sin embargo, el cuadro de lista permite seleccionar más de un elemento de la lista; pueden ser elementos consecutivos o discontinuos. Para ello dispone de la propiedad MultiSelect la que puede ser extendida o no. Nos toca ver ahora, a los botones de control de cuadro de lista.
Cargue a memoria el Excel y usando [Alt]+F11 vaya al editor e inserte un [Formulario de usuario].
En la ventana de propiedades haga clic en su [Name] y digite FrmLista01. En su [Caption] digite “Manejo de cuadro de lista 1”, por poner un título cualquiera.
Primer ejemplo
Nuestro ejemplo debe realizar las siguientes acciones:
- Cargar los nombres de los meses desde una hoja hacia un cuadro de lista
- Seleccionar un elemento cualquiera de esta lista haciendo clic en él
- Guardar el nombre seleccionado en un cuadro de texto
- Si se desea repetir, debemos borrar el contenido del cuadro de texto y la lista
Para ello insertaremos los botones de:
- Cuadro de lista y lo desplegamos hacia debajo de forma que se tenga un cuadro de 12 por 10. Que su [Name] sea LstMeses. En la ventana de propiedades, [MultiSelect], 0 fmMultiSelectSingle (Permite seleccionar sólo un elemento de la lista).
- Un botón de comando. Su [Name], CmdLoad, su [Caption], Cargar lista
- Un segundo botón de comando, debajo del anterior. Su [Name], CmdOk, su [Caption[, Ok
- Un cuadro de texto. Su [Name], TxtCopia
- Un tercer botón de comando. Su [Name], CmdNuevo, su [Caption], Nuevo
- Un cuarto botón de comando. Su [Name], CmdFin, su [Caption], Salir
La primera imagen adjunta muestra cómo debe quedar el formulario.
Codifiquemos:
Doble clic en el botón [Salir]: Insertar la sentencia End. Debe quedar así:
Private Sub CmdFin_Click()
End
End Sub
Doble clic en el botón [Cargar lista]: Al hacer clic en este botón, se debe cargar el cuadro de lista LstMeses, copiando los datos de la primera Hoja del Excel, desde las celdas B3 hasta B14. Esto lo haremos usando la sentencia: For i = 1 to 12. En cada paso se cargará el contenido de Cells(i+2,2) hacia el cuadro de lista LstMeses.
El código debe ser el siguiente:
Private Sub CmdLoad_Click()
Sheets(1).Select
For i = 1 To 12
LstMeses.AddItemCells(i + 2, 2)
Next
End Sub
Ahora debemos seleccionar un elemento del cuadro de lista LstMeses haciendo clic en dicho elemento. El procedimiento Clic, correspondiente al botón Ok, debe transferir el elemento seleccionado de la lista LstMeses hacia el cuadro de texto TxtCopia. Por ello, el contenido del procedimiento correspondiente al botón Ok es
Private Sub CmdOk_Click()
TxtCopia.Text = LstMeses.List(LstMeses.ListIndex)
End Sub
Con esto es suficiente para realizar lo que deseamos. Sin embargo, si se quiere volver a repetir el proceso, debemos limpiar el cuadro de texto y la lista (aunque la lista puede quedarse cargada).
Como estas dos acciones se debe realizar al hace clic en el botón
Private Sub CmdNuevo_Click()
TxtCopia.Text = ""
LstMeses.Clear
End Sub
Ahora sí ya está completo el ejemplo. Grabe su libro como MisFormularios04 habilitado para macros.
Segundo ejemplo
El siguiente ejemplo será similar al primero, por ello tendrá los mismos botones, solo que en esta ocasión tendremos la capacidad de seleccionar más de un elemento para ser transferidos ya no hacia un cuadro de texto sino hacia un combo box para tener una sublista. La selección puede realizarse con elementos secuenciales o no, usando la tecla [Control].
Empecemos:
Estando en el editor del VBA, inserte un nuevo formulario. Que su [Name] sea FrmLista02 y su [Caption], “Manejo de cuadro de lista 2”.
Inserte los siguientes botones en este formulario:
- Un cuadro de lista, desplegado hacia abajo con un ancho de 12 y 10 filas. Su [Name] LstLista. Su propiedad [MultiSelect], 2 fmMultiSelectExtended (para seleccionar varios elementos).
- Un botón de comando a su derecha. Su [Name], CmdLad; su [Caption], Cargar lista.
- Debajo de él, un botón de comando. Su [Name], CmdTransf; su [Caption], Transferir.
- Cuatro líneas por debajo del cuadro de lista, un combo box, su [Name], CboLista.
- En las últimas líneas y debajo del anterior, un botón de comando. Su [Name], CmdNuevo; su [Caption], Nueva selección.
- A la derecha y en la misma línea, un botón de comando. Su [Name], CmdFin; su [Caption], Salir.
Una imagen de este formulario se muestra en la segunda imagen adjunta.
Programemos estos objetos:
Doble clic en el objeto
Doble clic en el objeto
Esto significa que el contenido de la i-ésima fila, de la columna dos de la hoja activa, será añadido a la lista. El procedimiento completo es:
Private Sub CmdLoad_Click()
Sheets(1).Select
For i = 1 To 12
LstLista.AddItem Cells(i + 2, 2)
Next
End Sub
Doble clic en el objeto [Transferir]. Al hacer clic en este botón, todos los elementos seleccionado en LstLista deberán ser añadidos al combo box CboLista. La cantidad de iems a ser añadidos serán todos aquellos que han sido seleccionados.
¿Y como saber quiénes son los seleccionados? Cada elemento que fue seleccionado, modificó su propiedad [Selected] pasando de
De manera que, como la lista añadida contiene 12 elementos, haremos uso del For … Next para transferir todos los elementos con la propiedad True. Ello lo sabremos mediante la sentencia If.
El código de este botón es el siguiente:
Private Sub CmdTransf_Click()
For i = 0 To 11
If LstLista.Selected(i) Then
CboLista.AddItem LstLista.List(i)
End If
Next
End Sub
Una cosa más que no se ha comentado: Tanto en los Combo Box como en los List Box, la lista siempre empieza con su índice en 0.
De manera que cuando se carga datos a dicha lista, el primer elemento estará en la posición 0 y el último en la posición n-1, si se han cargado n elementos.
Finalmente debemos programar el botón [Nuevo]. Puesto que es posible que tuviéramos que realizar otra selección, necesitamos limpiar la lista en el CboLista. Igualmente podríamos limpiar también la lista en el cuadro de lista; sin embargo, solo limpiaremos el combo box. Por esta razón el procedimiento del botón [Nuevo] es
Private Sub CmdNuevo_Click()
CboLista.Clear
End Sub
Las dos siguientes imágenes muestran estos formularios
Ahora guarde su libro. Ya tiene nombre y si no, debe ser MisFormularios04, habilitado para macros.
En la siguiente sección realizaremos una aplicación de estos dos botones de lista.
Estos dos formularios se encuentran en el archivo MisFormularios04.xlsm que puede acceder haciendo clic aquí
Para pasar a la siguiente sesión, haga clic aquí