Dopo aver letto questo appunto sarai in grado di realizzare una semplice userform in Microsoft Excel come quella riportata nell’immagine sotto.

Sarà proprio la userform mostrata nell’immagine sopra l’esempio che qui ti proponiamo di costruire insieme. L’appunto qui proposto si divide nei seguenti paragrafi:
- Cosa è una userform
- I controlli di una userform
- Come creare graficamente una userform in VBA
- Come attivare la userform esempio
- Impostare status iniziale della userform esempio
- Definire le azioni dei controlli della userform esempio
Cosa è una userform
Una userform è una interfaccia grafica utente “user friendly” che consente di inserire delle informazioni o selezionare delle opzioni che saranno utilizzate da un codice VBA per eseguire delle operazioni.
Nel caso semplice proposto in questo appunto, le selezioni dell’utente saranno riportate sulla prima riga disponibile di un foglio di lavoro. Questo esempio, molto semplice, consentirà di acquisire familiarità con i passaggi fondamentali richiesti per la realizzazione di un progetto di questo tipo.
I controlli di una userfom
Excel consente di associare numerose tipologie di controlli ad una userform. Vediamo quali tipi di controlli sono stati utilizzati nell’esempio che in questo appunto proponiamo:

I controlli utilizzati sono:
- Labels: si tratta di semplici etichette di testo
- Textbox: di tratta di campi che l’user deve compilare digitando una stringa di testo
- Combobox: sono campi che l’utente deve compilare selezionando delle opzioni che verranno mostrate cliccando sul pulsante del menu a tendina
- Checkbox: campi utilizzati per fornire all’utente delle opzioni di selezione. Possono essere gestiti in modo tale che nessuna, almeno una o solo una opzione può essere selezionate
- Optionbox: anche in questo caso lo scopo è fornire all’utente delle opzioni tra cui scegliere e anche qui la gestione delle opzioni dipende dalle esigenze
- Cornice: si tratta di un elemento grafico che consente di delimitare una zona della userform come elemento di attenzione per l’utente
- Command button: Si tratta di bottoni ai quali il programmatore deve associare delle azioni
- Scrollbar: : si tratta di una semplice barra di scorrimento. Questa può essere utilizzata sia per scorrere i contenuti che come pulsante di selezione se ad ogni posizione della barra è associato un valore specifico
Altri controlli disponibili in Excel
Ci sono però altri controlli non utilizzati nel nostro esempio ma che potrebbero essere utili nello sviluppo di una macro:

In particolare abbiamo:
- Listbox: consente di visualizzare una lista di elementi che l’utente potrebbe eventualmente selezionare
- Toggle button: si tratta di un bottone che consente di indicare un particolare stato o modalità (si/no, vero/falso).
- Tabstrip: consente di visualizzare differenti contenuti per lo stesso set di controlli.
- Multipage: consente di sviluppare la userform in pagine diverse. Ogni pagina contiene un set di controlli differente.
- Spin button: si tratta di un bottone che consente ad esempio di aumentare o diminuire il valore all’interno di una cella o di scorrere dei valori all’interno di una list box
- Immagine: consente di aggiungere una immagine
- Ref Edit: consente di selezionare un insieme di celle da un foglio di lavoro
Ti suggeriamo di acquisire familiarità con lo sviluppo delle userform seguendo il nostro esempio e di addentrarti in questi ulteriori controlli quando ne avrai bisogno. Ciò che in questa fase è importante è capire bene la logica dietro la realizzazione di un progetto di questo tipo.
Come creare graficamente una userform in Excel VBA for applications
Se dal menù di una qualsiasi cartella di lavoro excel si seleziona dal menù la scheda sviluppo e poi l’icona “visualizza codice”, si aprirà la finestra di lavoro in Microsoft visual basic, application edition. Dal menu selezionare inserisci-> userform

Apparirà la seguente schermata:

L’area selezionata è la userform sulla quale vogliamo costruire un progetto. Adesso è possibile aggiungere gli elementi necessari a realizzare la userform. E’ molto importante in questa fase progettare bene la userform prima di passare al codice VBA da realizzare. Una volta realizzato il codice, sarà sempre possibile aggiungere o togliere dei controlli, tuttavia, quando il numero di controlli è elevato diventa più difficile eseguire delle modifiche. Per aggiungere un controllo basta selezionarlo dalla casella degli strumenti e posizionarlo nella finestra della Userform 1. Una volta posizionato, puoi modificare sia le dimensioni che la posizione del controllo aggiunto interagendo con lo stesso.
In questo caso abbiamo aggiunto un’etichetta:

Per cambiare il testo all’interno occorre cambiare la proprietà “caption” nell’elenco delle proprietà dell’etichetta che trovi in basso a sinistra.

Attenzione, nell’elenco delle proprietà ce ne sono due che possono sembrare uguali ma che non lo sono: Name e Caption. Caption indica come abbiamo visto il testo visualizzato graficamente sulla userform. Name invece è il nome dell’etichetta con la quale può essere riconosciuta all’interno del codice di visualbasic.
Abbiamo visto come aggiungere un’etichetta di testo. Allo stesso modo potete aggiungere qualsivoglia controllo all’interno della userform. Prova a realizzare la userform che ti abbiamo proposto nell’esempio.
Come attivare una userform
Una volta realizzata la userform è necessario creare il codice che consente di attivarla. Per farlo, costruiamo un bottone sul nostro foglio di lavoro. Per creare un bottone leggi il secondo paragrafo del seguente appunto dove viene spiagato come è possibile creare un bottone e gestire il codice al suo interno.

Associare al bottone di comando il seguente codice:
Sub Pulsante1_Click()
UserForm1.Show
End Sub
Con questo codice stiamo imponendo la visualizzazione della nostra userform in seguito al click sul pulsante appena creato. Tuttavia non sarà possibile eseguire alcun tipo di azione. Non abbiamo infatti associato alcun comando ai controlli della userform
Impostare status iniziale della userform
Quando la userform è lanciata, questa si presenta in uno stato che deve essere definito dal programmatore. Nel nostro caso ad esempio:
- bisogna associare una lista di opzioni nelle combobox
- decidere se lasciare una delle opzioni delle checkbox o option button già preselezionate
- Definire il range di valori in cui la scrollbar può muoversi e con quale passo farlo
- Scegliere se far visualizzare un testo nelle textbox oppure no.
Vediamo in che modo definiamo lo stato iniziale nel nostro esempio. Nella finestra visual basic for application, selezionare l’oggetto userform e l’azione inizialize. Questo consente di definire l’elenco delle operazioni che devono essere eseguite al lancio della userform:

Codice inizializzazione user
E digitare il seguente codice:
Private Sub UserForm_Initialize()
‘Definiamo il valore iniziale delle prime 3 textbox. Scelgo di lasciarle vuote
Me.TextBox1.Value = “”
Me.TextBox2.Value = “”
‘continuiamo
Me.TextBox3.Value = “”
‘definiamo la scrollbar
‘Decidiamo che la scrollbar deve andare da un valore minimo 0 a un valore massimo 50
ScrollBar1.Min = 0
ScrollBar1.Max = 50
‘con passo piccolo 0 e passo grande 5
ScrollBar1.SmallChange = 1
ScrollBar1.LargeChange = 5
‘Valore iniziale della scroll bar sarà 10
ScrollBar1.Value = 10
‘La textbox 4 è quella che si vuole associare alla scrollbar per far visualizzare il
‘valore dello sconto. Poiché questa cella è diversa dalle altre le diamo un colore di sfondo
TextBox4.BackColor = RGB(0, 255, 0)
TextBox4.Value = ScrollBar1.Value & “%”
‘Definiamo qui di seguito la lista della combobox che è di due elementi M ed F
With ComboBox1
.AddItem “M”
.AddItem “F”
End With End Sub
Come definire le azioni dei controlli
Nella nostra userform esempio, l’utente interagisce per la maggiore con la stessa compilando i campi di cui questa è costituita. Ci sono però 3 controlli che a differenza di altri eseguono un’azione che deve essere codificata dal programmatore.
Ad esempio, spostando il cursore della scrollbar, nella nostra userform cambia il valore nella casella di testo con sfondo verde. Le due azioni sono quindi combinate, per cui al variare del valore della scrollbar, varia anche il valore nella cella di testo. Ma come è stato ottenuto questo collegamento di azioni?
Facendo doppio click sulla scrollbar entriamo nella finestra che ci consente di definirne il codice. Scegliere l’azione change:

All’azione “change” della scrollbar associamo a questo punto il valore della textbox desiderata:
Private Sub ScrollBar1_Change()
TextBox4.Value = (ScrollBar1.Value) & “%”
End Sub
Altri due controlli su cui è necessario impostare il codice sono “Esegui” e “Esci”. Il comando “Esci” è il più semplice da codificare. A questo punto eseguire doppio click sul comando esci in VBA for applications e scegliere l’azione click e poi scrivere il seguente codice:
Codice comando esci
Private Sub CommandButton2_Click()
Unload UserForm1
End Sub
Il comando esegui invece è più difficile da codificare. Nel nostro caso, infatti, abbiamo deciso di associare le seguenti azioni al bottone di comando esegui:
- Quando la userform è compilata correttamente, le informazioni scritte dall’utente vengono “stampate” sulla prima riga disponibile del foglio di lavoro. Dopo la stampa, i controlli della userform sono resettati come nello status iniziale.
- Se la userform è compilata senza cliccare il campo “aacompagnato”, viene visualizzato un messaggio che invita l’utente ad eseguire la selezione
- Se la userform è compilata cliccando entrambe le checkbox del campo “accompagnato”, viene visualizzato un messaggio che invita l’utente a selezionare solo un valore
Codice comando esegui
Private Sub CommandButton1_Click()
‘Dichiaro le variabili righe e foglio per identificare rispettivamente le righe ed il fogio
‘ di lavoro
Dim Righe As Long
Dim foglio As Worksheet
‘selezioniamo la prima riga disponibile del voglio di lavoro Foglio1
Set foglio = Worksheets(“Foglio1”)
Righe = foglio.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
‘all interno della riga inseriamo nelle varie celle le informazioni riportate nei vari controlli della userform
‘la successione delle celle nella stessa riga è indicata dal numero all interno del comando .Cells()
With foglio
.Cells(Righe, 1).Value = Me.TextBox1.Value
.Cells(Righe, 2).Value = Me.TextBox2.Value
‘continuiamo ad associare le celle ai valori
.Cells(Righe, 3).Value = Me.TextBox3.Value
.Cells(Righe, 4).Value = Me.ComboBox1.Value
‘La textbox4 è quella che utilizza il valore della scollbar. Come valore della cella potremmo inserire anche
‘Scrollbar1.value
.Cells(Righe, 7).Value = Me.TextBox4.Value
If CheckBox1.Value = True And CheckBox2.Value = False Then Cells(Righe, 5).Value = CheckBox1.Caption
If CheckBox2.Value = True And CheckBox1.Value = False Then Cells(Righe, 5).Value = CheckBox2.Caption
‘impostazione dei messaggi in caso entrambe le opzioni del campo accompagnato sono selezionate
If CheckBox2.Value = True And CheckBox1.Value = True Then MsgBox “solo una opzione del campo accompagnato può essere selezionata”
‘impostazione dei messaggi in caso nessuna delle opzioni del campo accompagnato sono selezionate
If CheckBox2.Value = False And CheckBox1.Value = False Then MsgBox “selezionare una opzione del campo accompagnato”
If OptionButton1.Value = True Then
Cells(Righe, 6).Value = “Intero”
End If
If OptionButton2.Value = True Then
Cells(Righe, 6).Value = “Ridotto”
End If
‘Reset della userform al suo stato iniziale per poter essere riutilizzata
End With
Me.TextBox1.Value = “”
Me.TextBox2.Value = “”
‘continuiamo
Me.TextBox3.Value = “”
Me.ComboBox1.Value = Clear
CheckBox1.Value = False
CheckBox2.Value = False
OptionButton1.Value = False
OptionButton2.Value = False
ScrollBar1.Value = 0
End Sub