please help.is it possible re-edit macro to convert text like1530-2200 to time format automatically?

  • Thread starter Thread starter michael.spun
  • Start date Start date
M

michael.spun

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
 
Hi Michael,

Am Wed, 22 Jan 2014 05:29:30 -0800 (PST) schrieb (e-mail address removed):
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

try:

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:A10")) Is Nothing _
Or Target.Count > 1 Then Exit Sub

Dim myTime As Double

Application.EnableEvents = False
Select Case Len(Target)
Case 1, 2
myTime = Target / 1440
Case 3
myTime = Left(Target, 1) / 24 + Right(Target, 2) / 1440
Case 4
myTime = Left(Target, 2) / 24 + Right(Target, 2) / 1440
Case 5
myTime = Left(Target, 1) / 24 + Mid(Target, 2, 2) / 1440 + _
Right(Target, 2) / 86400
Case 6
myTime = Left(Target, 2) / 24 + Mid(Target, 3, 2) / 1440 + _
Right(Target, 2) / 86400
Case Is > 6
myTime = 0
End Select
If myTime > 0 Then
Target = myTime
Target.NumberFormat = "h:mm:ss"
Else
Target.Clear
Target.NumberFormat = "General"
MsgBox "You did not enter a valid time"
End If
Application.EnableEvents = True
End Sub


Regards
Claus B.
 
Back
Top