У всех пользователей excel, за малым исключением, бывали случаи некорректного ввода даты в ячейки. Предлагаю подумать, каким образом, используя скрипты, можно добиться исправления кривой даты после её ввода в ячейку.
У всех пользователей excel, за малым исключением, бывали случаи некорректного ввода даты в ячейки. Предлагаю подумать, каким образом, используя скрипты, можно добиться исправления кривой даты после её ввода в ячейку.
ОК, как, например, интерпретировать 123/0011/2017? 12 или 23? января или ноября? Чем пытаться обработать "рукожо...", проще и логичнее его не допускать, о чём Сергей уже написал.
Цитата
Чтобы не перепечатывать
ОК, как, например, интерпретировать 123/0011/2017? 12 или 23? января или ноября? Чем пытаться обработать "рукожо...", проще и логичнее его не допускать, о чём Сергей уже написал.buchlotnik
Или вот такая задача: Макрос для автоматической замены "," на "." например, если введен текст 22,07,2014 то он автоматически переводит его в дату 22.07.2014
Или вот такая задача: Макрос для автоматической замены "," на "." например, если введен текст 22,07,2014 то он автоматически переводит его в дату 22.07.2014vitos88
Private Function gooddate(t) Application.Volatile With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\D+" gooddate = .Replace(t, "") If Len(gooddate) < 6 Or Len(gooddate) > 8 Then gooddate = "дата не найдена": Exit Function .Pattern = "(\d{2})(\d{2})(19|20|\d{0})(\d{2})" gooddate = CDate(.Replace(gooddate, "$1.$2.$4")) End With End Function
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect([дата], Target) Is Nothing Then Application.EnableEvents = False Target = gooddate(Target) Application.EnableEvents = True End If End Sub
[/vba]
Примотал из той темы [vba]
Код
Private Function gooddate(t) Application.Volatile With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\D+" gooddate = .Replace(t, "") If Len(gooddate) < 6 Or Len(gooddate) > 8 Then gooddate = "дата не найдена": Exit Function .Pattern = "(\d{2})(\d{2})(19|20|\d{0})(\d{2})" gooddate = CDate(.Replace(gooddate, "$1.$2.$4")) End With End Function
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect([дата], Target) Is Nothing Then Application.EnableEvents = False Target = gooddate(Target) Application.EnableEvents = True End If End Sub