Ну тут пользовательская проверка данных, что число больше чем например 01.01.2018 и дробная часть больше чем 1/12 это не заблокирует ввод короткого года, но потребует ввода времени из правильного диапазона. Не у компа, думаю или сами справитесь или другие помогут.
Function MaskCompareMulti(txt As String, ParamArray masks()) As Boolean
MaskCompareMulti = False
For i = LBound(masks) To UBound(masks)
If txt Like masks(i) Then MaskCompareMulti = True
Next i
End Function
Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Excel.Range)
If sh.Name = "Таблица" Or sh.Name = "Таблица2" Then
If MaskCompartMulti(Target.Text, "##.##.####", "##.##.##", "##.##.#### ##:00", "##.##.#### ##:01","##.##.#### ##:02") > 0 Then
Application.Undo
MsgBox "Ввод запрещен !"
End If
End If
End Sub
Получилось так но это не подходит - нужно точное совпадение а не поиск в тексте - как изменить функцию на точное совпадение ?
Код
Function MaskCompareMulti(txt As String, ParamArray masks()) As Boolean
MaskCompareMulti = False
For i = LBound(masks) To UBound(masks)
If txt Like masks(i) Then MaskCompareMulti = True
Next i
End Function
Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Excel.Range)
If sh.Name = "Таблица" Or sh.Name = "Таблица2" Then
If Not Intersect(ActiveCell, Range("N4:N5003")) Is Nothing Then
If MaskCompareMulti(Target.Text, "##.##.####", "##.##.##", "##.##.#### 00:##", "##.##.#### 01:##", "##.##.#### 02:##") = True Then
Application.Undo
MsgBox "Ввод запрещен !"
End If
End If
End If
End Sub