Mi è stato chiesto più volte come svuotare i controlli di una maschera Access. Per controllo si intende uno degli oggetti presenti su una maschera. Direi che i controlli più utilizzati sono: casella di testo (textbox) e casella combinata (combobox). Vediamo come usare un pulsante di comando per svuotare tutti i controlli casella di testo e casella combinata presenti su una maschera. Saranno sufficienti poche istruzioni VBA.
Supponiamo di avere una maschera con una casella di testo, una casella combinata e il nostro pulsante, che avrà come proprietà nome: cmdSvuota.
Nelle proprietà del pulsante di comando andiamo su Eventi. Poi un clic sulla riga dell’evento Su clic e poi tasto destro, Genera…, Generatore di codice e così siamo nel Visual Basic Editor, nell’evento Su Clic del nostro pulsante:
In sintesi dobbiamo passare in sequenza tutti i controlli presenti sulla maschera: se si tratta di una casella di testo o di una casella combinata, li svuotiamo. Attenzione! Anche le etichette sono controlli. Se non facessimo il test, il nostro codice cercherebbe di svuotare l’etichetta, o lo stesso pulsante di comando, e non riuscendo genererebbe un errore.
Cominciamo creando una variabile ctl che sarà di tipo Control. Ci servirà per eseguire un ciclo su tutti i controlli esistenti nella maschera (in tal modo evitiamo di dover scrivere una istruzione per ogni controllo presente sulla maschera: se la maschera ha 20 caselle di testo… significherebbe scrivere 30 istruzioni di codice!).
Dim ctl As Control
Ora passiamo in rassegna tutti i controlli della maschera con un ciclo For Each… Next. Con questo ciclo non abbiamo bisogno di sapere quanti sono i controlli. Controls è la collezione di tutti i controlli presenti nella maschera. Me fa riferimento alla maschera attiva
For Each ctl In Me.Controls Next
Ora l’istruzione per svuotare il controllo sarebbe semplice:
ctl = Null
Tuttabia, dobbiamo eseguirla solo su controlli di tipo TextBox o ComboBox, perciò la inseriamo all’interno di una If:
If TypeOf ctl Is TextBox Or TypeOf ctl Is ComboBox Then ctl = Null End If
Il codice completo eseguito al Clic sul pulsante di comando è il seguente:
Dim ctl As Control For Each ctl In Me.Controls If TypeOf ctl Is TextBox Or TypeOf ctl Is ComboBox Then ctl = Null End If Next