Ciao
Antonio
l'ho integrato con il controllo del formato ora:
a me le msgbox non piaciono quando uso
una userform ... puoi all'occorrenza adattare
Option Explicit
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'per l'esempio:
'UserForm1 contenente
'Label1 (sufficientemente grande)
'TextBox1
'TextBox2
'TextBox3
'TextBox4
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'altri path li trovi:
'http://excelvba.altervista.org/blog/index.php/Excel-VBA/Espressioni-Regolari-e-Pattern-applicazione-Form.html
Private Sub UserForm_Initialize()
With Me
.Label1.Caption = ""
.Label1.ForeColor = &HFF&
.TextBox1.Tag = "Data Europea"
.TextBox2.Tag = "Codice Fiscale"
.TextBox3.Tag = "Numero decimale"
.TextBox4.Tag = "Formato ora"
End With
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'data europea
UserForm_Controllo_Event_Exit Me.Label1, _
Me.TextBox1, _
Cancel, _
"^(3[01]|[12]\d|0?[1-9])/(0?[13578]|10|12)/(\d{2}|(19|20|21)\d{2})$" & _
"|^(30|[12]\d|0?[1-9])/(0?[469]|11)/(\d{2}|(19|20|21)\d{2})$" & _
"|^(2[0-8]|[01]\d|0?[1-9])/(0?2)/(\d{2}|(19|20|21)\d{2})$" & _
"|^29/(0?2)/(2000|00)$" & _
"|^29/(0?2)/(19|20|21)?(0[48]|[2468][048]|[13579][26])$"
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'codice fiscale
UserForm_Controllo_Event_Exit Me.Label1, _
Me.TextBox2, _
Cancel, _
"^([A-Z]{6})" & _
"(((\d{2})[ACELMRT](3[01]|[12]\d|0[1-9]|70|71|[56]\d|4[1-9]))" & _
"|((\d{2})[DHPS](30|[12]\d|0[1-9]|70|[56]\d|4[1-9]))" & _
"|((\d{2})B(2[0-8]|1\d|0[1-9]|6[0-8]|5\d|4[1-9]))" & _
"|((0[048]|[2468][048]|[13579][26])B(29|69)))" & _
"([A-Z]{1})([0-9L-NPQ-V]{3})" & _
"([A-Z]{1})$"
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'numero a virgola mobile
UserForm_Controllo_Event_Exit Me.Label1, _
Me.TextBox3, _
Cancel, _
"^(0|[+-]?" & _
"((?!0)\d+([,]\d+)?" & _
"|[0]+([,]\d+)?))$"
End Sub
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'formato orario
'Orario hh:mm
UserForm_Controllo_Event_Exit Me.Label1, _
Me.TextBox4, _
Cancel, _
"^(0?[0-9]|1\d|2[0-3]):[0-5]\d$"
'Orario hh:mm:ss
'UserForm_Controllo_Event_Exit Me.Label1, _
' Me.TextBox3, _
' Cancel, _
' "^(0?[0-9]|1\d|2[0-3]):[0-5]\d:[0-5]\d$"
End Sub
Sub UserForm_Controllo_Event_Exit( _
ByRef oLabel As MSForms.Label, _
ByRef oControl As MSForms.Control, _
ByRef Cancel As MSForms.ReturnBoolean, _
Optional ByVal sPattern As String = "[^\w\s]+")
'______________________________________________
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
'Di Roberto Mensa nick r
'______________________________________________
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
'Effettua un controllo sul testo digitato in un
'controllo, se il controllo ha esito negativo
'ripassa cancel=true impedendo l'uscita del focus
'e seleziona l'intero testo digitato
'da richiamare dall'evento exit di controlli che
'hanno cancel come argomento
'oLabel è il controllo Label entro cui comunicare
'il messaggio di errore
Dim re As Object
Static sLabelCaption As String
Static bCancel As Boolean
If bCancel = False Then
sLabelCaption = oLabel.Caption
End If
Set re = CreateObject("vbscript.regexp")
re.Pattern = sPattern
re.ignorecase = True
With oControl
If Len(.Text) > 0 Then
If re.test(.Text) = False Then
oLabel.Caption = _
"Testo " & .Tag & " - Non valido!"
.SelStart = 0
.SelLength = Len(.Text)
Cancel = True
bCancel = True
End If
End If
End With
If Cancel = False Then
bCancel = False
oLabel.Caption = sLabelCaption
End If
End Sub
saluti
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
"Antonio" ha scritto:
"r" ha scritto:
Ciao r, probabilmente si, ricordo qualcosa del genere, tempo addietro
riguardo alle date (se non erro).
Francamente pensavo a qualcosa di più semplice, ad esempio per le date
utilizzo
Private Sub Textbox2_AfterUpdate()
If Not IsDate(TextBox2) Then
MsgBox "Attenzione inserire una data in formato 10/01/08", , "Controllo
dati"
TextBox2 = ""
End If
End Sub
Mi chiedevo, non esiste un comando simile "Not IsDate" che riguarda gli orari?
Cerco di semplificare per utilizzi futuri, date le mie scarse capacità :-((
Comunque grazie del codice e della cortesia.
Ciao
Antonio
certo che esiste ...
Not IsDate ... con tutti i contro e i pochi pro che ha
"r" ha scritto:
> certo che esiste ...
> Not IsDate ... con tutti i contro e i pochi pro che ha
> saluti
> r
Quindi è valido sia per date che orari, senza distinzione, ... ###Haime!!!###
Mi tocca rivedere tutti i file in cui ho messo quell'istruzione.
OK grazie del chiarimento.
Ciao
Antonio