Cosa sono e come usare le MessageBox (MsgBox) Premesso che in VBA la "MsgBox" è una "funzione", la guida di Excel la definisce come una "finestra di dialogo". In effetti, avendo la possibilità di poter scegliere tra due pulsanti: SI e NO, è come se si dialogasse con la domanda che appare nella finestra, rispondendo ad una delle due opzioni. In realtà (e questo e solo ciò che penso io) per "finestra di dialogo" si dovrebbe intendere una finestra nella quale sia possibile inserire delle variabili, come accade con le InputBox (che è una finestra di introduzione dati (quindi variabili)- vedi in questa stessa sezione : "usare le InputBox"). La funzione MsgBox di Excel sfrutta una libreria presente nel SistemaOperativo (Windows) inserita dai progettisti del SO per segnalarci gli errori di Sistema. In Excel, tramite il VBA, è possibile richiamare questa libreria e "pilotare" la comparsa di messaggi con le opportune istruzioni : la più semplice,è questa: MsgBox (chiama la finestra del messaggio) " Ciao!!!" (tra doppi apici, il messaggio che apparirà nella finestra) Le finestre di messaggio, d'ora in avanti chiamate msgbox, saranno associate ad eventi decisi da noi per fornire indicazioni, per avvisare di un errore, per dare una conferma, per una descrizione, per obbligare una scelta, per...per...per... chi più ne ha, più ne metta. La Sintassi (in
programmazione) da usare è:
Quando adoperiamo una costante, la sintassi dell'istruzione sarà diversa dal primo esempio, e andrà quindi compilata: MsgBox ("Ciao !!!", vbInformation) Solo che se adoperiamo questa istruzione il debugger ci segnala un errore di compilazione: è necessario assegnare l'istruzione ad una variabile, di tipo String (e va dimensionata) o di tipo Variant e si può omettere il dimensionamento (Dim), per cui sarà sufficiente impostare la nostra istruzione così : dimmi = MsgBox ("Ciao !!!", vbInformation) ed otterremo questo risultato: La lunghezza di un messaggio può arrivare fino a circa 1024 caratteri, dipende dal tipo di carattere usato (i caratteri (font) normalmente usati, non occupano tutti uno stesso "spazio": in una stringa di testo, il carattere " i ", per esempio, occupa meno spazio di una " a " o di una " g ", come pure un carattere minuscolo occupa meno spazio delle stesso maiuscolo. Forse non tutti sanno che l'unico carattere che mantiene lo stesso spazio per ogni lettera, è il Courier). Se il messaggio è suddiviso su più righe, è possibile includere, tra ciascuna coppia di righe, un ritorno a capo (Chr(13)), un carattere di avanzamento riga (Chr(10)) o una sequenza ritorno a capo-avanzamento riga (Chr(13) & Chr(10)). Il caratteri appena esposti, possono essere sostituiti dalle costanti corrispondenti, come nello specchietto sotto: vbCr può sostituire Chr(13) vbLf può sostituire Chr(10) vbCrLf può sostituire Chr(13) + Chr(10) Questo sotto, è un esempio su come si può compilare codice per far apparire un messaggio su più righe, all'apertura della cartella di lavoro:
e questo è il messaggio generato dal codice sopra: Ora vediamo come poter gestire due tipi di msgbox piuttosto utilizzate. vbYesNo e vbYesNoCancel.che si presenteranno in questa forma rispettivamente : Intanto notiamo
che nella prima, la X di chiusura è disabilitata : si può uscire solo con un
Si o con un No. Nella seconda invece la X è abilitata : infatti il pulsante
Annulla, corrisponde alla chiusura della finestra (e quindi alla X) SENZA
avere optato né Si né No.
In questo caso, se si risponde Si, appare il messaggio "Pippo", se Non si risponde Si, appare "Ciao !!!" (si sfrutta il No di vbYesNo con Else) Diversa è la finestra che otteniamo con vbYesNoCancel, nella quale, in un'istruzione come Prova2, il pulsante Annulla ci consentirebbe di uscire senza avere scelto né Si né No. E' possibile comunque sfruttare anche il pulsante Annulla ( o la X di chiusura), per ottenere una terza possibile azione, diversa dalla chiusura, che obbligherà una terza alternativa. Questo è un esempio:
Come si vede, vengono sfruttati tutti e tre i pulsanti, per ottenere tre alternative obbligate, escludendo un uscita senza scelte. Una variante alla Sub Prova3() utillizza al posto del costrutto if......Elseif.....Else....End if il Select Case, così:
Questa sotto invece è una diversa sintassi che usa il vbYesNo, ma che imposta come valore predefinito vbNo per NON compiere una azione. L'istruzione dice: col messaggio "Sicuro ecc..", se rispondi Si, avviene l'azione prevista da Cancel (Cancel = True), altrimenti Non avviene detta azione (Cancel = False) Cancel = (MsgBox("Sicuro di voler chiudere la finestra ?", vbYesNo) = vbNo) Se non avessimo usato questo tipo di istruzione, ma quella impostata nell'esempio Prova1, il VbNo non sarebbe stato definito e l'azione Cancel sarebbe equivalsa ad un Si.: lasciando invariata l'istruzione avremmo concesso a Cancel la sua funzione che è quella di Chiudere.
|