TextBox - Controllare i dati inseriti. - dal 04/09/04 pagina vista: volte Questo articolo integra gli altri articoli sui due siti ennius in cui si parla di come usare le TextBox che mettiamo sulle UserForm. Questa volta riassumiamo le routine per controllare i dati che scriveremo in una TextBox, una sorta di "Convalida", che verifichi se il dato (o valore che dir si voglia) che abbiamo scritto corrisponda al tipo di dato che avremo deciso quella TextBox dovrà contenere. Preciso subito che non ci stiamo occupando dell'impostazione del "Tipo di dato" attraverso una Funzione di conversione del "tipo di dati" (vedi articolo Conversione Tipi di Dati ), quindi niente a che vedere di come il vba considererà il tipo di valore immesso, ma di come controllare se ciò che scriviamo sia un numero se vorremo siano scritti soltanto numeri e non testo, oppure controllare se una data sia scritta rispettando un certo formato, oppure se vorremo controllare di scrivere una virgola invece di un punto o viceversa, insomma un "guardiano" che ci avvisi e ci blocchi se non avremo scritto giusto. Vediamo intanto come poter "intercettare" questi eventuali errori di battitura, sfruttando "Eventi" sia della stessa TextBox che vogliamo controllare, sia di altri "oggetti" presenti sulla stessa UserForm: Per quanto riguarda la scelta di "Eventi" della TextBox possiamo scegliere fra gli Eventi disponibili:
Sconsiglio per il tipo di verifica che intendiamo effettuare, di scegliere eventi come il Change o il Click, non servirebbero al nostro scopo.
Prima di passare ad esaminare le istruzioni che useremo per effettuare le verifiche, è opportuno precisare una cosa: quando usiamo un'evento legato ad un'"oggetto", il compilatore ci predispone la routine legata all'evento, mettendo tra parentesi gli argomenti della funzione che abbiamo scelto; in genere questi argomenti sono proprietà che possiamo manipolare nelle impostazioni per ottenere comportamenti adeguati. Con la scelta, per esempio, dell'evento Exit di una TextBox, vedremo che il vba ci predispone questo:
dove viene usato di default l'argomento Cancel riferito all'oggetto TextBox1. Se nelle istruzioni noi impostiamo l'istruzione Cancel = True noi di fatto impediamo l'uscita (la perdita di stato attivo) dalla TextBox. Questo ci consente di restare nella TextBox1. In VBA non è possibile usare come in VB il SetFocus per restare con lo stato attivo nell'"oggetto" che abbiamo appena lasciato (stiamo infatti usando Exit al posto del VB LostFocus non previsto per il VBA), ma solo per impostare lo stato attivo su un'altro "oggetto" presente sulla UserForm. Controllare che si scrivano solo Numeri. Ci affidiamo alla Funzione IsNumeric per questo controllo, e scegliamo l'evento Exit della TextBox; creiamo una condizione che verifichi se il valore riscontrato all'uscita dalla TextBox è un numero, in caso non lo sia, restiamo nella TextBox ed evidenziamo il valore:
Controllare che si scriva un determinato carattere o insieme di caratteri (testo). Ci affidiamo alla Funzione InStr per questo controllo e scegliamo anche qui l'evento Exit della TextBox. Creiamo una condizione che verifichi se in un ipotetico indirizzo e-mail, si sia scritta la AT (la chiocciolina), e uscendo dalla sub, selezioniamo tutto il testo in caso non compaia per correggere, avvisando con un messaggio:
Ricordo che la Funzione InStr richiede tre argomenti, nell'ordine : il primo: da quale posizione iniziare il controllo (1, inizio testo), il secondo : dove effettuare il controllo (nel testo contenuto nella TextBox3), il terzo : il valore (o carattere) da controllare posto tra doppi apici ("@"). Chiaramente potremo usare questa verifica per controllare qualsiasi combinazione di caratteri, parole o anche numeri. Controllare che si scriva una data. - Ci affidiamo alla Funzione IsDate, e per questa verifica scegliamo ancora l'evento Exit della TextBox. E necessario comunque fare una precisazione: questo tipo di verifica interviene e ci segnala l'errore se noi scriviamo testo oppure numeri (es.: 111203 al posto di 11/02/03), ma NON segnala errore se ci scordiamo anche una sola delle barre divisorie, come potrebbe essere 11/0203, (dove manca la seconda barra),
una soluzione alternativa possibile è quella già presentata nell'articolo "Calcolo Date in Vba 1" sull'altro sito dove sfruttiamo la Funzione Mid per verificare se le barre ( / ) separatrici della data (una data con anno a due cifre) sono al posto giusto, cioè al terzo e al sesto posto, come in 12/02/04, ed è la seguente divisa in due esempi: un esempio sfruttando l'evento Exit di una TextBox, dove come spiegato, per ritornare sulla textbox in caso di errore, usiamo Cancel per annullare l'uscita: il secondo esempio invece lo impostiamo come verifica inserita nell'evento Click di un ipotetico CommandButton che useremo per esempio per passare il contenuto di textbox sul foglio. In questo secondo esempio sarà possibile usare il SetFocus per posizionare lo stato attivo sulla textbox "incriminata", interrompendo la continuazione delle istruzioni uscendo dalla sub :
Aiutandosi con la guida in linea sarà possibile scoprire tutte le altre Funzioni IsEmpty, IsError, IsNull ecc. ecc.da poter usare per eseguire controlli su dati e/o variabili. Vediamo ora due routine da usarsi con l'evento KeyPress di una TextBox che si verifica quando premiamo un tasto ANSI, cioè un tasto della tastiera. Questo tipo di controllo lo useremo per controllare quindi se il tasto premuto corrisponde al tasto che vorremo, sfruttando l'argomento KeyAscii che serve ad identificare il codice Ascii corrispondente al tasto premuto. In pratica lo usiamo per sostituire con una "virgola" , l'eventuale tasto punto ( . ) premuto per errore quando vorremo scrivere decimali, come per il caso di cifre Euro:
nel caso si voglia l'effetto inverso, cioè avere il punto anche se premiamo la virgola, basterà modificare queste due righe all'istruzione sopra:
Quest'altra routine può servire come esempio da sviluppare per esigenze proprie. Sfruttiamo l'evento KeyPress di una TextBox per trasferire mentre scriviamo il valore nella textbox, direttamente in una cella del foglio di lavoro, carattere dopo carattere:
Buon lavoro. prelevato sul sito www.ennius.altervista.org |