Come creare un modulo in Microsoft Excel
Il modulo di prenotazione del corso è un semplice modulo che illustra i principi del design UserForm e la codifica VBA associata .
Utilizza una selezione di controlli tra cui caselle di testo, caselle combinate, pulsanti di opzione raggruppati in una cornice, caselle di controllo e pulsanti di comando .
Quando l’utente fa clic sul pulsante OK, il suo input viene inserito nella successiva riga disponibile del foglio di lavoro .
Descrizione del modulo excel:
Ci sono due semplici caselle di testo (Name: _ e _Phone: _) in cui l’utente può digitare testo libero e due caselle combinate (_Department e Course)
che consentono all’utente di scegliere un elemento dall’elenco.
Ci sono tre pulsanti di opzione (Introduction, Intermediate e Advanced) raggruppati in un frame (Level) in modo che l’utente possa scegliere solo una delle opzioni.
Sono presenti due caselle di controllo (Lunch Required e Vegetarian) che, poiché non sono raggruppate in un frame, possono essere selezionate entrambe se necessario.
Tuttavia, se la persona che effettua la prenotazione non desidera il pranzo, non è necessario sapere se è vegetariana o meno. Quindi, la casella di controllo Vegetarian è disattivata fino a quando non viene richiesto.
Ci sono tre pulsanti di comando (OK, Cancel e Clear Form) ognuno dei quali esegue una funzione predefinita quando viene cliccato.
Le impostazioni delle proprietà di controllo:
Control |
Type |
Property |
Setting |
UserForm |
UserForm |
Name |
frmCourseBooking |
Caption |
Course Booking Form |
||
Name |
Text Box |
Name |
txtName |
Phone |
Text Box |
Name |
txtPhone |
Department |
Combo Box |
Name |
cboDepartment |
Course |
Combo Box |
Name |
cboCourse |
Level |
Frame |
Name |
fraLevel |
Caption |
Level |
||
Introduction |
Option Button |
Name |
optIntroduction |
Intermediate |
Option Button |
Name |
optIntermediate |
Advanced |
Option Button |
Name |
optAdvanced |
Lunch Required |
Check Box |
Name |
chkLunch |
Vegetarian |
Check Box |
Name |
chkVegetarian |
Enabled |
False |
||
OK |
Command Button |
Name |
cmdOk |
Caption |
OK |
||
Default |
True |
||
Cancel |
Command Button |
Name |
cmdCancel |
Caption |
Cancel |
||
Cancel |
True |
||
Clear Form |
Command Button |
Name |
cmdClearForm |
=== Creazione di moduli in Excel Se si desidera creare il modulo da soli, è sufficiente copiare il layout mostrato nell’illustrazione sopra. Segui i passaggi seguenti:
-
Aprire la cartella di lavoro a cui si desidera che il modulo appartenga (i moduli utente come le macro devono essere allegati a una cartella di lavoro) e passare a Visual Basic Editor.
-
In Visual Basic Editor, fare clic sul pulsante Inserisci UserForm (o andare su Inserisci> UserForm).
-
Se la casella degli strumenti non viene visualizzata da sola (prima fai clic sul modulo per assicurarti che non si nasconda) fai clic sul pulsante Casella degli strumenti (o vai a Visualizza> Casella degli strumenti).
-
Per inserire un controllo nel modulo, fare clic sul pulsante appropriato nella casella degli strumenti, quindi fare clic sul modulo. I controlli possono essere spostati trascinandoli dai bordi o ridimensionati trascinando i pulsanti lungo il loro perimetro.
-
Per modificare le proprietà di un controllo, assicurarsi che il controllo scelto sia selezionato, quindi apportare le modifiche appropriate nella finestra Proprietà. Se non riesci a vedere la finestra delle proprietà, vai a Visualizza> Finestra Proprietà.
-
Per rimuovere un controllo dal modulo, selezionalo e fai clic sul tasto Canc sulla tastiera.
Un UserForm non eseguirà effettivamente nulla finché non vengono creati il codice che guida il modulo ei suoi vari controlli. Il passaggio successivo consiste nello scrivere il codice che guida il modulo stesso.
Aggiunta del codice: 1 Inizializzazione del modulo === == Inizializzazione del modulo:
La maggior parte dei moduli necessita di un qualche tipo di configurazione quando si apre. Potrebbe essere l’impostazione dei valori predefiniti, assicurandosi che il campo sia vuoto o la creazione di elenchi di caselle combinate. Questo processo si chiama Initialising the Form ed è curato da una macro chiamata UserForm_Initialize (nel caso in cui tu sia confuso dalla mia ortografia variabile della parola “initialis (z) e”, è perché parlo inglese e VBA parla americano – ma non preoccuparti, VBA lo scriverà per te!). Ecco come costruire il codice per inizializzare il Modulo di prenotazione del corso:
-
Per visualizzare la finestra del codice del modulo, vai su Visualizza> Codice o fai clic su F7.
-
Quando la finestra del codice si apre per la prima volta, contiene una procedura UserForm_Click () vuota. Usa gli elenchi a discesa nella parte superiore della finestra del codice per scegliere UserForm e Initialize. Questo creerà la procedura di cui hai bisogno. È ora possibile eliminare la procedura UserForm_Click ().
-
Immettere il seguente codice nella procedura:
Private Sub UserForm_Initialize() txtName.Value = "" txtPhone.Value = "" With cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem "Dispatch" .AddItem "Transportation" End With cboDepartment.Value = "" With cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" End With cboCourse.Value = "" optIntroduction = True chkLunch = False chkVegetarian = False txtName.SetFocus End Sub
Come funziona il codice di inizializzazione:
Lo scopo della procedura UserForm_Initialize () è preparare il form utente in VBA per l’uso, impostando i valori di default per i vari controlli e creando gli elenchi che verranno visualizzati dalle caselle combinate.
Queste righe impostano il contenuto delle due caselle di testo su vuoto:
txtName.Value = "" txtPhone.Value = ""
Poi vengono le istruzioni per le caselle combinate. Prima di tutto viene specificato il contenuto dell’elenco, quindi il valore iniziale della casella combinata viene impostato su vuoto.
With cboDepartment .AddItem "Sales" .AddItem "Marketing" (as many as necessary…) End With
cboDepartment.Value = “”
Se necessario, è possibile effettuare una scelta iniziale dal gruppo di opzioni, in questo caso:
optIntroduction = True Entrambe le caselle di controllo sono impostate su False (ovvero nessun segno di spunta). Imposta a True se vuoi che la casella di controllo appaia già spuntata:
chkLunch = False chkVegetarian = False Infine, il focus viene portato alla prima casella di testo. Questo posiziona il cursore dell’utente nella casella di testo in modo che non sia necessario fare clic sulla casella prima di iniziare a digitare:
txtName.SetFocus === Aggiunta del codice: 2 Far funzionare i pulsanti Ci sono tre pulsanti di comando sul modulo e ciascuno deve essere alimentato dalla propria procedura. A cominciare da quelli semplici…
Codifica del pulsante Annulla:
In precedenza, abbiamo utilizzato la finestra Proprietà per impostare la proprietà Annulla del pulsante Annulla su True. Quando si imposta la proprietà Annulla di un pulsante di comando su True, ciò ha l’effetto di “fare clic” su quel pulsante quando l’utente preme il tasto Esc sulla tastiera. Ma questo da solo non farà accadere nulla al modulo. È necessario creare il codice per l’evento click del pulsante che, in questo caso, chiuderà il form. Ecco come fare:
-
Con il Form utente aperto per la modifica in Visual Basic Editor, fare doppio clic sul pulsante Annulla. La finestra del codice del modulo si apre con la procedura cmdCancel_Click () pronta per la modifica.
-
Il codice per chiudere un form è molto semplice. Aggiungi una riga di codice alla procedura in modo che assomigli a questo:
Private Sub cmdCancel_Click() Unload Me End Sub
Codifica del pulsante Cancella modulo:
Ho aggiunto un pulsante per cancellare il modulo nel caso in cui l’utente volesse cambiare idea e azzerare tutto, e per rendere più semplice se avesse più prenotazioni da effettuare contemporaneamente. Tutto quello che deve fare è eseguire nuovamente la procedura di inizializzazione. Si può dire a una macro di eseguire un’altra macro (o una serie di macro se necessario) usando la parola chiave Call:
-
Fare doppio clic sul pulsante Cancella modulo. La finestra del codice del modulo si apre con la procedura cmdClearForm_Click () pronta per la modifica.
-
Aggiungi una riga di codice alla procedura in modo che assomigli a questo:
Private Sub cmdClearForm_Click() Call UserForm_Initialize End Sub
Codifica del pulsante OK:
Questo è il pezzo di codice che deve svolgere il compito di trasferire le scelte dell’utente e l’immissione di testo sul foglio di lavoro. Quando impostiamo la proprietà Annulla del pulsante Annulla su True, impostiamo anche la proprietà Default del pulsante OK su True. Si tratta di fare clic sul pulsante OK quando l’utente preme il tasto Invio (o Invio) sulla tastiera (a condizione che non abbia utilizzato il tasto Tab per passare a un altro pulsante).
Ecco il codice per far funzionare il pulsante:
-
Fare doppio clic sul pulsante OK. La finestra del codice del modulo si apre con la procedura cmdOK_Click () pronta per la modifica.
-
Modificare la procedura per aggiungere il seguente codice:
Private Sub cmdOK_Click() ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select Do If IsEmpty(ActiveCell) = FalseThen ActiveCell.Offset(1, 0).Select End If Loop Until IsEmpty(ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset(0, 4).Value = "Adv" End If If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Yes" Else ActiveCell.Offset(0, 5).Value = "No" End If If chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "No" End If End If Range("A1").Select End Sub
Come funziona il codice CmdOK_Click:
Le prime due righe assicurano che la cartella di lavoro corretta sia attiva e sposta la selezione nella cella A1:
ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select The next few lines moves the selection down the worksheet until it finds an empty cell: Do If IsEmpty(ActiveCell) = False Then ActiveCell.Offset(1, 0).Select End If Loop Until IsEmpty(ActiveCell) = True
Le quattro righe successive iniziano a scrivere il contenuto del modulo sul foglio di lavoro, utilizzando la cella attiva (che è nella colonna A) come riferimento e spostando lungo la riga una cella alla volta:
ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value
Veniamo ora ai pulsanti di opzione. Questi sono stati inseriti in una cornice nel modulo in modo che l’utente possa sceglierne solo uno. Un’istruzione IF viene utilizzata per indicare a Excel cosa fare per ciascuna opzione:
If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset(0, 4).Value = "Adv" End If
Le istruzioni IF VBA sono molto più facili da gestire rispetto alla funzione IF di Excel.
Puoi avere tutte le opzioni che desideri, basta inserire un ElseIf aggiuntivo per ciascuna. Se ci fossero solo due opzioni, non avresti bisogno di ElseIf, solo If ed Else sarebbero sufficienti (non dimenticare: hanno tutti bisogno di un End If).
C’è un’altra istruzione IF per ogni casella di controllo. Per la casella di controllo Pranzo richiesto, un segno di spunta nella casella significa “Sì” la persona richiede il pranzo e nessun segno di spunta significa “No” non lo fanno.
If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Yes" Else ActiveCell.Offset(0, 5).Value = "No" End If
Potremmo usare un’istruzione IF simile per la casella di controllo Vegetariano, ma se la persona non richiede il pranzo è irrilevante che sia o meno vegetariana. In ogni caso, sarebbe sbagliato presumere che non fossero vegetariani semplicemente perché non richiedevano il pranzo. L’istruzione IF contiene quindi una seconda istruzione if annidata:
If chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "No" End If End If
Un segno di spunta nella casella significa “Sì”, la persona è vegetariana. Se non è presente un segno di spunta nella casella, l’istruzione IF annidata esamina la casella di controllo Pranzo richiesto. Se la casella di controllo Pranzo richiesto ha un segno di spunta, nessun segno di spunta nella casella Vegetariano significa che la persona non è vegetariana, quindi inserisce “No” nella cella. Tuttavia, se la casella di controllo Pranzo Richiesto non ha un segno di spunta, non sappiamo se la persona è vegetariana (non importa comunque), quindi la cella viene lasciata vuota (“”).
Infine la selezione viene riportata all’inizio del foglio di lavoro, pronta per l’immissione successiva:
Intervallo (“A1”) Selezionare === Aggiunta del codice 3: Manipolazione del modulo Infine, un esempio di come i controlli di un modulo possono essere manipolati mentre è in uso. Quando sono state impostate le proprietà del controllo, la proprietà Enabled della casella di controllo Vegetarian era impostata su False. Quando un controllo non è abilitato, l ‘utente non può inserire un valore in esso, sebbene possa contenere un valore che era già presente e VBA può aggiungere, rimuovere o modificare il valore.
Non abbiamo bisogno di sapere se la persona è vegetariana (anche se lo è!) Se non sta ordinando il pranzo. Pertanto, la casella di controllo Vegetariano rimane disattivata a meno che non venga inserito un segno di spunta nella casella di controllo Pranzo richiesto. Quindi l’utente è libero di spuntare la casella di controllo Vegetariano se lo desidera. Se spuntano, sapremo che hanno risposto “Sì” e se non lo fanno sappiamo che hanno risposto “No”.
È possibile alternare la proprietà Enabled da False a True disponendo di una procedura che viene eseguita automaticamente ogni volta che il valore della casella di controllo Lunch Required cambia. Fortunatamente, più controlli hanno una procedura Change e quella che usiamo qui è chkLunch_Change (). Lo useremo per abilitare la casella di controllo Vegetariano quando la casella di controllo Pranzo richiesto è selezionata e disabilitarla quando la casella di controllo Pranzo richiesto non è selezionata.
C’è solo un’altra cosa che dobbiamo fare. Supponiamo che qualcuno abbia spuntato la casella di controllo Pranzo richiesto e anche la casella Vegetariano. Quindi hanno cambiato idea e hanno rimosso il segno di spunta dalla casella di controllo Pranzo richiesto. La casella di controllo Vegetariano sarebbe disabilitata ma il segno di spunta precedentemente inserito rimarrebbe.
Una riga di codice aggiuntiva può assicurarsi che il segno di spunta venga rimosso quando la casella è disabilitata. Ecco il tutto:
Private Sub chkLunch_Change() If chkLunch = True Then chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Apertura del modulo Il modulo è ora pronto per l’uso quindi deve essere aperto con una semplice macro. Può essere collegato a un pulsante della barra degli strumenti personalizzato, un pulsante di comando disegnato nel foglio di lavoro o qualsiasi elemento grafico (fare clic con il pulsante destro del mouse sull’immagine e scegliere Assegna macro). Se necessario, crea un nuovo modulo per la cartella di lavoro e aggiungi questa procedura:
Sub OpenCourseBookingForm() frmCourseBooking.Show End Sub
Se i nostri blog ti sono piaciuti, condividilo con i tuoi amici su Facebook. E anche tu puoi seguirci su Twitter e Facebook.
_ Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare, integrare o innovare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]_