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 riga successiva disponibile sul foglio di lavoro.
Descrizione del modulo excel:
Ci sono due semplici caselle di testo (Nome: e Telefono:) in cui l'utente può digitare del testo libero e due caselle combinate (Dipartimento e Corso) che consentono all'utente di selezionare un elemento dall'elenco.
Ci sono tre pulsanti di opzione (introduzione, Intermedio e Avanzate) raggruppati in una cornice (Livello) in modo che l'utente possa scegliere solo una delle opzioni.
Ci sono due caselle di controllo (Pranzo richiesto e Vegetariano) che, non essendo raggruppati in una cornice, possono essere scelti entrambi se necessario. Tuttavia, se la persona che effettua la prenotazione non desidera il pranzo, non è necessario sapere se è vegetariano o meno. Così il Vegetariano la casella di controllo è disattivata fino a quando non è richiesta.
Ci sono tre pulsanti di comando (ok, Annulla e Forma chiara) ognuno dei quali esegue una funzione predefinita quando viene cliccato.
Le impostazioni delle proprietà di controllo:
Controllo | Tipo | Proprietà | Collocamento |
Modulo utente | Modulo utente | Nome | frmCourseBooking |
Didascalia | Modulo di prenotazione del corso | ||
Nome | Casella di testo | Nome | txtNome |
Telefono | Casella di testo | Nome | txtTelefono |
Dipartimento | Combo box | Nome | cboDepartment |
Corso | Combo box | Nome | cboCorso |
Livello | Portafoto | Nome | fraLevel |
Didascalia | Livello | ||
introduzione | Pulsante di opzione | Nome | optIntroduzione |
Intermedio | Pulsante di opzione | Nome | optIntermediate |
Avanzate | Pulsante di opzione | Nome | optAdvanced |
Pranzo richiesto | Casella di controllo | Nome | chkPranzo |
Vegetariano | Casella di controllo | Nome | chkVegetarian |
Abilitato | falso | ||
ok | Pulsante di comando | Nome | cmdOk |
Didascalia | ok | ||
Predefinito | Vero | ||
Annulla | Pulsante di comando | Nome | cmdAnnulla |
Didascalia | Annulla | ||
Annulla | Vero | ||
Forma chiara | Pulsante di comando | Nome | cmdClearForm |
Creazione di moduli in Excel
Se vuoi costruire il modulo da solo, copia semplicemente il layout mostrato nell'illustrazione sopra. Segui i passaggi seguenti:
1. Aprire la cartella di lavoro a cui si desidera far appartenere il modulo (i moduli utente come le macro devono essere allegati a una cartella di lavoro) e passare all'editor di Visual Basic.
2. Nell'editor di Visual Basic, fare clic su Inserisci modulo utente pulsante (o vai a Inserisci > Form utente).
3. Se la casella degli strumenti non appare da sola (prima fai clic sul modulo per assicurarti che non si nasconda) fai clic su Cassetta degli attrezzi pulsante (o vai a Visualizza > Casella degli strumenti).
4. Per posizionare un controllo sul modulo, fare clic sul pulsante appropriato nella casella degli strumenti, quindi fare clic sul modulo. I controlli possono essere spostati trascinandoli per i bordi o ridimensionati trascinando i pulsanti lungo il perimetro.
5. Per modificare le proprietà di un controllo, assicurarsi che il controllo scelto sia selezionato, quindi apportare le modifiche appropriate nel Proprietà finestra. Se non riesci a vedere la finestra delle proprietà vai a Visualizza > Finestra Proprietà.
6. Per rimuovere un controllo dal modulo, selezionalo e fai clic su Elimina tasto sulla tastiera.
Un Form utente non eseguirà effettivamente nulla finché non verrà creato il codice che guida il form 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 impostazione quando si aprono. Potrebbe trattarsi di impostare valori predefiniti, assicurarsi che i campi siano vuoti o creare elenchi di caselle combinate. Questo processo si chiama Inizializzazione del modulo ed è gestito da una macro chiamata UserForm_Initialize (nel caso in cui sei confuso dalla mia diversa ortografia della parola "initialis(z)e", è perché parlo inglese e VBA parla americano - ma non preoccuparti, VBA lo farà scrivilo per te!). Ecco come creare il codice per inizializzare il modulo di prenotazione del corso:
1. Per visualizzare la finestra del codice del modulo vai a Visualizza > Codice o clicca F7.
2. Quando la finestra del codice si apre per la prima volta, contiene un vuoto UserForm_Click() procedura. Utilizza gli elenchi a discesa nella parte superiore della finestra del codice per scegliere Modulo utente e Inizializzare. Questo creerà la procedura di cui hai bisogno. È ora possibile eliminare la procedura UserForm_Click().
3. Inserisci il seguente codice nella procedura:
Private Sub UserForm_Initialize() txtName.Value = "" txtPhone.Value = "" Con cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem "Dispatch" . AddItem "Transportation" Termina con cboDepartment.Value = "" Con cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" Termina con cboCourse.Value = "" optIntroduction = True chkLunch = Falso chkVegetarian = Falso txtName.SetFocus End Sub
Come funziona il codice di inizializzazione:
Lo scopo della procedura UserForm_Initialize() è preparare il form utente in VBA per l'utilizzo, impostando i valori di default per i vari controlli e creando gli elenchi che mostreranno le 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.
Con cboDepartment .AddItem "Sales" .AddItem "Marketing" (tanto quanto necessario… ) Termina con
cboDepartment.Value = ""
Se richiesto si può effettuare una prima scelta dal gruppo di opzioni, in questo caso:
optIntroduction = True
Entrambe le caselle di controllo sono impostate su False (ovvero nessun segno di spunta). Impostare su True se si desidera che la casella di controllo appaia già selezionata:
chkLunch = False
chkVegetarian = False
Infine, lo stato attivo viene portato alla prima casella di testo. Questo posiziona il cursore dell'utente nella casella di testo in modo che non debba 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 form e ognuno deve essere alimentato dalla propria procedura. A cominciare da quelli semplici…
Codifica del pulsante Annulla:
In precedenza, abbiamo usato la finestra delle proprietà per impostare il Annulla proprietà del pulsante Annulla per Vero. Quando si imposta la proprietà Annulla di un pulsante di comando su True, questo ha l'effetto di "fare clic" su quel pulsante quando l'utente preme il Esc tasto sulla loro tastiera. Ma questo da solo non farà accadere nulla alla forma. È necessario creare il codice per l'evento click del pulsante che, in questo caso, chiuderà il modulo. Ecco come:
1. Con il Form utente aperto per la modifica nell'editor di Visual Basic, fare doppio clic sul pulsante Annulla. La finestra del codice del modulo si apre con cmdCancel_Click() procedura pronta per la modifica.
2. 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 resettare tutto, e per rendere più semplice se avesse più prenotazioni da effettuare contemporaneamente. Tutto ciò che deve fare è eseguire nuovamente la procedura di inizializzazione. È possibile dire a una macro di eseguire un'altra macro (o una serie di macro se necessario) utilizzando il pulsante Chiamata parola chiave:
1. Fare doppio clic sul pulsante Cancella modulo. La finestra del codice del modulo si apre con cmdClearForm_Click() procedura pronta per la modifica.
2. Aggiungi una riga di codice alla procedura in modo che assomigli a questa:
Private Sub cmdClearForm_Click() Chiama 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'input di testo sul foglio di lavoro. Quando impostiamo la proprietà Cancel del pulsante Cancel su True, impostiamo anche il pulsante OK Predefinito proprietà a Vero. Questo deve fare clic sul pulsante OK quando l'utente preme il pulsante accedere (o Ritorno) sulla loro tastiera (a condizione che non abbiano usato il loro tab tasto per passare a un altro pulsante). Ecco il codice per far funzionare il pulsante:
1. Fare doppio clic sul pulsante OK. La finestra del codice del modulo si apre con cmdOK_Click() procedura pronta per la modifica.
2. Modificare la procedura per aggiungere il seguente codice:
Private Sub cmdOK_Click() ActiveWorkbook.Sheets ("Prenotazioni corsi"). Attiva intervallo ("A1"). Seleziona Do If IsEmpty (ActiveCell) = FalseThen ActiveCell.Offset (1, 0). Seleziona End If Loop fino a 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 Se optIntroduction = True Allora ActiveCell.Offset(0, 4) If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Sì" Else ActiveCell.Offset(0, 5).Value = "No" End If If chkVegetarian = True Then ActiveCell.Offset(0, 6). Value = "Sì" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "No" End If End If Range("A1"). Seleziona Fine Sotto
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 ("Prenotazioni del corso"). Attiva intervallo ("A1"). Seleziona Le righe successive spostano la selezione verso il basso nel foglio di lavoro finché non trova una cella vuota: Esegui se IsEmpty (ActiveCell) = False Then ActiveCell.Offset (1 , 0).Seleziona End If Loop fino a IsEmpty(ActiveCell) = True
Le quattro righe successive iniziano a scrivere il contenuto del modulo sul foglio di lavoro, utilizzando la cella attiva (che si trova nella colonna A) come riferimento e spostandosi lungo la fila 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
Ora veniamo ai pulsanti di opzione. Questi sono stati inseriti in una cornice sul modulo in modo che l'utente possa sceglierne solo uno. Un'istruzione IF viene utilizzata per indicare a Excel cosa fare per ciascuna opzione:
Se 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 SE di VBA sono molto più facili da gestire rispetto alla funzione SE di Excel. Puoi avere tutte le opzioni che vuoi, basta inserirne un'altra ElseIf per ognuno. Se ci fossero solo due opzioni, non avresti bisogno di ElseIf, solo il Se e Altro basterebbe (non dimenticare - hanno tutti bisogno di un Finisci se).
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" che non lo fanno.
If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Sì" Else ActiveCell.Offset(0, 5).Value = "No" End If
Potremmo usare un'istruzione IF simile per la casella di controllo Vegetariana, ma se la persona non richiede il pranzo è irrilevante che sia vegetariana o meno. 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:
Se chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Sì" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "No" Fine se Fine se
Un segno di spunta nella casella significa "Sì" la persona è vegetariana. Se non è presente alcun segno di spunta nella casella, l'istruzione IF nidificata esamina la casella di controllo Pranzo richiesto. Se la casella di controllo Pranzo richiesto ha un segno di spunta, allora nessun segno di spunta nella casella di controllo 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 o meno (non importa comunque) quindi la cella viene lasciata vuota ("").
Infine la selezione viene riportata all'inizio del foglio di lavoro, pronta per la voce successiva:
Intervallo("A1").Seleziona
Aggiunta del codice 3: manipolazione del modulo
Infine, un esempio di come i controlli su un form possono essere manipolati mentre è in uso. Quando le proprietà di controllo sono state impostate, il Abilitato la proprietà della casella di controllo Vegetariano è stata impostata su falso. Quando un controllo non è abilitato il 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 o meno (anche se lo è!) se non sta ordinando il pranzo. Pertanto, la casella di controllo Vegetariano rimane disabilitata 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 lo spuntano sapremo che hanno risposto "Sì" e se non lo fanno sapremo che hanno risposto "No".
Possiamo attivare il Abilitato proprietà da falso a Vero disponendo di una procedura che viene eseguita automaticamente ogni volta che il valore della casella di controllo Pranzo richiesto cambia. Fortunatamente, più controlli hanno a Modificare procedura e quella che usiamo qui è chkCambia_pranzo(). Lo useremo per abilitare la casella di controllo Vegetariano quando è selezionata la casella di controllo Pranzo richiesto e disabilitarla quando la casella di controllo Pranzo richiesto non è selezionata.
C'è solo un'altra cosa che dobbiamo fare. Supponendo che qualcuno abbia spuntato la casella di controllo Pranzo richiesto e abbia spuntato anche la casella di controllo Vegetariano. Poi hanno cambiato idea e hanno rimosso il segno di spunta dalla casella di controllo Pranzo richiesto. La casella di controllo Vegetariano verrebbe disabilitata ma il segno di spunta inserito in precedenza rimarrebbe.
Un'ulteriore riga di codice può garantire 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, a un pulsante di comando disegnato sul foglio di lavoro o a qualsiasi elemento grafico (fai clic con il pulsante destro del mouse sull'elemento grafico e scegli Assegna macro). Se necessario, crea un nuovo modulo per la cartella di lavoro e aggiungi questa procedura:
Sub OpenCourseBookingForm() frmCourseBooking.Show End Sub
Se ti è piaciuto il nostro blog, condividilo con i tuoi amici su Facebook. E puoi anche seguirci su Twitter e Facebook.
Ci piacerebbe avere tue notizie, facci sapere come possiamo migliorare, completare o innovare il nostro lavoro e renderlo migliore per te. Scrivici al sito di posta elettronica