Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

formato ora obbligato in textbox

292 views
Skip to first unread message

Antonio

unread,
Oct 12, 2009, 6:42:02 AM10/12/09
to
Buon giorno a tutti, vorrei in una textbox porre un controllo affinchè si
digiti correttamente un formato ora del tipo "h.mm" con un msgbox in caso di
inserimento errato.
Grazie.

Ciao
Antonio

r

unread,
Oct 12, 2009, 7:17:01 AM10/12/09
to
un'esempio di convalida per textbox
mi sembra che te lo avevo già postato ...

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:

Antonio

unread,
Oct 12, 2009, 9:16:02 AM10/12/09
to

"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

r

unread,
Oct 12, 2009, 9:29:01 AM10/12/09
to
"Antonio" ha scritto:

certo che esiste ...
Not IsDate ... con tutti i contro e i pochi pro che ha

Antonio

unread,
Oct 12, 2009, 10:00:03 AM10/12/09
to

"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

xluc...@gmail.com

unread,
Feb 28, 2013, 2:51:28 AM2/28/13
to
Ho applicato questo metodo al mio foglio di lavoro, è una soluzione quasi perfetta per me, tutto funziona regolarmente se le ore sono max 23:59:59, io ho però bisogno che le ore siano superiori alle 24 ore, fino a un max di 99 ore, come posso fare per risolvere???

Grazie per un riscontro...

Domenico

xluc...@gmail.com

unread,
Feb 28, 2013, 4:56:38 AM2/28/13
to
RISOLTO:
Sostituita stringa:
"^(0?[0-9]|1\d|2[0-3]):[0-5]\d$"
con
"^([0-9]?[0-9]|1\d|2[0-3]):[0-5]\d$"

Soluzione eccellente!

r

unread,
Feb 28, 2013, 5:24:55 AM2/28/13
to
Il giorno giovedì 28 febbraio 2013 10:56:38 UTC+1, xluc...@gmail.com ha scritto:
> RISOLTO: Sostituita stringa: "^(0?[0-9]|1\d|2[0-3]):[0-5]\d$" con "^([0-9]?[0-9]|1\d|2[0-3]):[0-5]\d$" Soluzione eccellente! Il giorno giovedì 28 febbraio 2013 08:51:28 UTC+1, xluc...@gmail.com ha scritto: > Ho applicato questo metodo al mio foglio di lavoro, è una soluzione quasi perfetta per me, tutto funziona regolarmente se le ore sono max 23:59:59, io ho però bisogno che le ore siano superiori alle 24 ore, fino a un max di 99 ore, come posso fare per risolvere??? > > > > Grazie per un riscontro... > > > > Domenico > > > > > > Il giorno lunedì 12 ottobre 2009 13:17:01 UTC+2, r ha scritto: > > > un'esempio di convalida per textbox > > > mi sembra che te lo avevo già postato ... > > > > > > 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: > > > > > > > Buon giorno a tutti, vorrei in una textbox porre un controllo affinchè si > > > > digiti correttamente un formato ora del tipo "h.mm" con un msgbox in caso di > > > > inserimento errato. > > > > Grazie. > > > > > > > > Ciao > > > > Antonio

no direi piuttosto:

"^([0-9]?[0-9]):[0-5]\d$"

saluti
r
0 new messages