Итак, упрощая мою задачу, у меня есть две колонки в Excel.
Первый (A) должен быть вводом времени в формате hh:mm
.
Вторым (B) должен быть ввод времени, отформатированный как hh:mm:ss
.
Хорошо, так как я делаю это проще для конечного пользователя. Я хотел бы помочь ему и заставить его работать так, чтобы он мог легко ввести "1230"
в столбце A, чтобы он автоматически преобразовывался в 12:30
, и легко ввести "153055"
в столбце B, чтобы он автоматически преобразовывался в 15:30:55
Поэтому я хочу спасти его от ввода двоеточия.
Таким образом, я создал этот код VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vVala, vValb
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Target, Range("A1:B100")) Is Nothing Then Exit Sub
With Target
vVala = Format(.Value, "000000")
vValb = Format(.Value, "0000")
If IsNumeric(vVala) And Len(vVala) = 6 Then
Application.EnableEvents = False
.Value = Left(vVala, 2) & ":" & Mid(vVala, 3, 2) & ":" & Right(vVala, 2)
.NumberFormat = "hh:mm:ss"
End If
If IsNumeric(vValb) And Len(vValb) = 4 Then
Application.EnableEvents = False
.Value = Left(vValb, 2) & ":" & Right(vValb, 2)
.NumberFormat = "hh:mm"
End If
End With
Application.EnableEvents = True
End Sub
Проблема в том, что я получаю ошибку. Когда я набираю , например, в любой ячейке столбца B, 011003
это правильно дает мне 01:10:03
, но если часы равны нулю, например, 000103
(или 00:01:03
), он фактически не понимает нули быть часами, и дает мне 01:03
.
Вероятно, это связано с тем, что диапазон моей цели установлен на оба столбца (Range("A1:B100"))
, когда он должен быть отдельным: 4-значный код для столбца A и " 6-значный код для столбца B.
Хотя я не знаю, как разделять цели. Может кто-нибудь мне помочь?