ComboBox Excel VBA: uso casella combinata 

 Maggio 19, 2020

By  Damiano Causale

  • Home
  • Blog
  • ComboBox Excel VBA: uso casella combinata

In questo articolo voglio mostrarti come aggiungere una ComboBox Excel VBA in una UserForm Excel.

Una ComboBox Excel è una casella combinata che potrai aggiungere a una maschera utente (in inglese UserForm) di inserimento dati.

In altri termini si tratta di un menu a tendina da cui potrai selezionare dei valori.

In questo articolo imparerai quattro semplici modi per aggiungere valori a una ComboBox Excel con il VBA.

combobox excel vba

Come aggiungere una ComboBox Excel VBA

Come aggiungere una ComboBox Excel VBA

Inserire una ComboBox in una UserForm Excel è semplicissimo. È sufficiente selezionare la Casella combinata dalla Casella degli strumenti e trascinarla sulla UserForm.

Passiamo all'aspetto più importante: l’inserimento dei dati in una ComboBox.

Dobbiamo fare in modo di popolare di elementi la ComboBox in modo che sia possibile selezionarne uno quando viene attivata.

Aggiungere valori a una ComboBox

Esistono modi differenti per aggiungere elementi a una ComboBox. In particolare vedremo quattro metodi: uno che non richiede l’utilizzo delle macro Excel e tre attraverso l’utilizzo del codice VBA.

Inserire valori a una ComboBox senza il VBA

La prima modalità non richiede l’utilizzo del linguaggio delle macro.

Vediamo come procedere.

Innanzitutto, creiamo un elenco di valori all'interno di un intervallo di celle Excel. Ad esempio, l’intervallo di celle A2:A11.

Aggiungere valori a una ComboBox

Ora ritorniamo sull'Editor VB di Excel.

Aggiungere valori a una ComboBox VBA Excel

Fai un clic sulla UserForm, quindi seleziona la ComboBox.

Dalla finestra Proprietà (in basso a sinistra) scorri verso il basso fino a RowSource. Qualora la finestra Proprietà non fosse visibile, premi il tasto funzione F4.

A questo punto, inserisci riferimento all'intervallo di dati.

Ti suggerisco di aggiungere anche il riferimento al foglio di lavoro prima del riferimento all'intervallo. Se omesso, Excel suppone che l'intervallo sia quello del foglio di lavoro attivo ovvero quello in cui ti trovi quando avvii la UserForm.

Aggiungere valori a una ComboBox

Se non vuoi che l'utente sia in grado di visualizzare o modificare questo elenco, potrai inserirlo in un foglio di lavoro nascosto.

Come vedi, questo è un modo molto semplice per aggiungere valori a una ComboBox Excel. Non è necessario utilizzare alcuna istruzione VBA.


Inserire valori a una ComboBox con il VBA

Ora vediamo due metodi per aggiungere valori ad una ComboBox Excel che necessitano dell’utilizzo della codifica VBA.

Vai alla finestra dell’Editor VB e fai un clic con il tasto destro del mouse sulla UserForm.

Successivamente fai clic su Visualizza codice dal menu contestuale.

Inserire valori a una ComboBox con il VBA Excel

In alternativa, puoi scegliere di premere il tasto destro sulla UserForm dalla finestra Progetto. Il risultato sarà identico.

Excel VBA ComboBox | Inserire valori a una ComboBox

A prescindere dalla modalità utilizzata, ti troverai davanti una finestra simile.

Evento UserForm VBA Excel

L’evento associato alla UserForm potrebbe essere UserForm_Click. Ciò significa che il codice che inserirai al suo interno sarà eseguito ogni volta che fai un clic sulla UserForm. Nello specifico, i valori nella ComboBox saranno aggiunti ad ogni clic.

Questo evento non fa al caso nostro. Pertanto seleziona l’evento Initialize dal menu a tendina Routine sulla destra.

Evento UserForm Excel

Ora tra le due righe di codice andremo ad inserire le istruzioni necessarie.

Il codice VBA verrà eseguito all'avvio o all'apertura della UserForm.

Pertanto i valori saranno aggiunti alla ComboBox quando si apre la UserForm.

Aggiungere valori a una ComboBox: metodo AddItem

La prima opzione che ti mostrerò per aggiungere valori a una ComboBox è con l’utilizzo del codice VBA attraverso il metodo AddItem.

Aggiungere valori a una ComboBox: metodo AddItem

Il codice VBA da utilizzare sarà il seguente:

Aggiungere valori a una ComboBox: metodo AddItem

Questo metodo ti consente di aggiungere tutti i valori che inserisci tra le doppie virgolette.

Per semplificare la lettura e favorire la comprensione del codice VBA ti suggerisco di utilizzare l'istruzione With … End With.

Il metodo AddItem è probabilmente il più intuitivo e facile da capire. È sicuramente utile per elenchi di piccole dimensioni. Se al contrario disponi di un elenco ampio questo metodo NON è adatto.

Aggiungere valori a una ComboBox: proprietà List

Stavolta, in questa nuova opzione, faremo ricorso alla proprietà List della ComboBox.

Aggiungere valori a una ComboBox: proprietà List

Questa opzione non è difficile da capire anche se non si presta a grandi elenchi. Segui la sintassi dell'esempio indicato sotto.

Aggiungere valori a una ComboBox: proprietà List

La proprietà List aggiunge gli elementi presenti nell'Array (detto anche vettore o matrice). Array è la funzione utilizzata per creare un array dagli elementi per l'elenco.

Aggiungere valori a una ComboBox: proprietà RowSource

Quest’ultima opzione è esattamente identica alla prima mostrata in questo articolo ma con l’utilizzo del VBA.

L’utilizzo della proprietà RowSource ti consente di specificare il riferimento al foglio di lavoro e all'intervallo di celle.

Aggiungere valori a una ComboBox: proprietà RowSource

Il codice VBA è il seguente:

Aggiungere valori a una ComboBox: proprietà RowSource

Indipendentemente dall'opzione utilizzata, il risultato finale sarà il seguente:

ComboBox Excel VBA

Come vedi, ci sono modi differenti per aggiungere valori a una ComboBox Excel VBA. Potrai scegliere quello che per te funziona meglio!

Spero l’articolo ti sia utile.

Buon lavoro!

Vuoi saperne di più sul linguaggio VBA Excel?

Allora potrebbero interessarti i seguenti articoli:

Vuoi imparare a utilizzare il linguaggio Excel VBA?

Basta con i lavori noiosi e ripetitivi! Grazie al VBA puoi far lavorare Excel al tuo posto!

Ho registrato per te un corso interamente dedicato alle Macro e al VBA.

Attraverso degli esempi pratici, ti introdurrò, al mondo delle Macro di Excel illustrandoti tutto il potenziale per automatizzare le tue attività di lavoro quotidiane.

Cosa aspetti?

Sfrutta tutto il potenziale di Excel con il corso Macro e VBA!

Damiano Causale


Mi chiamo Damiano Causale, istruttore Microsoft certificato, per lavoro aiuto aziende e privati nell'utilizzo di Excel.

Damiano Causale

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati con un asterisco (*).

  1. Salve,

    ho il seguente problema, ho un libro excel con 3 fogli, i primi due fogli hanno dati generici e il terzo è la combinazione dei primi due più dati extra, riempio due combobox in questo modo:

    Dim celda1 As Range
    Dim celda2 As Range
    Dim libro As Workbook
    Dim hoja1 As Worksheet
    Dim hoja2 As Worksheet

    Set libro = ThisWorkbook
    Set hoja1 = libro.Worksheets(1)
    Set hoja2 = libro.Worksheets(2)

    For Each celda1 In hoja1.Range(Range("A2"), Range("A100").End(xlUp))
    cboFiliale.AddItem celda1.Value & " " & celda1.Offset(0, 1).Value
    Next celda1

    For Each celda2 In hoja2.Range(Range("A2"), Range("A100").End(xlUp))
    cboTipo.AddItem celda2.Value & " " & celda2.Offset(0, 1).Value
    Next celda2

    Questo funziona in parte, se sto dentro il foglio 1 (hoja1) si riempie il primo combobox, pero siccome i dati del secondo combobox sono in un'altro foglio mi da questo errore:

    Errore di run-time '1004': Metodo 'Range' dell'oggetto '_Worksheet' non riuscito

    Qualche idea per risolvere?

    Grazie

    1. Ciao Marcelo,
      all'interno del codice dovresti specificare il riferimento al foglio, ad esempio:
      al posto di ...
      For Each celda1 In hoja1.Range(Range("A2"), Range("A100").End(xlUp))
      inserisci modifica così ...
      For Each celda1 In hoja1.Range(hoja1.Range("A2"), hoja1.Range("A100").End(xlUp))

      Presumo l'errore sia dovuto a questa parte di codice:
      For Each celda2 In hoja2.Range(Range("A2"), Range("A100").End(xlUp))
      modifica in ...
      For Each celda2 In hoja2.Range(hoja2.Range("A2"), hoja2.Range("A100").End(xlUp))

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}