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

Controllo ore con VBA

307 views
Skip to first unread message

by sal

unread,
Dec 13, 2010, 1:18:37 AM12/13/10
to
Ciao a tutti, mi aiutate, come faccio a controllare un orario inserito
in una
textbox, in base all'orario di lavoro, spiego meglio, l'orario di
lavoro e 08:00 - 12:00 pausa pranzo 13:00 - 17:00.

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

Mauro Gamberini

unread,
Dec 13, 2010, 3:17:23 AM12/13/10
to
"by sal" ha scritto nel messaggio
news:04fc9937-ee90-485e...@fu15g2000vbb.googlegroups.com...

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/

Mauro Gamberini

unread,
Dec 13, 2010, 3:47:40 AM12/13/10
to
<cut>

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.

by sal

unread,
Dec 13, 2010, 5:22:28 AM12/13/10
to
On 13 Dic, 09:47, "Mauro Gamberini"

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

Mauro Gamberini

unread,
Dec 13, 2010, 5:45:10 AM12/13/10
to

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

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

r

unread,
Dec 13, 2010, 6:52:57 PM12/13/10
to
On 13 Dic, 11:45, "Mauro Gamberini"

<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> 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
> **************************
>
> 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
> Microsoft MVP - Excelhttp://www.riolab.org/http://www.maurogsc.eu/

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

by sal

unread,
Dec 15, 2010, 2:06:39 PM12/15/10
to

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

0 new messages