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

Varias selecciones de cuadro de lista en Excel VBA

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. Haga clic en Insertar, formulario de usuario. Si la Caja de herramientas no aparece automáticamente, haga clic en Ver, Caja de herramientas. Su pantalla debe configurarse como se muestra a continuación.

Configuración de pantalla de formulario de usuario en Excel VBA

3. Agregue los cuadros de lista (primero a la izquierda, el segundo a la derecha), botones de comando, casillas de verificación (primero a la izquierda, segundo a la derecha), marcos y botones de opción (primero en la parte superior, el segundo debajo el primero, y así sucesivamente). Una vez que se haya completado, el resultado debe ser coherente con la imagen del formulario de usuario que se mostró anteriormente. Por ejemplo, cree un control de cuadro de lista haciendo clic en ListBox en el cuadro de herramientas. A continuación, puede arrastrar un cuadro de lista en el formulario de usuario. Cuando llegue al marco 'Seleccionar tipo', recuerde dibujar este marco primero antes de colocar los tres botones de opción en él.

4. Puede cambiar los nombres y los títulos de los controles. Los nombres se utilizan en el código de Excel VBA. Los subtítulos son los que aparecen en su pantalla. Es una buena práctica cambiar los nombres de los controles, pero no es necesario aquí porque solo tenemos unos pocos controles en este ejemplo. Para cambiar el título del formulario 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 agregue la siguiente línea de código:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Ahora vamos a crear el Sub UserForm_Initialize. Cuando utilice el método Show para el formulario de usuario, este sub se ejecutará automáticamente.

6. Abra el Editor de Visual Basic .

7. En el Explorador de proyectos, haga clic con el botón derecho en UserForm1 y luego haga clic en Ver código.

8. Primero, declare la variable i de tipo Integer. Declare la variable en la sección Declaraciones generales (en la parte superior del código). De esta manera, solo tiene que declarar la variable una vez y puede usarlas en múltiples subs.

Dim i As Integer

9. Elija Userform de la lista desplegable de la izquierda. Elija Inicializar en la lista desplegable de la derecha.

10. Agregue las siguientes líneas de código:

Private Sub UserForm_Initialize()

With ListBox1
    .AddItem "Sales"
    .AddItem "Production"
    .AddItem "Logistics"
    .AddItem "Human Resources"
End With

OptionButton3.Value = True

End Sub

Explicación: el primer cuadro de lista se llenará y el tercer botón de opción se establecerá como predeterminado.

Ahora hemos creado la primera parte del formulario de usuario. Aunque ya se ve bien, no pasará nada cuando hagamos clic en los botones de comando o en los otros controles.

11. En el Explorador de proyectos, haga doble clic en UserForm1.

12. Haga doble clic en el botón Agregar.

13. Agregue las siguientes líneas de código:

Private Sub CommandButton1_Click()

For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)
Next i

End Sub

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

14. Haga doble clic en el botón Eliminar.

15. Agregue las siguientes líneas de código:

Private Sub CommandButton2_Click()

Dim counter As Integer
counter = 0

For i = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(i - counter) Then
        ListBox2.RemoveItem (i - counter)
        counter = counter + 1
    End If
Next i

CheckBox2.Value = False

End Sub

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

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

17. Agregue las siguientes líneas de código:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0
ListBox2.MultiSelect = 0

End Sub

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

19. Agregue las siguientes líneas de código:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1
ListBox2.MultiSelect = 1

End Sub

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

21. Agregue las siguientes líneas de código:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2
ListBox2.MultiSelect = 2

End Sub

Explicación: la configuración 'Seleccionar tipo' se puede elegir haciendo clic en los botones de opción. La imagen del formulario de usuario que se mostró anteriormente ofrece una descripción de cada configuración. En lugar de configurar esta opción en tiempo de ejecución, también puede configurar esta opción en tiempo de diseño. Para lograr esto, haga clic con el botón derecho del mouse en un control de cuadro de lista y luego haga clic en Propiedades. Establezca la propiedad MultiSelect en 0 - fmMultiSelectSingle, 1 - fmMultiSelectMulti o 2 - fmMultiSelectExtented.

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

23. Agregue las siguientes líneas de código:

Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then
    For i = 0 To ListBox1.ListCount - 1
        ListBox1.Selected(i) = True
    Next i
End If

If CheckBox1.Value = False Then
    For i = 0 To ListBox1.ListCount - 1
        ListBox1.Selected(i) = False
    Next i
End If

End Sub

Explicación: al marcar la primera casilla de verificación, se pueden seleccionar / deseleccionar todos los elementos de la primera casilla de lista.

24. Haga doble clic en la segunda casilla de verificación para agregar las mismas líneas de código. Solo reemplace CheckBox1 con CheckBox2 y ListBox1 con ListBox2.

5/11 Completado! Obtenga más información sobre los formularios de usuario>
Siguiente capítulo: Rango