Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Validation of time in code

I have the following code in a worksheet that makes
entering times very easy. Example: It converts an entry
of 1500 to 15:00. I need to limit the entry of times to
between 00:01 and 18:00. I need help with some additional
code to restrict entries to between these two times.
Thanks Steve

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range
("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,824
Default Validation of time in code

Could you add something like this to the top of your code:

If IsNumeric(Target.Value) = False _
Or (Target.Value < 1 _
Or Target.Value 1500) Then
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
MsgBox "no. no. no."
Exit Sub
End With
End If

(Check it before you do the conversion.)

Steve Rolls wrote:

I have the following code in a worksheet that makes
entering times very easy. Example: It converts an entry
of 1500 to 15:00. I need to limit the entry of times to
between 00:01 and 18:00. I need help with some additional
code to restrict entries to between these two times.
Thanks Steve

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range
("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


--

Dave Peterson

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7,247
Default Validation of time in code

Steve,

That code looks familiar. To limit the input time to a specific interval,
add the following code immediately following the End Select statement:

If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00") Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If



--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com


"Steve Rolls" wrote in message
...
I have the following code in a worksheet that makes
entering times very easy. Example: It converts an entry
of 1500 to 15:00. I need to limit the entry of times to
between 00:01 and 18:00. I need help with some additional
code to restrict entries to between these two times.
Thanks Steve

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range
("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub



  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7,247
Default Validation of time in code

Steve,

The entire procedure should be as follows:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, _
Range("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select

If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00") Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com



"Steve Rolls" wrote in message
...
Thanks Chip, I can't remember exactly where I got the
original code from, but since you recognized it had to be
from your wonderful website. I tried inserting your
additional code per your instructions but I must not have
done something correctly between where I inserted it and
and End Sub. Can you help me a bit more with what should
be entered after your additional code ?


Thanks again, Steve

-----Original Message-----
Steve,

That code looks familiar. To limit the input time to a

specific interval,
add the following code immediately following the End

Select statement:

If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00") Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If



--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com


"Steve Rolls" wrote in message
...
I have the following code in a worksheet that makes
entering times very easy. Example: It converts an entry
of 1500 to 15:00. I need to limit the entry of times to
between 00:01 and 18:00. I need help with some

additional
code to restrict entries to between these two times.
Thanks Steve

Private Sub Worksheet_Change(ByVal Target As

Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range
("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub



.



  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Validation of time in code

Chip, this code worked perfectly ! Thank you Very Much !

When I brought this to the person I was working
on this for they now asked me if I could make the
validation portion work on the range h11:h500 only, yet
keep the functionality of converting 1500 (example) to
15:00 on the other two ranges (d11:e500 and h2:i5)

Now a am totally lost on how to do this

Steve



-----Original Message-----
Steve,

The entire procedure should be as follows:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, _
Range("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select

If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00") Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com



"Steve Rolls" wrote in message
...
Thanks Chip, I can't remember exactly where I got the
original code from, but since you recognized it had to

be
from your wonderful website. I tried inserting your
additional code per your instructions but I must not

have
done something correctly between where I inserted it and
and End Sub. Can you help me a bit more with what should
be entered after your additional code ?


Thanks again, Steve

-----Original Message-----
Steve,

That code looks familiar. To limit the input time to a

specific interval,
add the following code immediately following the End

Select statement:

If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00") Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If



--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com


"Steve Rolls" wrote in

message
...
I have the following code in a worksheet that makes
entering times very easy. Example: It converts an

entry
of 1500 to 15:00. I need to limit the entry of

times to
between 00:01 and 18:00. I need help with some

additional
code to restrict entries to between these two times.
Thanks Steve

Private Sub Worksheet_Change(ByVal Target As

Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range
("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value,

2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value,

2)
Case Else
Err.Raise 0
End Select
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


.



.



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7,247
Default Validation of time in code

Steve,

Try the following

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, _
Range("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select
If Not Application.Intersect(Range("H11:H500"), _
Target) Is Nothing Then
If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00") Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If
End If
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub



--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com



"Steve Rolls" wrote in message
...
Chip, this code worked perfectly ! Thank you Very Much !

When I brought this to the person I was working
on this for they now asked me if I could make the
validation portion work on the range h11:h500 only, yet
keep the functionality of converting 1500 (example) to
15:00 on the other two ranges (d11:e500 and h2:i5)

Now a am totally lost on how to do this

Steve



-----Original Message-----
Steve,

The entire procedure should be as follows:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, _
Range("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select

If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00") Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com



"Steve Rolls" wrote in message
...
Thanks Chip, I can't remember exactly where I got the
original code from, but since you recognized it had to

be
from your wonderful website. I tried inserting your
additional code per your instructions but I must not

have
done something correctly between where I inserted it and
and End Sub. Can you help me a bit more with what should
be entered after your additional code ?


Thanks again, Steve

-----Original Message-----
Steve,

That code looks familiar. To limit the input time to a
specific interval,
add the following code immediately following the End
Select statement:

If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00") Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If



--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com


"Steve Rolls" wrote in

message
...
I have the following code in a worksheet that makes
entering times very easy. Example: It converts an

entry
of 1500 to 15:00. I need to limit the entry of

times to
between 00:01 and 18:00. I need help with some
additional
code to restrict entries to between these two times.
Thanks Steve

Private Sub Worksheet_Change(ByVal Target As
Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range
("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value,

2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value,

2)
Case Else
Err.Raise 0
End Select
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


.



.



  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Validation of time in code

Chip, Thank You VERY MUCH ! It works perfectly. I will
have some fun reviewing this code and trying to figure it
out. In the meantime you made me look good !

Steve
-----Original Message-----
Steve,

Try the following

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, _
Range("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select
If Not Application.Intersect(Range("H11:H500"), _
Target) Is Nothing Then
If TimeValue(TimeStr) < TimeValue("00:00:01") Or

_
TimeValue(TimeStr) TimeValue("18:00:00")

Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If
End If
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub



--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com



"Steve Rolls" wrote in message
...
Chip, this code worked perfectly ! Thank you Very

Much !

When I brought this to the person I was working
on this for they now asked me if I could make the
validation portion work on the range h11:h500 only, yet
keep the functionality of converting 1500 (example) to
15:00 on the other two ranges (d11:e500 and h2:i5)

Now a am totally lost on how to do this

Steve



-----Original Message-----
Steve,

The entire procedure should be as follows:


Private Sub Worksheet_Change(ByVal Target As

Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, _
Range("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select

If TimeValue(TimeStr) < TimeValue("00:00:01") Or _
TimeValue(TimeStr) TimeValue("18:00:00")

Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com



"Steve Rolls" wrote in

message
...
Thanks Chip, I can't remember exactly where I got

the
original code from, but since you recognized it had

to
be
from your wonderful website. I tried inserting your
additional code per your instructions but I must not

have
done something correctly between where I inserted

it and
and End Sub. Can you help me a bit more with what

should
be entered after your additional code ?


Thanks again, Steve

-----Original Message-----
Steve,

That code looks familiar. To limit the input time

to a
specific interval,
add the following code immediately following the

End
Select statement:

If TimeValue(TimeStr) < TimeValue("00:00:01")

Or _
TimeValue(TimeStr) TimeValue("18:00:00")

Then
MsgBox "time outside interval"
.NumberFormat = "General"
Application.EnableEvents = True
Exit Sub
End If



--
Cordially,
Chip Pearson
Microsoft MVP - Excel
www.cpearson.com


"Steve Rolls" wrote in

message
...
I have the following code in a worksheet that

makes
entering times very easy. Example: It converts

an
entry
of 1500 to 15:00. I need to limit the entry of

times to
between 00:01 and 18:00. I need help with some
additional
code to restrict entries to between these two

times.
Thanks Steve

Private Sub Worksheet_Change(ByVal Target As
Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range
("d11:e500,h11:h500,h2:i5")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT

12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right

(.Value,
2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right

(.Value,
2)
Case Else
Err.Raise 0
End Select
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


.



.



.

Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
date code validation TUNGANA KURMA RAJU Excel Discussion (Misc queries) 0 June 3rd 08 10:47 AM
Zip Code Validation - length =5 or 9 Daron Excel Discussion (Misc queries) 11 November 5th 07 04:56 PM
Validation of Postal Code Veronika Excel Worksheet Functions 1 December 16th 05 09:42 PM
time formatting and time categorizing (vlookup or data validation) MarianneR Excel Worksheet Functions 4 November 18th 04 03:24 PM
time formatting and time categorizing (vlookup or data validation) MarianneR Excel Worksheet Functions 0 November 18th 04 03:13 PM


All times are GMT +1. The time now is 09:09 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"