Здравствуйте. Помогите, пожалуйста, решить проблему с введением дат. Работники очень-очень часто ставят неверный формат даты, то есть вместо точек ставят запятые, буквы, восклицательные знаки, лишние пробелы и прочее. Можно ли сделать макрос, который исправлял бы это, чтобы подгонял все под единый стандарт "2 числа-точка-2 числа-точка-4 числа"? Рабочие столбцы B и F.
Здравствуйте. Помогите, пожалуйста, решить проблему с введением дат. Работники очень-очень часто ставят неверный формат даты, то есть вместо точек ставят запятые, буквы, восклицательные знаки, лишние пробелы и прочее. Можно ли сделать макрос, который исправлял бы это, чтобы подгонял все под единый стандарт "2 числа-точка-2 числа-точка-4 числа"? Рабочие столбцы B и F.Kongа
Вам необходимо автоматизировать исправления сразу при вводе или ограничить вольности оператора ? Первое - да можно, но что делать в случае совсем нестандартного ввода, когда заменой запятых, убиранием пробелов не обойтись.? А так - очень небольшой скрипт Только с плюсами будет один минус, пропадет возможность отмены последних действий. Второе делается проще, в приложениие пример на основе встроенных средств проверки.
Kongа,
Вам необходимо автоматизировать исправления сразу при вводе или ограничить вольности оператора ? Первое - да можно, но что делать в случае совсем нестандартного ввода, когда заменой запятых, убиранием пробелов не обойтись.? А так - очень небольшой скрипт Только с плюсами будет один минус, пропадет возможность отмены последних действий. Второе делается проще, в приложениие пример на основе встроенных средств проверки.bmv98rus
bmv98rus, лучше макросом, ввод данных на этих столбцах, всегда един, то есть "2 числа-точка-2 числа-точка-4 числа", иных они не ставят. Второй вариант я применила, но к тем, кто совсем не обучаем и находится на дальних территориях, их часто не проконтролируешь, а рядом кто сидит, им можно и проще сделать. Если Вам не сложно, то прошу поделится этим чудом.
bmv98rus, лучше макросом, ввод данных на этих столбцах, всегда един, то есть "2 числа-точка-2 числа-точка-4 числа", иных они не ставят. Второй вариант я применила, но к тем, кто совсем не обучаем и находится на дальних территориях, их часто не проконтролируешь, а рядом кто сидит, им можно и проще сделать. Если Вам не сложно, то прошу поделится этим чудом.Kongа
Все не оптимально и сейчас раскритикуют, тем более что все учесть времени нет.
Примечанием если совсем не число типа 130,1,2014 то просто стирает. Еа всякий случай форматируя "ДД.ММ.ГГГГ" [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim result As String With Target If (.Column = 2 Or .Column = 6) And .Row <> 1 _ And Not IsNumeric(.Value) And Not IsEmpty(.Value) Then For i = 1 To Len(.Value) MyChar = Mid(.Value, i, 1) MyChrCode = Asc(MyChar) If MyChar = "." Or MyChrCode >= 48 And MyChrCode <= 57 Then result = result & MyChar ElseIf MyChar = "," Or MyChar = ":" Then result = result & "." End If Next i On Error Resume Next .Value = CDate(result) If Err.Number <> 0 Then .ClearContents Else .NumberFormat = "m/d/yyyy" End If Application.EnableEvents = True End If End With End Sub
[/vba]
Kongа,
Все не оптимально и сейчас раскритикуют, тем более что все учесть времени нет.
Примечанием если совсем не число типа 130,1,2014 то просто стирает. Еа всякий случай форматируя "ДД.ММ.ГГГГ" [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim result As String With Target If (.Column = 2 Or .Column = 6) And .Row <> 1 _ And Not IsNumeric(.Value) And Not IsEmpty(.Value) Then For i = 1 To Len(.Value) MyChar = Mid(.Value, i, 1) MyChrCode = Asc(MyChar) If MyChar = "." Or MyChrCode >= 48 And MyChrCode <= 57 Then result = result & MyChar ElseIf MyChar = "," Or MyChar = ":" Then result = result & "." End If Next i On Error Resume Next .Value = CDate(result) If Err.Number <> 0 Then .ClearContents Else .NumberFormat = "m/d/yyyy" End If Application.EnableEvents = True End If End With End Sub