Скажите, пожалуйста, возможно ли написать какой-то маленький скриптик, который бы устанавливал ограничение по вводу данных на конкретный диапазон ячеек?
Например: у меня есть лист с ячейками, в который я хочу вводить лишь даты или букву "х". Другие значения должна быть запрещены для ввода.
Я могу сделать через "Data validation", чтобы можно было вводить лишь даты. Но тогда нет возможности ввести "x".
Можно ли как-то сделать такой макрос, который выполнял бы оба требования одновременно? Либо дата, либо "х".
Спасибо!
Здравствуйте,
Скажите, пожалуйста, возможно ли написать какой-то маленький скриптик, который бы устанавливал ограничение по вводу данных на конкретный диапазон ячеек?
Например: у меня есть лист с ячейками, в который я хочу вводить лишь даты или букву "х". Другие значения должна быть запрещены для ввода.
Я могу сделать через "Data validation", чтобы можно было вводить лишь даты. Но тогда нет возможности ввести "x".
Можно ли как-то сделать такой макрос, который выполнял бы оба требования одновременно? Либо дата, либо "х".
KIMVSR, здравствуйте. Можно сделать проверку при изменении листа:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("a1:g13")) Is Nothing Then If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then Application.EnableEvents = False MsgBox "Вы можете вводить только дату или символ х", vbCritical Target.ClearContents Application.EnableEvents = True End If End If End Sub
[/vba]
KIMVSR, здравствуйте. Можно сделать проверку при изменении листа:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("a1:g13")) Is Nothing Then If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then Application.EnableEvents = False MsgBox "Вы можете вводить только дату или символ х", vbCritical Target.ClearContents Application.EnableEvents = True End If End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:G13")) Is Nothing Then Exit Sub If Len(Target) And Not IsDate(Target) And Target <> "x" Then MsgBox "В этой ячейке разрешен ввод даты, либо ""x""": _ Application.EnableEvents = False: Target = Empty: Target.Select: Application.EnableEvents = True End Sub
[/vba]
можно так (см. вложенный файл) [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:G13")) Is Nothing Then Exit Sub If Len(Target) And Not IsDate(Target) And Target <> "x" Then MsgBox "В этой ячейке разрешен ввод даты, либо ""x""": _ Application.EnableEvents = False: Target = Empty: Target.Select: Application.EnableEvents = True End Sub
А можно ещё как-то сделать так, чтобы даты вводились только в формате 25.06.2015 Т.е. исключительно через точку. Просто сейчас можно ввести 25,06,2015. А с такими датами (через запятую) не работает conditional formatting.
Т.е. мне просто нужно исключить все возможные варианты опечаток и ошибок при вводе.
Manyasha, KSV, ребят, просто супер!
А можно ещё как-то сделать так, чтобы даты вводились только в формате 25.06.2015 Т.е. исключительно через точку. Просто сейчас можно ввести 25,06,2015. А с такими датами (через запятую) не работает conditional formatting.
Т.е. мне просто нужно исключить все возможные варианты опечаток и ошибок при вводе.KIMVSR
Сообщение отредактировал KIMVSR - Четверг, 25.06.2015, 12:01
KIMVSR, в конец допишите (в мой макрос или в макрос Сергея (KSV) - все равно)[vba]
Код
Application.EnableEvents = True 'После этой строчки ElseIf IsDate(Target.Value) Then Target.NumberFormat = "dd.mm.yyyy"
[/vba] Хотя странно, через запятую я не могу ввести, т.к. это не дата. Да и УФ, если оно построено не на текстовом сравнении, должно понимать все форматы даты (если у Вас конечно действительно дата вводится через запятую)
UPD Проверка на дату не обязательна, можно и без нее[vba]
Код
Application.EnableEvents = True 'После этой строчки Else Target.NumberFormat = "dd.mm.yyyy"
[/vba] [p.s.]Если будете использовать макрос KSV, не забудьте закрыть If и msgbox на новую строку перенести.[/p.s.]
KIMVSR, в конец допишите (в мой макрос или в макрос Сергея (KSV) - все равно)[vba]
Код
Application.EnableEvents = True 'После этой строчки ElseIf IsDate(Target.Value) Then Target.NumberFormat = "dd.mm.yyyy"
[/vba] Хотя странно, через запятую я не могу ввести, т.к. это не дата. Да и УФ, если оно построено не на текстовом сравнении, должно понимать все форматы даты (если у Вас конечно действительно дата вводится через запятую)
UPD Проверка на дату не обязательна, можно и без нее[vba]
Код
Application.EnableEvents = True 'После этой строчки Else Target.NumberFormat = "dd.mm.yyyy"
[/vba] [p.s.]Если будете использовать макрос KSV, не забудьте закрыть If и msgbox на новую строку перенести.[/p.s.]Manyasha
ЯД: 410013299366744 WM: R193491431804
Сообщение отредактировал Manyasha - Четверг, 25.06.2015, 12:11
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:G13")) Is Nothing Then If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then Application.EnableEvents = False MsgBox "Only date or 'x' value is allowed to input!", vbCritical Target.ClearContents Application.EnableEvents = True Else Target.NumberFormat = "dd.mm.yyyy" End If End If End Sub
[/vba]
Manyasha, сейчас попробую.
Увы, но всё равно даёт вводить через запятую:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:G13")) Is Nothing Then If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then Application.EnableEvents = False MsgBox "Only date or 'x' value is allowed to input!", vbCritical Target.ClearContents Application.EnableEvents = True Else Target.NumberFormat = "dd.mm.yyyy" End If End If End Sub
сделайте вот так и не заморачивайтесь с проверками [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:G13")) Is Nothing Then Application.EnableEvents = False If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then MsgBox "Only date or 'x' value is allowed to input!", vbCritical Target.ClearContents Else Target = Format(Target, "dd.mm.yyyy") End If Application.EnableEvents = True End If End Sub
[/vba]
сделайте вот так и не заморачивайтесь с проверками [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:G13")) Is Nothing Then Application.EnableEvents = False If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then MsgBox "Only date or 'x' value is allowed to input!", vbCritical Target.ClearContents Else Target = Format(Target, "dd.mm.yyyy") End If Application.EnableEvents = True End If End Sub
Обнаружил, что с данным макросом перестаёт работать conditional formatting.
Сделал такое правило:
Т.е. если событие было больше, чем год назад, система должна выделять её красным цветом. Но этого не происходит. Причём текст вводится красным цветом, а потом резко превращается в чёрный.
Без макроса эта функция у меня работает без проблем.
Может кто-то смог бы помочь разобраться?
UPD: вернее сказать, conditional formatting работает, если применить его уже на введённые даты. Но если вводить даты уже после после - не срабатывает. [moder]УФ к данной теме не относиться, создайте новую. Если работа файла зависит от наличия кода, прикладывайте свой пример с макросом.[/moder]
Обнаружил, что с данным макросом перестаёт работать conditional formatting.
Сделал такое правило:
Т.е. если событие было больше, чем год назад, система должна выделять её красным цветом. Но этого не происходит. Причём текст вводится красным цветом, а потом резко превращается в чёрный.
Без макроса эта функция у меня работает без проблем.
Может кто-то смог бы помочь разобраться?
UPD: вернее сказать, conditional formatting работает, если применить его уже на введённые даты. Но если вводить даты уже после после - не срабатывает. [moder]УФ к данной теме не относиться, создайте новую. Если работа файла зависит от наличия кода, прикладывайте свой пример с макросом.[/moder]KIMVSR