Страницы: 1
RSS
Макрос ввода даты без разделителей даёт error...
 
Здравствуйте,

Попытался добавить макрос в продолжение другого макроса, чтобы вводить время без разделителей. https://www.planetaexcel.ru/techniques/6/51/. Получилось что то такое. Только потом макрос выдаёт ошибку 1004 "Unable to set the NumberFormat property of the Range class".
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'Update 20140722
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target)
xOffsetColumn = 2
If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    Unprotect Password:="1583568383as"
    For Each Rng In WorkRng
        If Not VBA.IsEmpty(Rng.Value) Then
            Rng.Offset(0, xOffsetColumn).Value = Now
            Rng.Offset(0, xOffsetColumn).Value = Format(Now, "dd.mm.yyyy")
        Else
            Rng.Offset(0, xOffsetColumn).ClearContents
        End If
    Next
    Application.EnableEvents = True
    Protect Password:="1583568383as"
End If
Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target)
xOffsetColumn = 14
If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    Unprotect Password:="1583568383as"
    For Each Rng In WorkRng
        If Not VBA.IsEmpty(Rng.Value) Then
            Rng.Offset(0, xOffsetColumn).Value = Now
            Rng.Offset(0, xOffsetColumn).Value = Format(Now, "hh:mm")
             Else
            Rng.Offset(0, xOffsetColumn).ClearContents
        End If
    Next
    Application.EnableEvents = True
    Protect Password:="1583568383as"
End If
     
    If Not Intersect(Target, Range("O:O")) Is Nothing Then
        With Target
            vVal = Format(.Value, "0000")
            If IsNumeric(vVal) And Len(vVal) = 4 Then
                Application.EnableEvents = False
                .Value = Left(vVal, 2) & ":" & Right(vVal, 2)
                .NumberFormat = "[h]:mm"
            End If
        End With
     End If
     Application.EnableEvents = True
End Sub
По почерку принтера можно судить о том, как нервничает компьютер
 
У вас в коде значение = строка (объединение строки-результата работы функции Left, знака : и строки результата функции Right
Код
                .Value = Left(vVal, 2) & ":" & Right(vVal, 2)
                .NumberFormat = "[h]:mm"

А потом вы к строке применяете формат время. Если речь идет о вводе 4 цифр без разделителя, и чтобы в ячейке в результате получалось время в формате чч:мм, то тогда надо отделять первые 2 символа, преобразовывать их в число и умножать это число на 1/24 (доля 1 часа в сутках). Потом брать 2 последних цифры, преобразовывать в число, и умножать число на 1/(24*60) - доля 1 минуты в сутках. Потом эти числа складывать и применять уже к ЧИСЛУ NumberFormat.
Типа:
Код
 .Value = CInt(Left(vVal, 2))*1/24+CInt(Right(vVal, 2))*1/(24*60)
.NumberFormat = "[h]:mm"
Изменено: Пытливый - 13.06.2019 13:47:30
Кому решение нужно - тот пример и рисует.
 
Пытливый, Да, но как это в макросе решить?
По почерку принтера можно судить о том, как нервничает компьютер
 
Пытливый, Я поменял значение макроса на Ваше, но ошибку всё равно выдаёт.
Изменено: Шахин - 13.06.2019 13:52:44
По почерку принтера можно судить о том, как нервничает компьютер
 
однако...
тут нужно крепко подумать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Столбец O:O
Не решается никак. Сам тоже тут всячески стараюсь, по сайтам лазаю. Никак не могу найти решения.
По почерку принтера можно судить о том, как нервничает компьютер
 
Цитата
Шахин написал: по сайтам лазаю
Толку от этого лазанья? Думаете где-то лежит готовое решение для Вашей конкретной ситуации и терпеливо Вас дожидается? Ошибаетесь, его писать нужно специально для Вашей задачи, а для этого нужно знать ЗАДАЧУ, а не то, что Вы пытались добавить какое-то продолжение в рабочий макрос.
Покажите какой макрос Вы хотели добавить, какую задачу решаете?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Здравствуйте! Я сделал иначе!)) Решил без макроса!) Спасибо за отклик!) :)  
По почерку принтера можно судить о том, как нервничает компьютер
 
Нет худа без добра!  ;)  
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх