Per interagire con l’utente, per esempio quando chiediamo conferma prima di eseguire un’operazione, si usa la MsgBox e si cattura il pulsante premuto dall’utente e poi si esegue il codice di conseguenza. Esempio:
Dim intRisposta As Integer intRisposta = MsgBox("Vuoi inserire i dati?", vbOKCancel) If intRisposta = vbCancel Then ' qui inserirò il codice eseguito se ha premuto Annulla Else ' qui inserirò il codice eseguito se ha premuto OK End If
Creo la variabile intRisposta di tipo Integer perché la funzione MsgBox restituisce un valore Integer.
Poi assegno alla variabile ciò che restituisce la funzione MsgBox. Il primo argomento della MsgBox è il prompt, il messaggio che legge l’utente; il secondo argomento stabilisce quali pulsanti sono visualizzati nella finestra di dialogo.
Poi in base al pulsante premuto, scriverò il mio codice.
Sto sviluppando un’applicazione che viene utilizzata su tablet industriale con penna ottica. Quando l’operatore ha visto la prima beta, ha sottolineato l’esigua dimensione delle finestre di dialogo che si aprono con la funzione MsgBox.
Mi sono chiesto allora come sostituire la finestra di dialogo MsgBox in Microsoft Access.
La mia maschera d’inserimento dati è questa:
Quando si preme il pulsante Inserisci, viene aperta la maschera che funge da MsgBox.
Private Sub cmdInserisci_Click() ' apro la maschera che funge da MsgBox DoCmd.OpenForm "myMsgBox" End Sub
La maschera myMsgBox è questa:
ho impostato nelle categoria di proprietà Altro:
- Popup = Sì
- A scelta obbligatoria = Sì
Con Popup sono sicuro che sia sempre in primo piano e non venga nascosta da altre.
Con A scelta obbligatoria riproduco esattamente il comportamento della finestra di dialogo aperta dalla funzione MsgBox: finché non viene chiusa, l’utente non può fare altro.
Il pulsante OK e il pulsante Annulla richiamano due procedure che ho creato nella maschera Inserimento dati:
Private Sub cmdAnnulla_Click() ' chiudo la maschera myMsgBox DoCmd.Close ' eseguo la procedura sAnnulla che si trova nella maschera d'inserimento dati Form_InserimentoDati.sAnnulla End Sub Private Sub cmdOk_Click() ' chiudo la maschera myMsgBox DoCmd.Close ' eseguo la procedura sOk che si trova nella maschera d'inserimento dati Form_InserimentoDati.sOk End Sub
Solitamente le procedure scritte in una maschera sono richiamabili solo all’interno della maschera stessa. Infatti sono automaticamente dichiarate come Private.
Per esempio nella maschera myMsgBox la procedura legata all’evento Click del pulsante cmdAnnulla è Private:
Private Sub cmdAnnulla_Click()
Perciò può essere richiamata solo dalla maschera myMsgBox.
Le procedure sOk e sAnnulla che ho scritto nella maschera Inserimento dati, invece, sono pubbliche e quindi richiamabili anche da altre maschere:
Public Sub sOk() ' qui eseguo il codice relativo all'inserimento End Sub Public Sub sAnnulla() ' qui eseguo il codice se l'utente ha premuto Annulla ' per es. potrei svuotare le due caselle di testo txtCognome = Null txtNome = Null ' e poi spostare il focus sulla casella del Cognome txtCognome.SetFocus End Sub
Naturalmente sulla maschera myMsgBox potrei visualizzare anche altri dati, per esempio riepilogare i valori immessi dall’utente o qualunque altro dato sia importante verificare prima che si proceda con il salvataggio per esempio.