Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Быстрый ввод даты и времени и формат ячейки "Дата" - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Быстрый ввод даты и времени и формат ячейки "Дата"
RAN Дата: Воскресенье, 21.04.2019, 09:40 | Сообщение № 1
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Мяв!
Народ, подключайтесь.
Обнаружил проблему следующего свойства.
Вводим дату с использованием кода отсюда.
Если ввод осуществляется в ячейку с форматом "общий", все работает. Дата вводится, и в ячейке устанавливается формат "дата".
А вот при попытке исправить дату в ячейке, сначала Excel преобразует введенное значение в соответствии со своим пониманием правил работы с датой, и только после этого запускается макрос. Но в ячейке уже не то, что мы вводим, а погода в Африке.
Как сию бяку победить?
У меня с идеями туго.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМяв!
Народ, подключайтесь.
Обнаружил проблему следующего свойства.
Вводим дату с использованием кода отсюда.
Если ввод осуществляется в ячейку с форматом "общий", все работает. Дата вводится, и в ячейке устанавливается формат "дата".
А вот при попытке исправить дату в ячейке, сначала Excel преобразует введенное значение в соответствии со своим пониманием правил работы с датой, и только после этого запускается макрос. Но в ячейке уже не то, что мы вводим, а погода в Африке.
Как сию бяку победить?
У меня с идеями туго.

Автор - RAN
Дата добавления - 21.04.2019 в 09:40
_Boroda_ Дата: Воскресенье, 21.04.2019, 23:16 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А так в самом начале?
[vba]
Код
        If Target.NumberFormat = "m/d/yyyy" Then
            Target.NumberFormat = "General"
        End If
[/vba]



Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА так в самом начале?
[vba]
Код
        If Target.NumberFormat = "m/d/yyyy" Then
            Target.NumberFormat = "General"
        End If
[/vba]


Автор - _Boroda_
Дата добавления - 21.04.2019 в 23:16
DrMini Дата: Понедельник, 22.04.2019, 08:42 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1880
Репутация: 269 ±
Замечаний: 0% ±

Excel LTSC 2024 RUS
Если ввод осуществляется в ячейку с форматом "общий", все работает. Дата вводится, и в ячейке устанавливается формат "дата".

У меня сегодня выплыло тоже самое.
 
Ответить
Сообщение
Если ввод осуществляется в ячейку с форматом "общий", все работает. Дата вводится, и в ячейке устанавливается формат "дата".

У меня сегодня выплыло тоже самое.

Автор - DrMini
Дата добавления - 22.04.2019 в 08:42
_Boroda_ Дата: Понедельник, 22.04.2019, 09:07 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
И что, предложенный выше способ не подошел?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИ что, предложенный выше способ не подошел?

Автор - _Boroda_
Дата добавления - 22.04.2019 в 09:07
DrMini Дата: Понедельник, 22.04.2019, 09:10 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1880
Репутация: 269 ±
Замечаний: 0% ±

Excel LTSC 2024 RUS
Александр
И что, предложенный выше способ не подошел?

Я так и не понял, что и куда добавлять или заменять.
 
Ответить
СообщениеАлександр
И что, предложенный выше способ не подошел?

Я так и не понял, что и куда добавлять или заменять.

Автор - DrMini
Дата добавления - 22.04.2019 в 09:10
_Boroda_ Дата: Понедельник, 22.04.2019, 09:15 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Под спойлером моего поста выше начало макроса. Целиком так
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C5:C10000,E5:E10000,G5:G10000")) Is Nothing Then
        If Target.NumberFormat = "m/d/yyyy" Then
            Target.NumberFormat = "General"
        End If
        x_ = Target
        If Len(x_) = 5 Or Len(x_) = 6 Then
            If IsDate(Format(x_, "00\/00\/00")) Then
                If Mid(Format(x_, "00\/00\/00"), 4, 2) > 12 Then GoTo error_
                x_ = CDate(Format(x_, "00\/00\/00"))
            Else: GoTo error_
            End If
        ElseIf Len(x_) = 7 Or Len(x_) = 8 Then
            If IsDate(Format(x_, "00\/00\/0000")) Then
                If Mid(Format(x_, "00\/00\/0000"), 4, 2) > 12 Then GoTo error_
                x_ = CDate(Format(x_, "00\/00\/0000"))
            Else: GoTo error_
            End If
        Else: GoTo error_
        End If
        Application.EnableEvents = False
        Target = x_
        Application.EnableEvents = True
        ElseIf Not Intersect(Target, Range("D5:D10000,F5:F10000,H5:H10000")) Is Nothing Then
            If Len(Target) = 3 Or Len(Target) = 4 Then
                If IsDate(Format(Format(Target.Value, "00:00"), "h:nn")) Then
                    Application.EnableEvents = False
                    Target = Format(Format(Target.Value, "00:00"), "h:nn")
                    Application.EnableEvents = True
                Else
                    Application.EnableEvents = False
                    Application.Undo
                    Application.EnableEvents = True
                End If
            End If
        End If
        Application.EnableEvents = True
        Exit Sub
error_:
        Application.EnableEvents = False
        Target = Empty ' Punto Switcher, гад, отмене мешает
'        Application.Undo
        Application.EnableEvents = True
    End Sub
[/vba]
К сообщению приложен файл: 45418978.xlsm (15.2 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПод спойлером моего поста выше начало макроса. Целиком так
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C5:C10000,E5:E10000,G5:G10000")) Is Nothing Then
        If Target.NumberFormat = "m/d/yyyy" Then
            Target.NumberFormat = "General"
        End If
        x_ = Target
        If Len(x_) = 5 Or Len(x_) = 6 Then
            If IsDate(Format(x_, "00\/00\/00")) Then
                If Mid(Format(x_, "00\/00\/00"), 4, 2) > 12 Then GoTo error_
                x_ = CDate(Format(x_, "00\/00\/00"))
            Else: GoTo error_
            End If
        ElseIf Len(x_) = 7 Or Len(x_) = 8 Then
            If IsDate(Format(x_, "00\/00\/0000")) Then
                If Mid(Format(x_, "00\/00\/0000"), 4, 2) > 12 Then GoTo error_
                x_ = CDate(Format(x_, "00\/00\/0000"))
            Else: GoTo error_
            End If
        Else: GoTo error_
        End If
        Application.EnableEvents = False
        Target = x_
        Application.EnableEvents = True
        ElseIf Not Intersect(Target, Range("D5:D10000,F5:F10000,H5:H10000")) Is Nothing Then
            If Len(Target) = 3 Or Len(Target) = 4 Then
                If IsDate(Format(Format(Target.Value, "00:00"), "h:nn")) Then
                    Application.EnableEvents = False
                    Target = Format(Format(Target.Value, "00:00"), "h:nn")
                    Application.EnableEvents = True
                Else
                    Application.EnableEvents = False
                    Application.Undo
                    Application.EnableEvents = True
                End If
            End If
        End If
        Application.EnableEvents = True
        Exit Sub
error_:
        Application.EnableEvents = False
        Target = Empty ' Punto Switcher, гад, отмене мешает
'        Application.Undo
        Application.EnableEvents = True
    End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 22.04.2019 в 09:15
DrMini Дата: Понедельник, 22.04.2019, 09:23 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1880
Репутация: 269 ±
Замечаний: 0% ±

Excel LTSC 2024 RUS
Александр
Спасибо!
Меня Ваш спойлер сбил с понталыги. А так, как я в VBA полный ноль то решил подстраховаться.
Спасибо ещё раз.
 
Ответить
СообщениеАлександр
Спасибо!
Меня Ваш спойлер сбил с понталыги. А так, как я в VBA полный ноль то решил подстраховаться.
Спасибо ещё раз.

Автор - DrMini
Дата добавления - 22.04.2019 в 09:23
RAN Дата: Понедельник, 22.04.2019, 10:00 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Написал ответ, а форум сдох.
Саш, мУрси за направление на путь истинный.
Переклинило, решил что происходит по типу 1.5>>43586>>1.май, поэтому смену формата даже и не попробовал.
А проверка на формат, думаю, излишняя, ибо оставляет оператору лазейку для вольностей.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНаписал ответ, а форум сдох.
Саш, мУрси за направление на путь истинный.
Переклинило, решил что происходит по типу 1.5>>43586>>1.май, поэтому смену формата даже и не попробовал.
А проверка на формат, думаю, излишняя, ибо оставляет оператору лазейку для вольностей.

Автор - RAN
Дата добавления - 22.04.2019 в 10:00
DrMini Дата: Понедельник, 22.04.2019, 10:20 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1880
Репутация: 269 ±
Замечаний: 0% ±

Excel LTSC 2024 RUS
А проверка на формат, думаю, излишняя, ибо оставляет оператору лазейку для вольностей.

Не поясните? Был бы очень признателен.
 
Ответить
Сообщение
А проверка на формат, думаю, излишняя, ибо оставляет оператору лазейку для вольностей.

Не поясните? Был бы очень признателен.

Автор - DrMini
Дата добавления - 22.04.2019 в 10:20
RAN Дата: Понедельник, 22.04.2019, 10:33 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
If Target.NumberFormat = "m/d/yyyy" Then
            Target.NumberFormat = "General"
        End If


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение If Target.NumberFormat = "m/d/yyyy" Then
            Target.NumberFormat = "General"
        End If

Автор - RAN
Дата добавления - 22.04.2019 в 10:33
DrMini Дата: Понедельник, 22.04.2019, 10:37 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1880
Репутация: 269 ±
Замечаний: 0% ±

Excel LTSC 2024 RUS
RAN, Спасибо. Сегодня вечером буду разбираться. Я так понял это запрет на ввод Числа и месяца одной цифрой.
 
Ответить
СообщениеRAN, Спасибо. Сегодня вечером буду разбираться. Я так понял это запрет на ввод Числа и месяца одной цифрой.

Автор - DrMini
Дата добавления - 22.04.2019 в 10:37
RAN Дата: Понедельник, 22.04.2019, 10:42 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Нет.
Проверку я убрал, чтобы работало и в случае, если операторы решат, что "1 мая 2019г" выглядит "красивше"


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНет.
Проверку я убрал, чтобы работало и в случае, если операторы решат, что "1 мая 2019г" выглядит "красивше"

Автор - RAN
Дата добавления - 22.04.2019 в 10:42
DrMini Дата: Понедельник, 22.04.2019, 10:52 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1880
Репутация: 269 ±
Замечаний: 0% ±

Excel LTSC 2024 RUS
Ясно. Спасибо за пояснение.
 
Ответить
СообщениеЯсно. Спасибо за пояснение.

Автор - DrMini
Дата добавления - 22.04.2019 в 10:52
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!