ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Format Cell As You Type (https://www.excelbanter.com/excel-programming/358058-format-cell-you-type.html)

cooper

Format Cell As You Type
 

I have formatted certain cells of my spreadsheet to indicate time in the
format hh:mm using the custom cell formattihg option.

With this method, everytime I enter a time say 19:30, I have to insert
a colon using the shift key and all.

I just wanted to enter the figures 1930 and let the cell format itself
to 19:30

I was informed by VBA Gurus to use the following VBA code:


Code:
--------------------

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

On Error GoTo EndMacro
If Application.Intersect(Target, Range("A1:A10")) 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

--------------------


and paste it in the workbook section (I have 25 worksheets in my
workbook and more to come), so that I don't have to paste the code in
all the individual worksheets. I believe the code needs some tweaking
if it has to be placed in the workbook section.

The problem is that it does not work.

Can somebody help me in this regard. FYI, I know nothing about VB
coding.

Thanks.


--
cooper
------------------------------------------------------------------------
cooper's Profile: http://www.excelforum.com/member.php...o&userid=33171
View this thread: http://www.excelforum.com/showthread...hreadid=529933


Norman Jones

Format Cell As You Type
 
Hi Cooper,

Try changing:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)


to

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Target As
Range)


---
Regards,
Norman


"cooper" wrote in
message ...

I have formatted certain cells of my spreadsheet to indicate time in the
format hh:mm using the custom cell formattihg option.

With this method, everytime I enter a time say 19:30, I have to insert
a colon using the shift key and all.

I just wanted to enter the figures 1930 and let the cell format itself
to 19:30

I was informed by VBA Gurus to use the following VBA code:


Code:
--------------------

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

On Error GoTo EndMacro
If Application.Intersect(Target, Range("A1:A10")) 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

--------------------


and paste it in the workbook section (I have 25 worksheets in my
workbook and more to come), so that I don't have to paste the code in
all the individual worksheets. I believe the code needs some tweaking
if it has to be placed in the workbook section.

The problem is that it does not work.

Can somebody help me in this regard. FYI, I know nothing about VB
coding.

Thanks.


--
cooper
------------------------------------------------------------------------
cooper's Profile:
http://www.excelforum.com/member.php...o&userid=33171
View this thread: http://www.excelforum.com/showthread...hreadid=529933




Norman Jones

Format Cell As You Type
 
Hi Cooper,

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Target As
Range)


This should be a single line, broken by the underscore (_) line continuation
character:

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Target As Range)

---
Regards,
Norman



"Norman Jones" wrote in message
...
Hi Cooper,

Try changing:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)


to

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Target As
Range)


---
Regards,
Norman


"cooper" wrote in
message ...

I have formatted certain cells of my spreadsheet to indicate time in the
format hh:mm using the custom cell formattihg option.

With this method, everytime I enter a time say 19:30, I have to insert
a colon using the shift key and all.

I just wanted to enter the figures 1930 and let the cell format itself
to 19:30

I was informed by VBA Gurus to use the following VBA code:


Code:
--------------------

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

On Error GoTo EndMacro
If Application.Intersect(Target, Range("A1:A10")) 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

--------------------


and paste it in the workbook section (I have 25 worksheets in my
workbook and more to come), so that I don't have to paste the code in
all the individual worksheets. I believe the code needs some tweaking
if it has to be placed in the workbook section.

The problem is that it does not work.

Can somebody help me in this regard. FYI, I know nothing about VB
coding.

Thanks.


--
cooper
------------------------------------------------------------------------
cooper's Profile:
http://www.excelforum.com/member.php...o&userid=33171
View this thread:
http://www.excelforum.com/showthread...hreadid=529933






Mike K

Format Cell As You Type
 
Cooper,
Forgive me for being too simplistic here, but if you just want
to type in 1930 and have it show up in the cell as 19:30, why don't you just
custom format as ##":"## and you will accomplish the same thing.

Mike

"cooper" wrote:


I have formatted certain cells of my spreadsheet to indicate time in the
format hh:mm using the custom cell formattihg option.

With this method, everytime I enter a time say 19:30, I have to insert
a colon using the shift key and all.

I just wanted to enter the figures 1930 and let the cell format itself
to 19:30

I was informed by VBA Gurus to use the following VBA code:


Code:
--------------------

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

On Error GoTo EndMacro
If Application.Intersect(Target, Range("A1:A10")) 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

--------------------


and paste it in the workbook section (I have 25 worksheets in my
workbook and more to come), so that I don't have to paste the code in
all the individual worksheets. I believe the code needs some tweaking
if it has to be placed in the workbook section.

The problem is that it does not work.

Can somebody help me in this regard. FYI, I know nothing about VB
coding.

Thanks.


--
cooper
------------------------------------------------------------------------
cooper's Profile: http://www.excelforum.com/member.php...o&userid=33171
View this thread: http://www.excelforum.com/showthread...hreadid=529933



cooper[_2_]

Format Cell As You Type
 

If I use Norman's method, I get a compilation error. So Norman, could
you please amend the code and paste it using the 'code' tag. Thanks.

Mike, your suggestion is very good, but then I can't do any time/date
calculations using those cells. I will use it as a last resort.


--
cooper
------------------------------------------------------------------------
cooper's Profile: http://www.excelforum.com/member.php...o&userid=33171
View this thread: http://www.excelforum.com/showthread...hreadid=529933



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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com