La proprietà MultiSelect in Excel VBA consente a un utente di selezionare più elementi in una casella di riepilogo. Il form ci accingiamo a creare look come segue:

Multiple List Box Selections in Excel VBA

Per creare questo form, eseguire i seguenti passaggi.

  1. Aprire il Visual Basic Editor. Se il progetto Explorer non è visibile, fare clic su Visualizza, progetti.

  2. Fare clic su Inserisci, Userform. Se la Casella degli strumenti non viene visualizzata automaticamente, fare clic su Visualizza, Strumenti. Lo schermo dovrebbe essere impostato come di seguito.

Userform Screen Setup in Excel VBA

  1. Aggiungere le caselle di riepilogo (primo a sinistra, il secondo a destra) pulsanti di comando, caselle di controllo, (primo a sinistra, il secondo a destra), pulsanti di telaio e di opzione (prima in alto, il secondo sotto il primo, e così via). Una volta che questo è stato completato, il risultato deve essere coerente con l’immagine del Userform mostrato in precedenza. Ad esempio, creare un elenco di controllo di dialogo facendo clic sul ListBox dalla Casella degli strumenti. Successivamente, è possibile trascinare una casella di riepilogo sopra il Form utente. Quando si arriva al telaio del ‘Seleziona tipo’, ricordatevi di disegnare questo fotogramma prima prima di inserire i tre pulsanti di opzione a esso.

  2. È possibile modificare i nomi e le didascalie dei controlli. I nomi sono utilizzati nel codice VBA di Excel. Le didascalie sono quelli che appaiono sullo schermo. È buona norma cambiare i nomi dei controlli, ma non è necessario qui perché abbiamo solo un paio di controlli in questo esempio. Per modificare la didascalia del form, pulsanti di comando, caselle di controllo, pulsanti di telaio e di opzione, fare clic su Visualizza, Proprietà finestra e fare clic su ogni controllo.

  3. Per mostrare il form, inserire un pulsante di comando nel foglio di lavoro e aggiungere la riga di codice seguente:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Ora stiamo andando a creare l’UserForm_Initialize Sub. Quando si utilizza il metodo Show per il form, verrà automaticamente eseguito questo sub.

  1. Aprire il Visual Basic Editor.

  2. In Esplora progetti, fare clic destro su UserForm1 e quindi fare clic su Visualizza codice.

  3. In primo luogo, dichiarare la variabile i di tipo intero. Dichiarare la variabile nella sezione dichiarazioni generali (nella parte superiore del codice). In questo modo si hanno solo per dichiarare la variabile una sola volta e si può usare in più subs.

Dim i As Integer
  1. Scegliere Userform dall’elenco a discesa sinistra. Scegli inizializzazione dall’elenco a discesa a destra.

  2. Aggiungere le seguenti righe di codice:

Private Sub UserForm_Initialize()

With ListBox1

.AddItem "Sales"

.AddItem "Production"

.AddItem "Logistics"

.AddItem "Human Resources"

End With

OptionButton3.Value = True

End Sub

Spiegazione: la prima casella di riepilogo verrà riempita e il pulsante terza opzione è impostata come predefinita.

Abbiamo creato la prima parte del form utente. Anche se sembra già ordinato, nulla accadrà ancora quando si clicca sui pulsanti di comando o gli altri controlli.

  1. In Esplora progetti, fare doppio clic su UserForm1.

  2. Fare doppio clic sul pulsante Aggiungi.

  3. Aggiungere le seguenti righe di codice:

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

Spiegazione: loop Excel VBA attraverso la casella prima lista (numero di indice elenco di zero (0) per la prima voce dell’elenco) e, se selezionati, aggiunge l’articolo alla seconda casella di riepilogo.

  1. Fare doppio clic sul pulsante Rimuovi.

  2. Aggiungere le seguenti righe di codice:

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

Spiegazione: Excel VBA scorre seconda casella di riepilogo e, se selezionati, rimuove la voce. La variabile contatore tiene traccia del numero di elementi rimossi.

  1. Fare doppio clic sul pulsante prima opzione.

  2. Aggiungere le seguenti righe di codice:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0

ListBox2.MultiSelect = 0

End Sub
  1. Fare doppio clic sul secondo pulsante di opzione.

  2. Aggiungere le seguenti righe di codice:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1

ListBox2.MultiSelect = 1

End Sub
  1. Fare doppio clic sul pulsante terza opzione.

  2. Aggiungere le seguenti righe di codice:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2

ListBox2.MultiSelect = 2

End Sub

Spiegazione: l’impostazione ‘Seleziona tipo’ può essere scelto cliccando sui pulsanti di opzione. L’immagine di UserForm mostrato in precedenza dà una descrizione di ogni impostazione. Invece di configurare questa impostazione in fase di esecuzione, è inoltre possibile configurare questa impostazione in fase di progettazione. Per raggiungere questo obiettivo, fare clic destro del mouse su un controllo casella di riepilogo, quindi fare clic su Proprietà. Impostare la proprietà MultiSelect a 0 – fmMultiSelectSingle, 1 – fmMultiSelectMulti o 2 – fmMultiSelectExtented.

  1. Fare doppio clic sulla prima casella di controllo.

  2. Aggiungere le seguenti righe di codice:

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

Spiegazione: selezionando la casella di controllo prima, tutti gli elementi della prima casella di riepilogo può essere selezionata / deselezionata.

  1. Fare doppio clic sulla casella di controllo secondo per aggiungere le stesse linee di codice.

Sostituire solo con CheckBox1 CheckBox2 e ListBox1 con ListBox2.