La propiedad MultiSelect en Excel VBA permite a un usuario seleccionar varios elementos en un cuadro de lista. El formulario de usuario que se va a crear un aspecto de la siguiente manera:

Multiple List Box Selections in 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 es visible, haga clic en Ver, Explorador de proyectos.

  2. Haga clic en Insertar, formulario de usuario. Si el cuadro de herramientas no aparece automáticamente, haga clic en Ver, Caja de herramientas. Su pantalla debe ser configurado de la siguiente manera.

Userform Screen Setup in Excel VBA

  1. Añadir los cuadros de lista (primero a la izquierda, el segundo a la derecha), botones de comando, casillas de verificación (primero a la izquierda, el segundo a la derecha), y los botones del marco de opciones (primero en la parte superior, el segundo por debajo la primera, y así sucesivamente). Una vez que esto se ha completado, el resultado debe ser consistente con la imagen del formulario de usuario mostrado anteriormente. Por ejemplo, crear una lista de control de la caja haciendo clic en ListBox de la caja de herramientas. A continuación, puede arrastrar un cuadro de lista en el formulario de usuario. Cuando llegue al marco de la ‘Seleccionar tipo’, recuerda dibujar este marco primero antes de colocar los tres botones de opción en el mismo.

  2. Puede cambiar los nombres y los títulos de los controles. Los nombres se utilizan en el código VBA Excel. Los títulos son los que aparecen en la pantalla. Es una buena práctica para cambiar los nombres de los controles, pero no es necesario en este caso, porque sólo tenemos unos pocos controles en este ejemplo. Para cambiar el título del formulario de usuario, botones de comando, casillas de verificación, botones del marco y de opciones, haga clic en Ver, Ventana Propiedades y haga clic en cada control.

  3. Para mostrar el formulario de usuario, coloque un botón de comando en la hoja de trabajo y agregue la línea siguiente código:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

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

  1. Abra el Editor de Visual Basic.

  2. En el Explorador de proyectos, haga clic en UserForm1 y haga clic en Ver código.

  3. En primer lugar, declarar la variable i de tipo entero. Declarar la variable en la sección de declaraciones generales (en la parte superior del código). De esta manera es suficiente para declarar la variable de una vez y se puede utilizar en múltiples sustituciones.

Dim i As Integer
  1. Elija formulario de usuario de la lista desplegable izquierda. Inicializar elegir de la lista desplegable de la derecha.

  2. Añadir 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 establece como predeterminado.

Ahora hemos creado la primera parte del formulario de usuario. A pesar de que se ve bien ya, no pasará nada sin embargo, cuando hacemos clic en los botones de comando o los otros controles.

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

  2. Haga doble clic en el botón Añadir.

  3. Añadir 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: bucles Excel VBA a través del primer cuadro de lista (número de índice de la lista de cero (0) para el primer elemento de la lista) y, si se selecciona, añade el artículo al segundo cuadro de lista.

  1. Haga doble clic en el botón Quitar.

  2. 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.

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

  2. Añadir las siguientes líneas de código:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0

ListBox2.MultiSelect = 0

End Sub
  1. Haga doble clic en el segundo botón de opción.

  2. Añadir las siguientes líneas de código:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1

ListBox2.MultiSelect = 1

End Sub
  1. Doble click en el botón tercera opción.

  2. Añadir las siguientes líneas de código:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2

ListBox2.MultiSelect = 2

End Sub

Explicación: el ajuste ‘Seleccionar tipo’ se puede elegir haciendo clic en los botones de opción. La imagen del formulario de usuario mostrado anteriormente da una descripción de cada ajuste. En lugar de configurar esta opción en tiempo de ejecución, también se puede realizar el ajuste en tiempo de diseño. Para lograr esto, haga clic derecho del ratón sobre un control de cuadro de lista y, a continuación, haga clic en Propiedades. Establecer la propiedad MultiSelect a 0 – fmMultiSelectSingle, 1 – fmMultiSelectMulti o 2 – fmMultiSelectExtented.

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

  2. Añadir 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: marcando la casilla de verificación en primer lugar, todos los elementos del primer cuadro de lista se puede seleccionar / deseleccionar.

  1. Doble click en la segunda casilla de verificación para agregar las mismas líneas de código.

Sólo reemplace CheckBox1 con CheckBox2 y ListBox1 con ListBox2.