Tra i vari controlli ho un pulsante che mi ripristina la maschera coi dati iniziali annullando tutte le eventuali modifiche.
Ho anche la necessità di controllare che il numero pratica sia univoco.
E fino a qui ci sono riuscito appieno.
Il problema nasce dal fatto che vorrei evitare il controllo nel caso in cui premo il pulsante di reset.
Perché questo?
Mettiamo che abbia inserito il numero di pratica 100 in una precedente immissione, mentre invece doveva essere 101.
Vado a inserire il numero 100 in questa maschera e il programma mi segnala, giustamente, un errore di duplicazione.
Decido, quindi, di annullare tutto, andare a correggere l'immissione sbagliata nell'altro "record" per poi tornare qui e inserire i miei dati.
Tento di resettare la maschera ma continuo a imbattermi nel messaggio di errore perché la routine "exit" attiva il controllo.
Sono costretto a "inventarmi" un numero di pratica, superare il controllo dell'univocità, rettificare la precedente immissione sbagliata, ritornare su questo "record" e inserire, finalmente, i dati corretti.
Lungo, dispendioso e pericoloso (a richio dimenticanza!)
Vorrei mettere una IF nella routine di controllo che facesse, in italiano, una cosa del genere:
- Codice: Seleziona tutto
SE sei_uscito_e_hai_premuto_reset ALLORA
ritorna_tutto_ok
ALTRIMENTI
effettua_controllo
FINE_SE
Googleando (neologismo orripilante!) ho trovato un rimando al metodo Me.ActiveControl.Name che, da quanto ho letto, dovrebbe recepire il nome del controllo appena attivato, anche se il cursore non è ancora uscito dalla textbox.
Invece non funziona.
Controllando anche con debug.print, ho notato che Me.ActiveControl.Name restituisce sempre "Num1", ossia il nome della textbox.
Questo il codice nel form:
- Codice: Seleziona tutto
Private Sub Num1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Duplicato(Num1.Value) Then
Cancel = True
MsgBox "Questo numero di pratica è già stato inserito"
Num1.SetFocus
End If
End Sub
Private Function Duplicato(ByVal NumeroImmesso As Single) As Boolean
If NumeroImmesso <> 0 And Me.ActiveControl.Name <> "pulsRESET" Then
' Effettua il controllo per evitare duplicazioni
End If
End Function
Riassumendo: ho lasciato la casella di testo Num1. Quale controllo ho selezionato per uscire?
Grazie anticipate.
(Excel 2010 / Win 7)