Di seguito vedremo un programma in Excel VBA che crea un form contenente una casella combinata a più colonne.

Il form ci accingiamo a creare look come segue:

Multicolumn Combo Box 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 i pulsanti di etichetta, casella combinata e di comando. Una volta che questo è stato completato, il risultato deve essere coerente con l’immagine del Userform mostrato in precedenza. Ad esempio, creare un controllo casella combinata facendo clic sul ComboBox dalla Casella degli strumenti. Successivamente, è possibile trascinare una casella combinata al form utente.

  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 dei tasti form, di etichette e di comando, fare clic su Visualizza, Finestra Proprietà 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. Scegliere Userform dall’elenco a discesa sinistra. Scegli inizializzazione dall’elenco a discesa a destra.

  4. Aggiungere le seguenti righe di codice:

Private Sub UserForm_Initialize()

ComboBox1.ColumnCount = 2

Dim Films(1 To 5, 1 To 2) As String

Dim i As Integer, j As Integer

Films(1, 1) = "Lord of the Rings"

Films(2, 1) = "Speed"

Films(3, 1) = "Star Wars"

Films(4, 1) = "The Godfather"

Films(5, 1) = "Pulp Fiction"

Films(1, 2) = "Adventure"

Films(2, 2) = "Action"

Films(3, 2) = "Sci-Fi"

Films(4, 2) = "Crime"

Films(5, 2) = "Drama"

ComboBox1.List = Films

End Sub

Spiegazione: La prima riga di codice imposta il numero di colonne della casella combinata a 2. Invece di impostare il numero di colonne in fase di esecuzione, è anche possibile configurare questa impostazione in fase di progettazione. Per raggiungere questo obiettivo, tasto destro del mouse sul controllo casella combinata, fare clic su Proprietà e impostare la proprietà ColumnCount su 2. Avanti, dichiariamo e inizializzare una matrice bidimensionale. L’ultima riga di codice assegna la matrice alla casella combinata.

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

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

  2. Fare doppio clic sul pulsante OK.

  3. Aggiungere le seguenti righe di codice:

Private Sub CommandButton1_Click()

Unload Me

MsgBox "You selected " & ComboBox1.Value

On Error Resume Next

MsgBox "You like " & ComboBox1.Column(1) & " movies"

End Sub

Nota: queste righe di codice chiudono l’UserForm VBA di Excel e visualizzare la voce e genere selezionato. L’ ‘On Error Resume Next’ affermazione ignora l’errore quando i riempimenti utente nella sua / il suo proprio film (in questo caso non v’è alcun genere disponibili).

  1. Fare doppio clic sul pulsante Annulla.

  2. Aggiungere il seguente riga di codice:

Private Sub CommandButton2_Click()

Unload Me

End Sub

Risultato quando si seleziona Velocità e fare clic su OK.

Multicolumn Combo Box Result

Multicolumn Combo Box Result