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.
|