Средство проверки данных MS Excel не принимает вызов пользовательского макроса

у меня есть рабочий макрос VB, который проверяет содержимое. Он принимает два строковых параметра (значение ячейки и регулярное выражение) и возвращает значение True или False. Он использует CreateObject("VBscript.regexp") внутренне.

мне нужно использовать этот макрос для проверки ячейки. Когда я пытаюсь установить его в качестве пользовательского валидатора путь

=Rex(E2, "d{1,2}:d{2}")

где Rex-моя функция, определенная на одном и том же листе распространения (Alt-F11 и type) , А E2-ячейка, которую я пытаюсь проверить, я получаю сообщение " именованный диапазон указанное не может быть найден".

если я вставляю ту же функцию в другом месте той же таблицы (скажем, в верхней угловой ячейке A1):

=Rex(E2, "d{1,2}:d{2}")

он показывает мне красиво TRUE если ячейка E2 правильное значение, как 15:07 и FALSE если не нравится 15xx - половина решена, но на самом деле не до конца. Мне действительно нужно интегрировать мой валидатор стандартным способом.

я использую MS Excel 2010. Сам макрос

Public Function Rex(ByVal vsStringIn As String, ByVal vsPattern As String) As Boolean
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBscript.regexp")

    objRegEx.Global = True
    objRegEx.Pattern = vsPattern

    Rex = objRegEx.Test(vsStringIn)
    Set objRegEx = Nothing
End Function

и проблема выглядит так:

MS Excel validator problem

13
задан h22
17.05.2023 10:18 Количество просмотров материала 2868
Распечатать страницу

2 ответа

интересные задачи. Похоже, UDF не всегда работают в проверке данных! : - (

следующие варианты:

  • используйте Условное форматирование и просто выделите неправильное значение
  • используйте обычную формулу Excel вместо регулярных выражений для проверки. В вашем случае
    =IFERROR(IF(SEARCH(":",D3),AND(ISNUMBER(VALUE(LEFT(D3,SEARCH(":",D3)-1))),ISNUMBER(VALUE(RIGHT(D3,LEN(D3)-SEARCH(":",D3))))),FALSE),FALSE)
    сделает работу. Не приятно,но зато функционально! ; -)

Примечание: ни ОДС, ни выше формула будет работать, если значение быть проверенным-это число (с форматом времени), а не строка!

1
отвечен Peter Albert 2023-05-18 18:06

Я знаю, это старый вопрос, но я не хочу дублировать вопрос.

решение: вы можете применить формулу функции в другую камеру, а затем использовать это значение для проверки данных. Можно скрыть временное значение, просто изменив цвет на белый.

для получения дополнительной информации: http://support.microsoft.com/kb/160523

0
отвечен Gerhard Powell 2023-05-18 20:23

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх