Un lavoro di Massimo Cannazza                                                                          e-mail :  massimo.cannazza@enel.it

Controllo inserimento date in TextBox

 

Massimo ci invia una sua interpretazione di come sia possibile riunire diverse verifiche per un controllo inserimento date, sfruttando tre eventi tipici di una textbox; Massimo precisa che alcune istruzioni relative al colore di fondo della textbox, non necessarie ai fini di una verifica se si stia inserendo una data, sono utili a lui : avendo nelle UserForm molte texbox,  perdeva la posizione della textbox attiva.

Soluzione peraltro valida (colorare lo sfondo della textbox in quel momento attiva) anche in tutti quei casi dove si voglia comunque avere un controllo visivo di dove è posizionato il focus tra i vari "Controlli" posti su una userform.

 

Private Sub textbox1_Enter()
textbox1.BackColor = &HC0FFFF
'colora lo sfondo della textbox attiva
End Sub

***************

Private Sub textbox1_Change()
On Error Resume Next
x = Len(textbox1)
Y = LTrim(textbox1.Text)
d = textbox1
If d = "" Then
textbox1.BackColor = &HFFFFFF
Exit Sub
End If
If Left(d, 2) > 31 Then
MsgBox "Giorno Errato"
textbox1.SelStart = 0
textbox1.SelLength = Len(textbox1)
Exit Sub
End If
If x = 2 Then textbox1 = Y & "/"
If x = 4 Then Exit Sub

If Mid(d, 4, 2) = "" Then Exit Sub
If Mid(d, 4, 2) > 12 Then
'ora controlliamo che il mese non superi il numero 12, si avvisa, si esce
MsgBox "Mese Errato"
textbox1.SelStart = 3
textbox1.SelLength = Len(textbox1)
Exit Sub
End If

'--------per rendere completo il sistema di verifica, inseriamo le istruzioni che controllino anche di non superare il 'giorno di fine mese rispetto ai mesi di febbraio e dei mesi a fine 30

e = Left(d, 2)
'con la variabile "e" prendiamo il giorno della data introdotta
f = Mid(d, 4, 2)
'con la variabile "f" prendiamo il mese della data introdotta
Select Case f
'usiamo il Select Case che verificherà il Caso Febbraio (02 in numero)
Case "02"
If e > 29 Then GoTo mess
'se il giorno ("e") è maggiore di 29 avvisiamo, selezioniamo e usciamo dalla routine

Case "04", "06", "09", "11"
'ora si controlla i Case dei mesi di 30 giorni
If e > 30 Then GoTo mess
'se il giorno ("e") è maggiore di 30 avvisiamo, selezioniamo e usciamo dalla routine
End Select
If x = 5 Then
textbox1 = Y & "/"
Exit Sub
End If

If x = 6 Then Exit Sub
If x = 7 Then Exit Sub
If x = 8 Then Exit Sub
If x = 9 Then Exit Sub



g = Mid(d, 7, 4)
If g <= 1899 Or g >= 2101 Then
' ora controlla se l'anno è compreso tra il 1900 ed il 2100 (variabile)
MsgBox "L'anno deve essere tra il 1900 ed il 2100"
textbox1.SelStart = 6
textbox1.SelLength = Len(textbox1)
Exit Sub
End If

If IsDate(textbox1) = False Then
'ora controlla se la data è una data valida
MsgBox "La data non è valida - Controllare mese, giorno e anno"
textbox1.SelStart = 0
textbox1.SelLength = Len(textbox1)
Exit Sub
End If

If x = 10 Then
TextBox2.SetFocus
 'il cursore si sposta su una seconda textbox al fine di far partire "Private Sub textbox1_Exit"
End If
Exit Sub

mess:
MsgBox "Giorno inesistente nel mese " & f & ""
textbox1.SelStart = 0
textbox1.SelLength = Len(textbox1)
Set x = Nothing
Set Y = Nothing
Set d = Nothing
Set e = Nothing
Set f = Nothing
Set g = Nothing

Resume

End Sub

'**************************************

Private Sub textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Dim x
x = Len(textbox1)
If x = 0 Then
textbox1.BackColor = &HFFFFFF
Set x = Nothing
Exit Sub
End If
If x = 10 Then
textbox1.BackColor = &HFFFFFF
Set x = Nothing
Exit Sub
End If
If x >= 1 <= 9 Then
MsgBox "Immettere una data valida (formato ggmmaaaa)"
textbox1.SelStart = 0
textbox1.SelLength = Len(textbox1)
Cancel = True
Set x = Nothing
Exit Sub
End If
Resume
End Sub

 

 

Un grazie a Massimo.