Vorrei che venisse controllato se l'orario inserito e al di fuori di
questo range d'orario, questa una funzione per trasformare l'orario
inserito con il punto o altro in formato orario, tipo 11.10 diventa
11:10, oppure 11-10 diventa sempre 11:10.
si potrebbe inserire il controllo nella funzione ad esempio se tx <
8:00 esce un messaggio, o >12:00 fino alle 13:00 e maggiore delle 17
Ho tentato di creare un ciclo If..Then ma non so come inserire
l'orario con il VBA
nOre è dichiarata pubblica
Public Function tOre(tx)
Dim x as Long
Dim L1 As Long
Dim L2 As Variant
L1 = Len(tx)
For x = 1 To L1
L2 = Mid(tx, x, 1)
If IsNumeric(L2) Then Else Mid(tx, x) = ":"
Next
nOre = tx
End Function
In attesa un saluto a tutti, Ciao By Sal
nOre è dichiarata pubblica
**********************************
Capito poco. Ho una domanda, però.
Ma perchè non obblighi l'utente ad inserire le ore in formato
corretto? Ad esempio, se vuoi solo orari
compresi fra 08.00:12.00, 13.00:17.00,
fai inserire gli orari tramite due ComboBox
con le ore/minuti predisposti.
Vedi qui:
http://www.maurogsc.eu/comefareperexcel/userformoreminuti.aspx
modificando il ciclo che carica ore/minuti così:
Private Sub UserForm_Initialize()
Dim lng As Long
With Me
For lng = 8 To 12
.ComboBox1.AddItem Format(lng, "00")
Next
For lng = 13 To 17
.ComboBox1.AddItem Format(lng, "00")
Next
For lng = 0 To 59
.ComboBox2.AddItem Format(lng, "00")
Next
End With
End Sub
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
Aggiungo, per controllare che non siano inseriti
minuti post 12 o post 17:
Private Sub CommandButton1_Click()
With Me
If Len(.ComboBox1.Text) = 0 Or _
Len(.ComboBox2.Text) = 0 Then
MsgBox "Selezionare ore e minuti."
Exit Sub
Else
Select Case .ComboBox1.Text
Case 12, 17
If .ComboBox2.Text > 0 Then
.ComboBox2.Text = "00"
End If
End Select
MsgBox .ComboBox1.Text & _
":" & .ComboBox2.Text
End If
End With
End Sub
Ma forse non ho capito cosa devi fare.
Ciao Mauro, prima grazie per la risposta, ma purtroppo non e cosi
semplice, il motivo e che sono diversi orari, molte textbox, la
seconda e il form non viene usato da una sola persona, ma molte, ed
hanno una conoscenza minima del PC, e siccome sono orari di produzione
possono essere 11:12-14:17, non potrei mettere nel combobox tutta la
sfilza dell'orario minuto per minuto, anche se lo farei una sola
volta.
non si potrebbe avere il controllo sul Textbox in modo da accettare
solo l'orario del range di lavoro.
Ciao By Sal
non si potrebbe avere il controllo sul Textbox in modo da accettare
solo l'orario del range di lavoro.
Ciao By Sal
**************************
Per il punto 2 penso tu non abbia capito cosa ti ho
proposto....
Per il punto 1. Le TextBox possono contenere di tutto,
quindi l'utente fa quello che vuole e devi
verificarne il contenuto ogni volta.
Le ComboBox consentono solo quello che decidi tu.
Se adesso hai 10 TextBox, si tratta di avere invece 20
ComboBox. e quelle le gestisci tu e solo quello
che decidi tu potrà essere utilizzato.
---------------------------
Mauro Gamberini
secondo me Mauro ha ragione ... prima bisogna essere sicuri che
l'input sia un imput valido e corretto ... poi puoi trasformare in
orario o fare le verifiche che vuoi ... le textbox contengono
testo ... nel tuo caso se uno scrivesse 99.99 che fai?
per una textbox posso suggerirti questo codice, che puoi replicare su
quante textbox vuoi ... (ma sono molte su cui devi fare controlli
dell'orario?) ... comunque questa verifica che ciò che viene digitato
è un orario (separatore è il punto) ... in caso contrario il testo
viene evidenziato e il focus rimane nella text box ...
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'orario
UserForm_Controllo_Event_Exit _
Me.TextBox1, _
Cancel, _
"^(0?[0-9]|1\d|2[0-3])\.[0-5]\d$"
End Sub
Sub UserForm_Controllo_Event_Exit( _
ByRef oControl As MSForms.Control, _
ByRef Cancel As MSForms.ReturnBoolean, _
Optional ByVal sPattern As String = "[\w\s]+")
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.Pattern = sPattern
With oControl
If Len(.Text) > 0 Then
If re.test(.Text) = False Then
.SelStart = 0
.SelLength = Len(.Text)
Cancel = True
End If
End If
End With
End Sub
per il resto potrai usare hour e minute sulla stringa una volta
verificata ...
tipo in finestra immediata:
?hour("10.12")
10
?minute("10.23")
23
saluti
r
Ciao r e grazie per la risposta, sempre lo stesso argomento, ma aprirò
un nuovo Post, ho problemi con il calcolo, e vorrei un aiuto
Ciao By Sal 8-D