Maschere Excel: UserForm e pulsanti 

 Febbraio 14, 2020

By  Damiano Causale

  • Home
  • Blog
  • Maschere Excel: UserForm e pulsanti

Scopri come creare maschera di interfaccia Excel

In questo articolo voglio mostrarti come creare maschere Excel per l’immissione dati.

Per semplificare l’inserimento dei dati in una cartella di lavoro da parte degli utenti, è possibile creare un form inserimento dati Excel ovvero una maschera di interfaccia (la cosiddetta UserForm in inglese).

Utilizzerò un semplice esempio per spiegarti il funzionamento di una maschera di input in Excel.

Di cosa abbiamo bisogno?

Per creare una UserForm è necessario conoscere il linguaggio VBA. Ma non ti preoccupare, commenterò passo dopo passo ciascun passaggio in modo da renderti agevole la comprensione del linguaggio utilizzato.

La versione di Excel utilizzata per la creazione della UserForm è la 2019. Potrai eseguire gli stessi passaggi anche se possiedi una versione differente.

È importante ricordare di salvare il file come Cartella di lavoro con attivazione macro di Excel. Nel caso contrario, rischi che tutto il tuo lavoro vada perso.

Creare maschere Excel: preparare il foglio di lavoro

Immaginiamo di voler inserire dei dati all’interno di un foglio di lavoro attraverso una maschera Excel.

Iniziamo a predisporre il nostro foglio di lavoro.

Inseriamo nell’intervallo di celle A1:D1, le seguenti intestazioni: Cognome, Nome, Indirizzo, Città. Così come mostrato nella seguente immagine.

maschere excel | maschera inserimento dati excel

Come creare una maschera inserimento dati Excel

Per creare una maschera in Excel è necessario utilizzare l’Editor VB.

Innanzitutto, apriamo l’Editor.

Per aprire l’Editor di Visual Basic in modo rapido puoi utilizzare la seguente combinazione di tasti:

Aprire editor VB | Come creare una maschera inserimento dati Excel

Questa è la scorciatoia che utilizzo più spesso.

In alternativa, porta il puntatore del mouse sull’etichetta di uno dei qualsiasi fogli di lavoro presenti all’interno del file di Excel e premi il tasto destro del mouse. Successivamente fai un clic sulla voce Visualizza codice presente nel menu contestuale.

Aprire editor VB | Come creare una maschera inserimento dati Excel

Ora, fai un clic sul menu Inserisci presente nella barra dei menu e seleziona la voce UserForm.

Userform esempi excel | maschere excel | Come creare una maschera inserimento dati Excel

Viene visualizzata una UserForm vuota. Dovresti notare anche la presenza della Casella degli strumenti.

Userform esempi excel | maschere excel | Come creare una maschera inserimento dati Excel

Qualora questa non fosse visibile, fai un clic sul menu Visualizza e successivamente sulla voce Casella degli strumenti.

maschere excel | casella degli strumenti

Maschere Excel: inserire pulsanti nella UserForm

Dopo aver inserito una UserForm vuota, aggiungiamo le caselle di testo, le etichette e i pulsanti.

Prima di procedere, qualora lo desiderassi, potrai modificare il nome assegnato di default alla tua UserForm.

Per far questo, fai un clic sulla UserForm per selezionarla e poi apri la finestra Proprietà (in alternativa premi il tasto funzione F4).

All’interno della finestra Proprietà, fai doppio clic su (Name), digita il nome che preferisci e premi il tasto Invio (nell’esempio ho inserito il nome MascheraExcel).

Maschere Excel | inserire pulsanti nella UserForm

Noterai che il nuovo nome apparirà nell’area Gestione progetti, ma la UserForm mostra ancora il nome UserForm1 nella barra del titolo. Per modificare questo nome fai doppio clic sulla voce Caption presente nella finestra Proprietà. Infine, premi il tasto Invio. A questo punto nella barra del titolo sarà presente il nuovo nome.

Ora procediamo con l’aggiunta delle caselle di testo, delle etichette e dei comandi.

Questi oggetti sono chiamati controlli.

Inserire le caselle di testo nelle maschere Excel

Per prima cosa andiamo ad aggiungere le caselle di testo.

Inserire le caselle di testo nelle maschere Excel

Le caselle di testo consento agli utenti di inserire i dati. Esse vengono identificate con il nome TextBox seguito da un numero.

Inserire le etichette nelle maschere Excel

A fianco delle caselle di testo aggiungiamo le etichette.

Inserire le etichette nelle maschere Excel

Lo scopo delle etichette è descrivere ciò che gli utenti devono inserire nelle caselle di testo. Per questo motivo vengono aggiunte accanto ad esse.

Le etichette vengono identificate con il nome Label seguito da un numero.

Selezioniamo la prima etichetta: Label1. Facciamo doppio clic sulla proprietà Caption presente nella finestra Proprietà. Digitiamo il nome Cognome e premiamo il tasto Invio.

Inserire le etichette nelle maschere Excel

Procediamo allo stesso modo per le altre etichette aggiungendo Nome, Indirizzo, Città.

Userform esempi excel | Inserire le etichette nelle maschere Excel

Come allineare i controlli

Se lo desideri, puoi ridimensionare sia le etichette che le caselle di testo per adattarle al testo.

Inoltre, qualora i controlli non fossero allineati, potrai utilizzare gli appositi comandi per sistemarli.

Fai clic sulla prima casella di testo e tenendo premuto il tasto CTRL fai clic sulle caselle di testo rimanenti.

Dal menu Formato fai clic su Allinea e seleziona la voce A sinistra.

Userform esempi excel | maschere excel | Come allineare i controlli

Successivamente, sempre dal menu Formato fai clic su Spaziatura verticale e seleziona la voce Rendi uguale.

Userform esempi excel | maschere excel | come allineare i controlli

Ripeti la stessa procedura anche per le etichette.

Maschere Excel: inserire i pulsanti nella UserForm

Ora vediamo come aggiungere i pulsanti. Lo scopo dei pulsanti è di consentire agli utenti di eseguire delle azioni.

Nella nostra UserForm inseriremo due pulsanti: un pulsante per inserire i dati e un pulsante per rimuovere il contenuto delle caselle di testo.

Maschere Excel | inserire i pulsanti nella UserForm

I pulsanti vengono identificati con il nome CommandButton seguito da un numero.

Per inserire un pulsante, fare clic sul pulsante CommandButton nella Casella degli strumenti.

Se desideri inserire un pulsante di dimensioni standard, trascina il pulsante dalla Casella degli strumenti verso la tua UserForm.

Con il CommandButton1 selezionato, fai doppio clic sulla proprietà Caption presente nella finestra Proprietà, digita Inserisci e premi il tasto Invio.

Ripeti gli stessi passaggi per aggiungere un nuovo CommandButton che conterrà la scritta Cancella.

Il risultato sarà simile alla seguente immagine.

Maschere Excel | inserire i pulsanti nella UserForm

Aggiungere il codice VBA ai pulsanti

Arriviamo ora alla parte cruciale: l’inserimento del codice VBA.

Per fare in modo che i pulsanti eseguano un’azione, occorre specificare il tipo di comando da eseguire ogni volta che si fa un clic.

Partiamo dal pulsante Inserisci.

Seleziona il pulsante Inserisci, premi il tasto destro del mouse e seleziona la voce Visualizza codice.

In alternativa, puoi fare doppio clic direttamente sul pulsante per visualizzare la schermata per inserire il codice.

Il risultato sarà il seguente.

Userform esempi excel | maschere excel | Aggiungere il codice VBA ai pulsanti

A questo punto, se hai letto il mio articolo relativo alla scrittura delle macro, sai che il codice va inserito tra le parole chiave Sub ed End Sub.

Il punto il cui il cursore lampeggia, è il punto in cui va inserito il codice.

Cerchiamo di capire dove va a finire il testo inserito nelle caselle di testo.

Sulla base della nostra tabella sappiamo che il primo dato andrà a finire nella cella A2, in corrispondenza del Cognome, e tutti gli altri nelle rispettive celle della stessa riga.

Userform esempi excel | maschere excel

L’inserimento del primo utente non sarà difficile. La difficoltà nasce quando dobbiamo inserire i dati successivi. Dobbiamo fare in modo che Excel possa individuare la riga vuota successiva ai dati relativi all’ultimo utente inserito.

Per questo utilizziamo il seguente codice:

Userform esempi excel | maschere excel | codice VBA

Questa istruzione ci consente di individuare l’ultima riga, successiva a quella contenente dati, a partire dalla cella A1.

Se l’intervallo non contiene alcun dato, il codice ci restituisce un errore. Per evitare questo utilizziamo un’istruzione condizionale: l’istruzione If.

Attraverso l’istruzione Dim, ho prima dichiarato il nome e il tipo di variabile ad Excel. Ovvero ho chiesto all’applicazione (Excel) di creare uno spazio all’interno della sua memoria per contenere una variabile di tipo numerico.

Userform esempi excel | maschere excel

Ecco il codice completo.

Userform esempi excel | maschere excel | istruzioni vba | macro vba

 L’intero codice viene tradotto nel modo seguente:

Se la cella A2 è vuota, inserisci il contenuto della TextBox1 (Cognome) nella cella A2, il contenuto della TextBox2 (Nome) nella cella B2, il contenuto della TextBox3 (Indirizzo) nella cella C2 e il contenuto della TextBox4 (Città) nella cella D2. Nel caso contrario, inserisci il contenuto di ciascuna TextBox nella cella vuota successiva.”.

Passiamo ora all’inserimento del codice del pulsante Cancella.

Seleziona il pulsante Cancella, premi il tasto destro del mouse e seleziona la voce Visualizza codice.

Il compito di questo pulsante sarà quello di pulire le caselle di testo dai dati.

Userform esempi excel | maschere excel | istruzioni vba | macro vba

Verificare il funzionamento della UserForm

Infine, passiamo al test della nostra interfaccia per verificare il funzionamento.

Innanzitutto, apriamo l’Editor VB.

Dopo aver selezionato UserForm dalla finestra Gestione progetti, è necessario fare un clic sul comando Esegui.

menu editor VB | Verificare il funzionamento della UserForm

In alternativa, è possibile andare nel menu Esegui e scegliere il comando Esegui Sub / UserForm.

menu editor VB | Verificare il funzionamento della UserForm

La modalità di esecuzione che preferisco è quella attraverso il tasto funzione F5.

Userform esempi excel | maschere excel | Come creare una maschera inserimento dati Excel

Ora, inseriamo il primo dato nella casella di testo Cognome.

Passiamo alla casella di testo successiva premendo il tasto TAB.

Dopo aver inserito i dati in tutte le caselle di testo, fai clic sul pulsante Inserisci.

A questo punto dovresti ritrovare i dati all’interno del foglio di lavoro.

Creare un pulsante per aprire la UserForm

Per facilitare agli utenti l’apertura della UserForm, è possibile aggiungere un pulsante all’interno del foglio di lavoro.

Il codice da utilizzare è semplice. Posizioneremo l’istruzione all’interno di un modulo di codice standard.

Pertanto inseriamo un modulo. Diamo il nome alla macro (ApriUserForm). Infine, digitiamo il seguente codice:

Creare un pulsante per aprire la UserForm | macro VBA

Il risultato sarà il seguente:

Creare un pulsante per aprire la UserForm

Ora, inserisci la forma che desideri all’interno del foglio e aggiungi del testo.

Creare un pulsante per aprire la UserForm | Macro excel

Dopo averla inserita assegna la macro alla forma.

Fai clic con il pulsante destro del mouse e scegli la voce Assegna macro.

Creare un pulsante per aprire la UserForm | assegnare una macro a un pulsante

A questo punto la tua maschera Excel è pronta: non ti resta che procedere con l’inserimento dei dati e … buon lavoro.

Guarda il video e scopri come creare una UserForm Excel attraverso il linguaggio delle macro Excel: il VBA.

Se desideri migliorare i tuoi processi di lavoro e creare modelli di automazione, scopri come ricevere una consulenza Excel su misura alle tue esigenze e della tua azienda. Risparmia tempo e dai un’accelerata alla tua produttività!

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

Your email address will not be published. Required fields are marked

  1. Buongiorno, tutto chiaro ho provato a creare una userform seguendo le vostre istruzioni e mi e' riuscito benissimo. Ho avuto un problema con l'inserimento della data su una textbox me la riporta sul foglio excel in inglese, digito 10/05/2020 e mi restituisce 05/10/2020. Dove sbaglio?

    1. Salve Marino, ti suggerisco di provare il seguente codice:
      CDate(TextBox1.Value)
      Ad esempio, se al clic di un pulsante presente nella UserForm vuoi che venga inserita la data, presente nella TextBox1, all'interno della cella attiva utilizza il seguente codice:
      ActiveCell.Value = CDate(TextBox1.Value)
      Spero il suggerimento ti sia utile:)
      Fammi sapere se funziona;)

  2. Buonasera.

    grazie per questo tutorial mi è stato molto utile.
    Avrei solo una domanda.

    se voglio fare in modo che i dati siano inseriti in una tabella presente nel foglio di lavoro " foglio2"

    ( la tabella è identica a quella riportata nel suo esempio, ma è in un foglio diverso) che sintassi è necessario usare?

    la ringrazio.

    1. Salve Vincenzo, ecco il codice modificato che potrai utilizzare per inserire nel Foglio2:
      '==========================================================================================
      Private Sub CommandButton1_Click()
      Dim UltimaRiga As Long

      If Foglio2.Range("A2").Value = "" Then
      Foglio2.Cells(2, 1).Value = TextBox1.Value
      Foglio2.Cells(2, 2).Value = TextBox2.Value
      Foglio2.Cells(2, 3).Value = TextBox3.Value
      Foglio2.Cells(2, 4).Value = TextBox4.Value
      Else
      'Individua la prima riga vuota
      UltimaRiga = Foglio2.Range("A1").End(xlDown).Row + 1

      Foglio2.Cells(UltimaRiga, 1).Value = TextBox1.Value
      Foglio2.Cells(UltimaRiga, 2).Value = TextBox2.Value
      Foglio2.Cells(UltimaRiga, 3).Value = TextBox3.Value
      Foglio2.Cells(UltimaRiga, 4).Value = TextBox4.Value
      End If

      End Sub
      '==========================================================================================

  3. buon giorno, ottimo tutorial, vorrei che solo la maschera di inserimento si aprisse al doppio click del file piuttosto che inserire il pulsante "apriform" e inserire anche un pulsante "CERCA" nella maschera è una cosa possibile?

    1. Salve Cosimo,
      innanzitutto, grazie:)
      Per mostrare la UserForm all'apertura del file è necessario utilizzare il seguente codice:

      '*********************************
      Private Sub Workbook_Open()
      UserForm1.Show
      End Sub
      '*********************************
      Si tratta di un evento che deve essere inserito nell'oggetto Questa_cartella_di_lavoro all'interno dell'Editor VB (ALT + F11)

  4. Buonasera Damiano,
    complimenti per la tua spiegazione: sei asciutto e vai subito all'aspetto operativo senza fronzoli e spiegazioni varie che distolgono e disorientano chi, come me, ha sempre usato excel per fare elenchi e somme.

    Una domanda: a quando una UserForm di lettura dati semmai con la possibilità di fare una cernita all'interno del record secondo un criterio di campo (colonna) (>, <, =, eccetera) con successiva stampa ? Chiedo troppo ?

    Un caro saluto.
    Emilio

    P.S.: Completerei questo esempio che hai fatto aggiungendo:
    1) come uscire dalla maschera
    2) come posizionarla fissa sullo schermo.

    1. Grazie Emilio;)
      nel limite del possibile cerco sempre di dare una risposta a tutti.
      In questo caso non sarebbe semplice esporre il tutto attraverso la sezione dei commenti senza la possibilità di aggiungere immagini.
      Ti ringrazio comunque per i tuoi suggerimenti, sono graditissimi;)

  5. Salve, ottima spiegazione, mi ha aiutato molto. 🙂 Ho provato a creare la maschera senza nessuna difficolta, ho provato a fare delle varianti, alcune riuscite altre un po’ meno, e mi sono fermato su questo quesito ..............
    Vorrei sapere, se fosse possibile, calcolare la media di 3 valori inseriti su delle caselle di testo, all'interno di una userform e tramite un pulsante (commandButton), calcoli la media e la scriva su una cella (esempio “A2”) poi resetti la maschera (userform) per un successivo inserimento.

  6. Ciao Damiano, complimenti per il tuo lavoro con un carattere non omogeneo rispetto ad altri tutorial.
    Ho un problema dopo aver scritto il codice completo del commabutton di inserimento. Ho un Debug nella riga &amp;#39;individua la prima riga vuota&amp;#39; UltimaRiga &amp;#x3D; Range(&amp;quot;A1&amp;quot;).End(x1Down).Row + 1 che mi sembra di averla scritta esattamente.
    boh non capisco dove ho sbagliato.
    Grazie

    1. scusa forse il testo non è chiaro Lezione Maschere Excel UserForm e pulsanti

      "UltimaRiga = Range("A1").End(x1Down).Row + 1"

      1. Ciao Cristiano,
        l'errore sta nel fatto che al posto di XlDown c'è X1Down ovvero è presente il numero uno.
        In apparenza sembra tutto regolare ... ma poi copiando e incollando il testo su Word mi son accorto dell'errore

    2. Ciao Cristiano,
      ti ringrazio per l'apprezzamento del lavoro:)
      Sebbene non si leggano bene i caratteri mi è chiara la tua richiesta.
      Al posto del codice ...
      Range("A1").End(xlDown).Row + 1
      ...utilizza il seguente:
      Range("A1").CurrentRegion.Rows.Count + 1
      Questo ti consente di ottenere il numero della riga vuota

  7. Salve, complimenti dell'eccellente tutorial.
    Inserire dati da una userform in un foglio e posizionarli tutti in orizzontale come in una tabella di dati ce ne sono tantissimi di esempi, ma non sono ancora riuscito a trovarne uno che soddisfi le mie esigenze, e ti spiego subito.
    In un foglio ho creato un modulo da stampare e vorrei inserire i dati della userform direttamente nel modulo che ho creato e poi stamparlo, preciso che le celle non sono continue come in una tabella ma sono sparse sul modulo, esempio: il cognome è nella cella C5, il nome è nella cella F10, l'indirizzo è nella cella D2 e così via in tutto il foglio. Oppure creare un database come lo hai spiegato tu sopra e poi importare i dati nelle celle appropriate e stamparle. Come devo fare?

    1. Grazie Antonio per i complimenti.
      Sulla base della tua esigenza potresti utilizzare un codice simile al seguente:

      Range("C5").Value = TextBox1.Value 'Per inserire in cognome
      Range("F10").Value = TextBox2.Value 'Per inserire in nome
      Range("D2").Value = TextBox3.Value 'Per inserire l'indirizzo

      Il contenuto della cella sarà uguale al contenuto della TextBox.
      Spero questo suggerimento ti sia utile.

    1. Grazie Angelo:)
      Ecco il codice che da usare per aprire la UserForm a tutto schermo:

      With Application
      Me.Height = .Height
      Me.Width = .Width
      Me.Top = .Top
      Me.Left = .Left
      End With

      Il codice dovrai inserirlo all'interno del seguente evento della UserForm

      Private Sub UserForm_Initialize()
      End Sub

      Fammi sapere se funziona.
      Saluti e grazie ancora per il tuo commento

  8. Ottima spiegazione, complimenti.
    Prendendo spunto dal tuo tutorial, ho creato un database dove mi va a riempire le celle in orizzontale, ora con i dati salvati nel foglio database devo riempire un modulo creato su un'altro foglio in celle sparpagliate nel modulo, come faccio a fare una ricerca dal foglio database da un codice e far in modo che si riempiono ad ogni campo nella cella appropriata?

    1. Grazie Antonio e complimenti per aver il tuo database.
      Per quanto riguarda la tua richiesta, diventa complesso rispondere in questo contesto.
      Tuttavia potresti sfruttare una logica simile ...
      Foglio2.Range("A2").Value = Foglio1.Range("B3").Value

  9. Ciao,
    una cosa non mi è chiara... Dove indichi il foglio dove fare gli inserimenti?
    Per spiegarmi.. se ho diversi fogli, come fa il form a sapere in quale foglio inserire i dati?
    Scusa per la domanda ma non sono riuscito a capirlo...

    1. Ciao Marco,
      quando trovi, ad esempio, la scritta...
      Range("A1").Value = UserForm1.TextBox1.Text
      ...significa "inserisci il contenuto della TextBox1 nella cella A1 del foglio attivo".
      Per specificare il foglio dovresti usare qualcosa di simile
      Foglio2.Range("A1").Value = UserForm1.TextBox1.Text
      oppure
      Worksheets(2).Range("A1").Value = UserForm1.TextBox1.Text

      1. Grazie mille. Ho capito tutto.
        Avrei un'altra domanda: E' possibile dopo l'inserimento far chiudere il form e tornare al foglio precedente?
        Cerco di spiegarmi meglio: Ho inserito il bottone del form nel foglio 2. La macro mi inserisce i campi nel foglio 1. Una volta premuto inserisci vorrei che il form si chiudesse e mi tornasse (o mi rimanesse) al foglio 2 dove ero partito.

        Grazie mille

  10. Buongiorno,

    Ho fatto esattamente come lei, ma mi esce il seguente errore quando provo ad eseguire:
    "Errore di run-time 424, necessario oggetto"

    Ho controllato tutto. Schiacciando f8 ho visto che si blocca subito all'inizio del ciclo If. Cosa sarà successo secondo lei?

    1. Salve Pamela,
      quel tipo di errore viene mostrato quando manca un riferimento a un oggetto come ad esempio TextBox, ComboBox, ListBox, Label, ecc..
      Se son presenti più UserForm allora ti suggerisco di completare il codice specificando il riferimento alla UserForm come ad esempio:
      UserForm1.TextBox1

      Inoltre nell'esempio ho rinominato la UserForm1 in MascheraExcel.

      Pertanto fai una verifica sui nomi.

      Attendo un tuo riscontro;)

  11. Salve,

    nel mio caso devo iniziare a scrivere i record a partire dalla cella C5, ho modificato ma ricevo un messaggio di errore:

    Private Sub CommandButton1_Click()
    Dim UltimaRiga As Long

    If Range("C5").Value = "" Then
    Cells(5, 3).Value = TextBox1.Value
    Cells(5, 4).Value = TextBox2.Value
    Cells(5, 5).Value = TextBox3.Value
    Cells(5, 6).Value = TextBox4.Value
    Else
    'Individua la prima riga vuota
    UltimaRiga = Range("C5").End(xlDown).Row + 1

    Cells(UltimaRiga, 1).Value = TextBox1.Value
    Cells(UltimaRiga, 2).Value = TextBox2.Value
    Cells(UltimaRiga, 3).Value = TextBox3.Value
    Cells(UltimaRiga, 4).Value = TextBox4.Value
    End If
    End Sub

    una volta avviata la macro ed inseriti i dati ricevo errore run time 1004

    1. Ciao Luigi,
      ti suggerisco la correzione:

      Private Sub CommandButton1_Click()
      Dim UltimaRiga As Long

      If Range("C5").Value = "" Then
      Cells(5, 3).Value = TextBox1.Value
      Cells(5, 4).Value = TextBox2.Value
      Cells(5, 5).Value = TextBox3.Value
      Cells(5, 6).Value = TextBox4.Value
      Else
      'Individua la prima riga vuota
      UltimaRiga = Range("C5").End(xlDown).Row

      Cells(UltimaRiga, 3).Value = TextBox1.Value
      Cells(UltimaRiga, 5).Value = TextBox2.Value
      Cells(UltimaRiga, 5).Value = TextBox3.Value
      Cells(UltimaRiga, 6).Value = TextBox4.Value
      End If
      End Sub

      Il +1 assegnato all'ultima riga mostra l'errore in quanto si chiede ad Excel di fare riferimento a una riga che supera il numero 1048576

  12. Complimenti per la spiegazione molto chiara.
    In periodo di pandemia ho creato un foglio excel (2019) per la registrazione dei visitatori. Alla fine dell' ultimo campo della registrazione, tramite gli strumenti di disegno e sfruttando uno schermo touch acquisisco la firma della persona che si registra. Il tutto è realizzato con un secondo schermo su cui la segreteria compila i dati del visitatore e lui tramite il "dito" sullo schermo appone la firma. A fine giornata fiene fatta la stampa in PDF dei dati acquisiti.
    Vorrei creare una maschera d'inserimento che mi permetta di fare la stessa cosa ma mi riesce difficile capire come gestire l'inserimento della firma.
    Qualche suggerimento.
    Grazie

    1. Salve Raffaele,
      grazie per aver apprezzato la spiegazione.
      Per quanto riguarda la tua richiesta posso anticiparti che probabilmente Excel non è lo strumento più adatto per gestire l'inserimento di una firma se non in modalità testo.
      Sarebbe necessario fare un approfondimento ulteriore per capire se il tutto può essere realizzato e per darti qualche suggerimento.

  13. Ciao Daminano,
    complimenti per la chiarezza e la gestione. Ho trovato la tua pagina utilissima.
    Ho bisogno di aiuto però... non ne vado fuori. Mi da errore 1004 sulla riga di codice

    UltimaRiga = Foglio3.Range(&quot;B2&quot;).End(X1Down).Row + 1

    questo l'intero codice

    Private Sub CommandButton1_Click()
    Dim UltimaRiga As Long

    If Foglio3.Range(&quot;B2&quot;).Value = &quot; &quot; Then
    Foglio3.Cells(2, 2).Value = TextBox1.Value
    Foglio3.Cells(2, 3).Value = TextBox2.Value
    Foglio3.Cells(2, 4).Value = TextBox3.Value
    Foglio3.Cells(2, 5).Value = TextBox4.Value
    Foglio3.Cells(2, 6).Value = TextBox5.Value
    Foglio3.Cells(2, 7).Value = TextBox6.Value
    Foglio3.Cells(2, 8).Value = TextBox7.Value
    Foglio3.Cells(2, 9).Value = TextBox8.Value
    Else
    ' Individua la prima riga vuota
    UltimaRiga = Foglio3.Range(&quot;B2&quot;).End(X1Down).Row

    Foglio3.Cells(UltimaRiga, 2).Value = TextBox1.Value
    Foglio3.Cells(UltimaRiga, 3).Value = TextBox2.Value
    Foglio3.Cells(UltimaRiga, 4).Value = TextBox3.Value
    Foglio3.Cells(UltimaRiga, 5).Value = TextBox4.Value
    Foglio3.Cells(UltimaRiga, 6).Value = TextBox5.Value
    Foglio3.Cells(UltimaRiga, 7).Value = TextBox6.Value
    Foglio3.Cells(UltimaRiga, 8).Value = TextBox7.Value
    Foglio3.Cells(UltimaRiga, 9).Value = TextBox8.Value
    End If

    End Sub

    1. Ciao Luca,
      prova così ...
      ================================
      Private Sub CommandButton1_Click()
      Dim UltimaRiga As Long

      If Foglio3.Range("B2").Value = " " Then
      Foglio3.Cells(2, 2).Value = TextBox1.Value
      Foglio3.Cells(2, 3).Value = TextBox2.Value
      Foglio3.Cells(2, 4).Value = TextBox3.Value
      Foglio3.Cells(2, 5).Value = TextBox4.Value
      Foglio3.Cells(2, 6).Value = TextBox5.Value
      Foglio3.Cells(2, 7).Value = TextBox6.Value
      Foglio3.Cells(2, 8).Value = TextBox7.Value
      Foglio3.Cells(2, 9).Value = TextBox8.Value
      Else
      ' Individua la prima riga vuota
      UltimaRiga = Foglio3.Cells(Foglio3.Rows.Count, "B").End(xlUp).Row + 1
      Foglio3.Cells(UltimaRiga, 2).Value = TextBox1.Value
      Foglio3.Cells(UltimaRiga, 3).Value = TextBox2.Value
      Foglio3.Cells(UltimaRiga, 4).Value = TextBox3.Value
      Foglio3.Cells(UltimaRiga, 5).Value = TextBox4.Value
      Foglio3.Cells(UltimaRiga, 6).Value = TextBox5.Value
      Foglio3.Cells(UltimaRiga, 7).Value = TextBox6.Value
      Foglio3.Cells(UltimaRiga, 8).Value = TextBox7.Value
      Foglio3.Cells(UltimaRiga, 9).Value = TextBox8.Value
      End If

      End Sub
      ================================

  14. Bel tutorial e sicuramente seguirò il corso ma ho provato a inserire le indicazioni in una esercitazione ma senza nessun successo pur avendo controllato e ricontrollato le frasi codice.
    Quando lancio esegui, mi restituisce "errore di compilazione", "carattere non valido"

    1. Ciao Diego,
      potrebbe essere un problema legato alla variabile UltimaRiga.
      Ti propongo il codice che potrai copiare ed incollare:

      UltimaRiga = Range("A1").End(xlDown).Row + 1

      Fammi sapere se questo ti consente di risolvere il problema

  15. Buongiorno Damiano innanzitutto complimenti per gli ottimi tutorial!
    Ho creato userform ed eseguite senza problemi per un po'......ora provando ad eseguirle nuovamente ottengo

    Errore di run-time '70': Autorizzazione negata.

    il debug si blocca sull'apertura della form
    Sub Pulsante1_Click()
    UserForm1.Show
    End Sub

    nessun file protetto o inaccessibile, impostazioni macro attivate.... non riesco a trovare soluzioni

    Grazie per ogni help!!!

    1. ...e come al solito quando si chiama l'esperto il problema sparisce subito!

      in realtà ho trovato l'errore, dimenticato Rowsource impostato per un combobox nella form nonostante avessi aggiunto .AddItem per creare l'elenco

      Ora tutto ok, grazie e buon lavoro!

  16. Buon pomeriggio,
    ho seguito il suo consiglio, chiarissimo, e riesco a creare la maschera ma ho problemi con il modulo di richiamo della stessa.
    Seguo tutto passo passo ma quando provo mi dice errore oggetto mancante

  17. Buongiorno,

    grazie per questo tutorial mi è stato molto utile.
    Avrei solo una domanda.

    E' possibile far si che cliccando sul pulsante inserisci si riempiano più fogli di lavoro?
    Cioè non solo il foglio dove ho posizionato il pulsante per aprire la mascara.

    1. Buongiorno Dalia,
      puoi utilizzare un ciclo per inserire più dati all'interno di un foglio di lavoro.
      Ad esempio:

      For i = 1 To Sheets.Count
      'Azione da ripetere
      Next i

      Spero il suggerimento ti sia utile 😉

  18. Buonasera,
    grazie mille per il tutorial. Ho seguito tutti i passi per la creazione del form, però non riesco ad eseguirlo. Dopo aver selezionato UserForm 1 , quando schiaccio su "esegui" o F5 mi apre la finestra della Macro, dove mi chiede il titolo e di crearne una nuova.
    grazie

    1. Ciao Federico,
      grazie.
      Per avviare la UserForm1 devi creare un modulo con una macro come la seguente:

      Sub MostraUserForm()
      UserForm1.Show
      End Sub

      Successivamente assegna questa macro a un pulsante.
      Fammi sapere se riesci a risolvere.

  19. Ho scaricato il tuo codice, grazie infinite ! Ho aggiunto un pulsante di chiusura e volevo prima di chiudere la maschera che mi mettesse in ordine alfabetico la colonna A. Non so se è nel posto giusto o se ho dimenticato qualcosa.

    Private Sub CommandButton1_Click()
    Dim UltimaRiga As Long

    If Range("A2").Value = "" Then
    Cells(2, 1).Value = TextBox1.Value
    Cells(2, 2).Value = TextBox2.Value
    Cells(2, 3).Value = TextBox3.Value
    Cells(2, 4).Value = TextBox4.Value
    Cells(2, 5).Value = TextBox5.Value
    Cells(2, 6).Value = TextBox6.Value
    Cells(2, 7).Value = TextBox7.Value
    Cells(2, 8).Value = TextBox8.Value
    Cells(2, 9).Value = TextBox9.Value
    Else
    'Individua la prima riga vuota
    UltimaRiga = Range("A1").End(xlDown).Row + 1
    'Range("A1").CurrentRegion.Rows.Count 1

    Cells(UltimaRiga, 1).Value = TextBox1.Value
    Cells(UltimaRiga, 2).Value = TextBox2.Value
    Cells(UltimaRiga, 3).Value = TextBox3.Value
    Cells(UltimaRiga, 4).Value = TextBox4.Value
    Cells(UltimaRiga, 5).Value = TextBox5.Value
    Cells(UltimaRiga, 6).Value = TextBox6.Value
    Cells(UltimaRiga, 7).Value = TextBox7.Value
    Cells(UltimaRiga, 8).Value = TextBox8.Value
    Cells(UltimaRiga, 9).Value = TextBox9.Value
    End If

    End Sub

    Sub OrdinamentoCrescente()
    Range("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
    End Sub

    Private Sub CommandButton2_Click()
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox3.Value = ""
    TextBox4.Value = ""
    TextBox5.Value = ""
    TextBox6.Value = ""
    TextBox7.Value = ""
    TextBox8.Value = ""
    TextBox9.Value = ""
    End Sub

    Private Sub btnSalvaEsci_Click()
    'Salva il file prima di chiudere
    ActiveWorkbook.Save

    'Evito eventuali avvisi prima di chiudere
    Application.DisplayAlerts = False
    Application.Quit
    Application.DisplayAlerts = True
    End Sub

    Grazie in anticipo

    1. Ciao Antonio,
      ecco la soluzione:
      All'interno del codice di chiusura inserisci il richiamo alla macro che si occupa dell'ordinamento (Call OrdinamentoCrescente).

      Private Sub btnSalvaEsci_Click()
      Call OrdinamentoCrescente
      'Salva il file prima di chiudere
      ActiveWorkbook.Save
      'Evito eventuali avvisi prima di chiudere
      Application.DisplayAlerts = False
      Application.Quit
      Application.DisplayAlerts = True
      End Sub

      Sub OrdinamentoCrescente()
      Range("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
      End Sub

      1. Grazie infinite Damiano per la pronta risposta.
        Ho provato a testare ma mi mette in ordine solo la prima colonna e non tutte le 9 colonne e mi scala tutti i dati delle altre colonne. Dove sbaglio ?

        1. Ciao Antonio,
          prova ad utilizzare la seguente macro modificata per fare l'ordinamento:

          Sub OrdinamentoCrescente()
          ActiveSheet.Sort.SortFields.Clear
          ActiveSheet.Sort.SortFields.Add2 Key:=Range("A1").CurrentRegion, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
          With ActiveSheet.Sort
          .SetRange Range(Range("A1").CurrentRegion.Address)
          .Header = xlYes
          .MatchCase = False
          .Orientation = xlTopToBottom
          .SortMethod = xlPinYin
          .Apply
          End With
          End Sub

          Al posto di ActiveSheet puoi inserire il nome del foglio specifico, ad esempio:
          Worksheets("Prova")

          1. errore di run-time 1004
            riferimento di ordinamento non valido. assicurarsi che sia compreso nei dati da ordinare e che la prima casella ordina per non sia identica o vuota

            Debug .Apply

            Non vorrei però crearti problemi.
            Grazie ancora

          2. Ciao Antonio,
            non sapendo quale è l'intervallo dei tuoi dati ti suggerisco il codice per fare l'ordinamento:

            Worksheets("Foglio1").Sort.SortFields.Clear
            Worksheets("Foglio1").Sort.SortFields.Add2 Key:=Range("A2:A20" _
            ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With Worksheets("Foglio1").Sort
            .SetRange Range("A1:D20")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
            End With

            Sostituisci il riferimento agli intervalli e i nomi dei fogli sulla base dei tuoi dati.

  20. Buongiorno
    ho creato un modulo seguendo le vostre istruzioni, ma ho un problema, quando lo chiudo e lo riapro i dati che mi fa inserire partono dall'ultima riga della tabella e non dalla prima riga disponibile, quella successiva all'ultimo dato inserito, come posso risolvere questo problema? grazie cordiali saluti

    1. Salve Fabrizio,
      se hai rispettato le indicazioni dell'articolo, ti suggerisco di utilizzare in alternativa il seguente codice per la varabile UltimaRiga:
      UltimaRiga = Range("A1").CurrentRegion.Rows.Count + 1
      Saluti
      Damiano

  21. Buonasera, grazie prima di tutto per le info.
    La mia domanda è come fare per implementare un controllo che vari il foglio in cui inserire i dati della maschera.
    Ovvero, ho la maschera su Foglio1 ed ho poi X Fogli tutti identici (Colonne/riche), vorrei poter scegliere sulla maschera anche il Foglio in cui inserire i dati.
    Grazie

    1. Salve Francesco,
      grazie.
      Dovresti inserire una casella combinata che ti permetta di selezionare il nome del foglio su cui inserire i dati.
      Una volta indicato il foglio sei in grado di inserire i dati dove desideri.

  22. Buongiorno Sig. Damiano. Io ero abituato, quando programmavo in asp, ad avere una maschera che potevo aprire (user and password) e da li andare a lavorare inserendo, o facendo altre cose. Questo è possibile farlo anche in excel e poi lavorare sul programma?
    In pratica avere una userform sul desktop e quindi lavorare anche in excel senza che però questo si veda?

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