dunque, oltre al metodo di xegallo, io sfrutto questo sistema:
1) limitiamo il numero di caratteri immissibili nella textbox. Per la data ci bastano al massimo 10 caratteri tutti numerici con in più il separatore "/". Per questo si può benissimo utilizzare una funzione da richiamare poi nell'evento "Keypress" della TextBox.
Ecco la funzione:
Function ChkInput(vKeyAscii As Integer)
Dim StringD As String
StringD = "1234567890/"
If vKeyAscii = 8 Then ChkInput = vKeyAscii: Exit Function 'è il tasto di delete
If InStr(StringD, Chr(vKeyAscii)) = 0 Then
vKeyAscii = 0 'Non è presente nell'insieme quindi l'azzero
End If
ChkInput = vKeyAscii
End Function
Adesso crea l'evento KeyPress ed inserisci il richiamo alla funzione in questo modo:
Private Sub TxtBox_KeyPress(KeyAscii As Integer)
KeyAscii = ChkInput(KeyAscii, "N")
End Sub
In questo modo, noterai che se provi a scrivere un carattere non compreso nella stringa "1234567890/", non viene scritto nella TextBox.
Adesso per controllare se la data è corretta puoi eseguire il controllo nel momento dell'evento "LostFocus" della TextBox:
Private Sub TxtBox_LostFocus()
If TxtBox.Text = "" Then TxtBox.Text = Date: Exit Sub 'se il campo è vuoto inserisco la data odierna (opzionale)
If Len(TxtBox.Text) < 10 Or Not IsDate(TxtBox.Text) Then 'qui eseguo il controllo sulla lunghezza e sul formato della date
MsgBox "Inserire una data nel formato 'gg/mm/aaaa'", vbInformation, "Data non valida"
TxtBox.Text = ""
TxtBox.SetFocus
Exit Sub
End If
TxtBox.Text = DateValue(TxtBox.Text) 'questa funzione ordina la data in base alle impostazioni di sistema. Es.: se scrivo "10/20/2001" con le impostazioni dper la data di sistema su "gg/mm/aaaa", la funzione "DateValue" sistemerà la data in "20/10/2001"
Spero di esserti stato utile