Добрый день! В модуль вставлена пользовательская функция сличения с шаблоном:
Код
Function MaskCompare(txt As String, mask As String, CaseSensitive As Boolean) As Boolean
If Not CaseSensitive Then
txt = UCase(txt)
mask = UCase(mask)
End If
If txt Like mask Then
MaskCompare = True
Else
MaskCompare = False
End If
End Function
Когда пытаюсь ее использовать для проверки вводимых значений, задавая формулу для проверки: =MaskCompare(ActiveCell.Value;"##-##";1) или даже; =MaskCompare("33-44";"##-##";1) то при попытке закрытия окна с параметрами проверки, получаю сообщение: "Указанный именованный диапазон не найден" У меня, как у Excel newbie, возник вопрос: можно ли использовать пользовательскую функцию в этих целях? Спасибо за помощь!
Михаил написал: =MaskCompare(ActiveCell.Value;"##-##";1)
Вы должны вместо ActiveCell.Value указывать ссылку на конкретную ячейку. Как в простой формуле. Что-то вроде:
Код
=MaskCompare(A1;"##-##";1)
где А1 - это адрес ячейки с проверкой данных. При этом проверка все равно может ругнуться, т.к. не рассчитана на UDF. Тогда придется сначала создать именованный диапазон с именем, скажем "маска", а в проверке данных выбрать Любой и вбить: =маска. Хотя и здесь я бы не сильно рассчитывал - проверка данных и УФ не очень дружат с UDF в принципе и даже если отработает в тестовом режиме, в боевой ситуации могут дать сбой.
написал: Не нахожу в Excel ... для проверки вводимых данных..
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "A1" Then
If MaskCompare(Target.Value, "##-##", 1) = False Then
MsgBox "Введённое значение неверно.", vbCritical
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End If
End Sub
тут все зависит от ситуации и навыков. Самое мощное - это заставить вводить данные через пользовательскую форму. Там можно любые ситуации обыграть, да еще и ввод будет только в нужные ячейки и в нужном формате. Знаете самую большую проблему проверки данных? Можно скопировать любую ячейку из другой книги или листа и спокойно вставить вместо Вашей проверки данных. Все, проверку обошли
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Михаил написал: Не нахожу в Excel достаточно мощного средства для проверки вводимых данных
UserForm - специальный инструмент для общения макроса с пользователем результат работы которого: вы получили от пользователя то, что от него требовалось, а если нет - то никакие данные не приняты вообще
Если Вы хотите воспользоваться пользовательской функцией для проверки значений, то есть обходной путь. Запишите, например, в (скрытую) ячейку G1 Вашу формулу:
Код
=MaskCompare(A1;"##-##";1)
а в условие проверки для ячейки A1 запишите формулу: