Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Обход валидации ячейки


Автор: m9yt 20.9.2013, 07:54
Добрый день.
На ячейку повешена проверка действительных чисел. Как можно опередить событие валидации? Т.е. при, допустим, нажатии "Enter" у меня вначале редактируется введенный текст (в зависимости от региональных настроек меняется "." на "," или наоборот), а потом уже вызывается валидация. (Замену символов реализовал).

Worksheet_Change не подходит, т.к. событие валидации обрабатывается раньше.

Также интересует, как запретить вставку в ячейку заранее некорректных данных? Т.е. если в ней есть проверка на дату, и откуда-то вставить строку, то проверка не сработает.

Автор: Akina 20.9.2013, 08:55
Неправильный инструмент или подход к решению задачи = геморрой.

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


Автор: m9yt 20.9.2013, 09:14
Цитата(Akina @ 20.9.2013,  08:55)
Неправильный инструмент или подход к решению задачи = геморрой.

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

Знаю, что геморрой. Но заказчик так просит. А делать форму ввода ему не надо. Для ввода итак есть ячейка.

Просто если это невозможно, то можно об этом сказать, и вопрос будет закрыт.

Автор: Akina 20.9.2013, 09:21
Хорошо. Другой вариант - по всем мыслимым событиям (а лучше  по таймеру) стартуем процедуру валидации, если она в текущий момент неактивна. Если строка не прошла валидации - помечаем её (скажем, иконкой с большой красной Х в спецово выделенной на то колонке).
Само собой в этом случае она должа быть реально компактной и быстрой.

Автор: m9yt 20.9.2013, 09:52
Цитата(Akina @ 20.9.2013,  09:21)
Хорошо. Другой вариант - по всем мыслимым событиям (а лучше  по таймеру) стартуем процедуру валидации, если она в текущий момент неактивна. Если строка не прошла валидации - помечаем её (скажем, иконкой с большой красной Х в спецово выделенной на то колонке).
Само собой в этом случае она должа быть реально компактной и быстрой.

Ну вы предложили что-то уж очень навороченное. Мне бы просто перехватить процедурку валидации (стандартную, экселевскую, которая срабатывает, когда на ячейку вешается проверка из вкладки "данные")

Автор: Akina 20.9.2013, 10:48
Validation не порождает эвента, который можно обработать программно.

Автор: m9yt 20.9.2013, 11:08
Цитата(Akina @ 20.9.2013,  10:48)
Validation не порождает эвента, который можно обработать программно.

Получается, что никак изменить текст в ячейке после нажатия "Enter", но до Validation, не получится?

Автор: FINANSIST 2.10.2013, 08:26
простейший путь - перенос всех проверок валидации на событие change и отказ от валидации

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)