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.
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:
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.
Ora, fai un clic sul menu Inserisci presente nella barra dei menu e seleziona la voce UserForm.
Viene visualizzata una UserForm vuota. Dovresti notare anche la presenza della Casella degli strumenti.
Qualora questa non fosse visibile, fai un clic sul menu Visualizza e successivamente sulla voce 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).
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.
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.
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.
Procediamo allo stesso modo per le altre etichette aggiungendo Nome, Indirizzo, Città.
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.
Successivamente, sempre dal menu Formato fai clic su Spaziatura verticale e seleziona la voce Rendi uguale.
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.
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.
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.
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.
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:
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.
Ecco il codice completo.
“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.
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.
In alternativa, è possibile andare nel menu Esegui e scegliere il comando Esegui Sub / UserForm.
La modalità di esecuzione che preferisco è quella attraverso il tasto funzione F5.
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:
Il risultato sarà il seguente:
Ora, inserisci la forma che desideri all’interno del foglio e aggiungi del testo.
Dopo averla inserita assegna la macro alla forma.
Fai clic con il pulsante destro del mouse e scegli la voce Assegna macro.
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!
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?
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;)
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.
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
'==========================================================================================
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?
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)
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.
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;)
Beh è chiaro, era solo un suggerimento per il tuo prossimo tutorial.
Saluti.
Grazie Emilio:)
Suggerimento accolto;)
Un caro saluto
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.
Grazie Claudio!
Ti suggerisco il seguente articolo:
https://www.excelpertutti.com/userform-excel-calcolo-della-media/
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 &#39;individua la prima riga vuota&#39; UltimaRiga &#x3D; Range(&quot;A1&quot;).End(x1Down).Row + 1 che mi sembra di averla scritta esattamente.
boh non capisco dove ho sbagliato.
Grazie
scusa forse il testo non è chiaro Lezione Maschere Excel UserForm e pulsanti
"UltimaRiga = Range("A1").End(x1Down).Row + 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
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
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?
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.
Chiaro, semplice e concreto. Una domanda: come far aprire il form a dimensione schermo? Grazie
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
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?
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
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...
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
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
Prima della chiusura della UserForm
Unload UserForm1
Utilizza il seguente codice per selezionare il foglio desiderato:
Foglio2.Select
oppure
Worksheets(2).Select
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?
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;)
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
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
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
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.
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("B2").End(X1Down).Row + 1
questo l'intero codice
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.Range("B2").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
Trovato, tutto OK
Grazie
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
================================
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"
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
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!!!
...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!
Grazie Morena, in prossimità dell'esperto gli errori spariscono 🤣🤣🤣
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
Ciao Luca,
prova ad utilizzare questo codice:
Sub ApriUserForm()
Load MascheraExcel
MascheraExcel.Show
End Sub
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.
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 😉
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
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.
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
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
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 ?
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")
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
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.
Grazie infinite, buon lavoro
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
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
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
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.
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?
Ciao Paolo,
ti suggerisco di dare uno sguardo al seguente articolo:
https://www.excelpertutti.com/modulo-excel-cose-e-come-crearlo/
Puoi sfruttare una finestra di dialogo che ti aiuta nell'inserimento dei dati senza usare il linguaggio delle macro