Múltiples selecciones de casillas de listas

La propiedad MultiSelect en Excel VBA permite al usuario seleccionar varios elementos en un cuadro de lista. La forma de usuario que vamos a crear tiene el siguiente aspecto:

Para crear este formulario de usuario, ejecute los siguientes pasos.

1. Abra el Editor de Visual Basic. Si el Explorador de Proyectos no está visible, haga clic en Ver, Explorador de Proyectos.

2. 2. Haga clic en Insertar, Formulario de usuario. 3. Si la Caja de herramientas no aparece automáticamente, haga clic en Ver, Caja de herramientas. La pantalla debe configurarse como se indica a continuación.

3. Añade las casillas de lista (la primera a la izquierda, la segunda a la derecha), los botones de comando, las casillas de verificación (la primera a la izquierda, la segunda a la derecha), el marco y los botones de opción (la primera arriba, la segunda abajo de la primera, y así sucesivamente). Una vez que esto se haya completado, el resultado debe ser coherente con la imagen del Userform mostrada anteriormente. Por ejemplo, cree un control de cuadro de lista haciendo clic en ListBox desde la Caja de Herramientas. A continuación, puede arrastrar un cuadro de lista en el Userform. Cuando llegues al cuadro «Seleccionar tipo», recuerda dibujar este cuadro primero antes de colocar los tres botones de opción en él.

4. Puedes cambiar los nombres y los títulos de los controles. Los nombres se usan en el código VBA de Excel. Los subtítulos son los que aparecen en la pantalla. Es una buena práctica cambiar los nombres de los controles, pero no es necesario aquí porque sólo tenemos unos pocos controles en este ejemplo. Para cambiar la leyenda de la forma de usuario, los botones de comando, las casillas de verificación, el marco y los botones de opción, haga clic en Ver, Ventana de propiedades y haga clic en cada control.

5. Para mostrar el formulario de usuario, coloque un botón de comando en su hoja de trabajo y añada la siguiente línea de código:

Soldado Sub Sub CommandButton1_Click() Formulario de usuario1.Show End Sub

Ahora vamos a crear el Sub UserForm_Initialize. Al usar el método Show para el Userform, este sub se ejecutará automáticamente.

6. Abre el Editor de Visual Basic.

7. En el Explorador del Proyecto, haga clic con el botón derecho en UserForm1 y luego haga clic en View Code.

8. Primero, declare la variable i de tipo Entero. Declare la variable en la sección de Declaraciones Generales (en la parte superior del código). De esta manera sólo tienes que declarar la variable una vez y puedes usarlas en múltiples sub.

Dim i As Integer

9. Elija Formulario de usuario en la lista desplegable de la izquierda. 10. Seleccione Inicializar en la lista desplegable de la derecha.

10. Añade las siguientes líneas de código:

Private Sub UserForm_Initialize() Con ListBox1 …artículo adicional «Ventas»… …AddItem «Producción»… …elemento adicional «Logística»… …AddItem «Recursos Humanos» Termina con OptionButton3.Value = True End Sub

Explicación: la primera casilla de la lista se rellenará y el botón de la tercera opción se establece como predeterminado.

Hemos creado la primera parte de la forma de usuario. Aunque ya se ve bien, no pasará nada aún cuando hagamos clic en los botones de comando o en los otros controles.

11. En el Explorador del Proyecto, haga doble clic en UserForm1.

12. Doble clic en el botón Agregar.

13. Añade las siguientes líneas de código:

Soldado Sub Sub CommandButton1_Click() Para i = 0 Para ListBox1.ListCount – 1 Si ListBox1.Selected(i) = True entonces ListBox2.AddItem ListBox1.List(i) Siguiente… End Sub

Explicación: Excel VBA pasa por el primer cuadro de lista (número de índice de lista de cero (0) para el primer elemento de la lista) y, si se selecciona, añade el elemento al segundo cuadro de lista.

14. 14. Haga doble clic en el botón «Remove».

15. Añade las siguientes líneas de código:

Soldado Sub Sub CommandButton2_Click() Contador de Dim Dim como Entero contador = 0 Para i = 0 Para ListBox2.ListCount – 1 Si ListBox2.Seleccionado(i – contador) Entonces ListBox2.RemoveItem (i – counter) contador = contador + 1 Finalizar si Siguiente… CheckBox2.Value = Falso End Sub

Explicación: Excel VBA pasa por el segundo cuadro de lista y, si se selecciona, elimina el elemento. La variable del contador lleva un registro del número de elementos eliminados.

16. Haga doble clic en el botón de la primera opción.

17. Añade las siguientes líneas de código:

Sub opción privadaBotón1_Click() ListBox1.MultiSelect = 0 ListBox2.MultiSelect = 0 End Sub

18. Haga doble clic en el botón de la segunda opción.

19. Añade las siguientes líneas de código:

Sub opción privadaBotón2_Click() ListBox1.MultiSelect = 1 ListBox2.MultiSelect = 1 End Sub

20. Haga doble clic en el botón de la tercera opción.

21. Añade las siguientes líneas de código:

Sub opción privadaBotón3_Click() ListBox1.MultiSelect = 2 ListBox2.MultiSelect = 2 End Sub

Explicación: el ajuste «Seleccionar tipo» puede ser elegido haciendo clic en los botones de opción. La imagen de la forma de usuario mostrada anteriormente da una descripción de cada ajuste. En lugar de configurar este ajuste en tiempo de ejecución, también puede configurar este ajuste en tiempo de diseño. Para ello, haz clic con el botón derecho del ratón en un control de cuadro de lista y luego haz clic en Propiedades. Configura la propiedad MultiSelect en 0 – fmMultiSelectSingle, 1 – fmMultiSelectMulti o 2 – fmMultiSelectExtented.

22. Haga doble clic en la primera casilla de verificación.

23. Añade las siguientes líneas de código:

Private Sub CheckBox1_Click() Si CheckBox1.Value = True entonces Para i = 0 Para ListBox1.ListCount – 1 ListBox1.Selected(i) = True Siguiente… Finalizar si Si CheckBox1.Value = False entonces Para i = 0 Para ListBox1.ListCount – 1 ListBox1.Selected(i) = Falso Siguiente… Finalizar si End Sub

Explicación: marcando la primera casilla de verificación, todos los elementos de la primera lista pueden ser seleccionados / deseleccionados.

24. Haga doble clic en la segunda casilla de verificación para añadir las mismas líneas de código. Sólo sustituye el CheckBox1 por el CheckBox2 y el ListBox1 por el ListBox2.

Deja un comentario