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

esempio userform

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

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:

controlli userform esempio

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:

controlli di una userform

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

inserire una userform in Excel VBA for all applications

Apparirà la seguente schermata:

userform iniziale

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:

come inserire un controllo

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

cambiare il testo di un controllo della userform

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.

pulsante di comando

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:

inizializzare una 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:

Modificare l'azione della scrollbar

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:

  1. 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.
  2. Se la userform è compilata senza cliccare il campo “aacompagnato”, viene visualizzato un messaggio che invita l’utente ad eseguire la selezione
  3. 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

 

Macro Excel: come creare una userform in VBA con esempio