![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 13.04.2011
Сообщений: 58
|
![]()
Здравствуй, всяк сюда заглянувший. Помоги, пожалуйста, разобраться.
Вопросы: 1. Не знаю, как поймать вводимое значение, на экране оно уже сменилось (после нажатия кнопки Enter), а по факту ячейке еще не присвоилось (т.к. не прошло проверку). 2. Можно ли как то учесть в макросе особенности? Суть проблемы: Есть макрос, который ограничивает тип вводимых данных в опр. диапазон ячеек (В данном примере диапазон ячеек (N5:N10), а вводимые значения могут быть только целые числа от 2 до 10): Sub Проверка_значений_ввода() ' Проверка_значений_ввода Макрос Range("N5:N10").Select With Selection.Validation .Delete .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertWarning, _ Operator:=xlBetween, Formula1:="2", Formula2:="10" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "Только целые числа" .ErrorTitle = "Это не целое число" .InputMessage = "от 2 до 10" .ErrorMessage = "Только от 2 до 10. " .ShowInput = True .ShowError = True End With End Sub Мне бы хотелось сделать более информативным сообщение об ошибке –т.е. указать пользователю, что та информация которую он ввел не является целым числом. Меняю строку .ErrorMessage: .ErrorMessage = "Только от 2 до 10. Ну разве это ("") похоже на целое число от 2 до 10?" Вместо - ""- получить непосредственно то, что ввел пользователь. Допустим, введен текст – Вечер- Тогда .ErrorMessage = "Только от 2 до 10. Ну разве это (Вечер) похоже на целое число от 2 до 10?" И тут у меня проблема 1. Если исп. адрес активной ячейки: .ErrorMessage = "Только от 2 до 10. Ну разве это ("& Cells(ActiveCell.Row, ActiveCell.Column) &") похоже на целое число от 2 до 10?" , то выдает ноль, т.е "0" 2. Если исп. & Cells(5,14) &, то выдает предыдущее значение (т.е. значение ячейки, которое было до того момента как пользователь ввел новые) Пусть Cells(5,14) было 123, запускаем макрос и вводим новое значение «текст» Получаем: 123 .ErrorMessage = "Только от 2 до 10. Ну разве это (123) похоже на целое число от 2 до 10?" , а надо «текст». Хотя в момент выдачи сообщения об ошибке на экране монитора в активной ячейке значение сменилось на «текст» Не знаю, как поймать вводимое значение, на экране оно уже сменилось (после нажатия кнопки Enter), а по факту ячейке еще не присвоилось (т.к. не прошло проверку). Подмечена интересная особенность: Шаг первый: Пусть макрос защищает ячейку N5, а в M5 “текст”, то присвоить ячейке N5 значение M5 (т.е в N5 записать =M5) НЕЛЬЗЯ Шаг второй: Однако если в М5 число удовлетворяющее условию то МОЖНО. 1 особенность: после второго шага в М5 можно писать все что угодно и ячейке N5 присвоиться все, что Вы ввели в М5 БЕЗ ОГРАНИЧЕНИЯ. 2 особенность: В защищаемую ячейку всегда можно вставить любые данные из буфера обмена, даже если они не удовлетворяют условию. Можно ли как то учесть в макросе и эти особенности? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Я думаю, код нужно строить на событии изменения значения ячейки, а не на проверке данных.
Тогда можно всё сделать - и проверку любую, и сообщения, и стереть введённое кодом, если оно не соответствует требованиям. И вставка из буфера тоже отлавливается.
webmoney: E265281470651 Z422237915069 R418926282008
|
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 13.04.2011
Сообщений: 58
|
![]() Цитата:
Пока так все и работает.... Позволяю вводить все что угодно, а потом преобразую введенные данные к соотв типу и значению. Просто увидел, что можно ограничить ввод, показалось интересным. Покрутил по разному данную конструкцию и понял, что есть ньюансы. Думал может кто уже нашел решение............. Да и любопытство осталось..... Где находится введенное значение с момента нажатия Enter и до момента прохождения проверки |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ограничение на ввод символов в ячейку | J-Max | БД в Delphi | 7 | 29.12.2010 13:30 |
как поставить ограничение на ввод нуля? | Dr.Swat | Общие вопросы Delphi | 5 | 14.06.2010 06:43 |
Как в MS Excel посчитать сумму значений по столбцам, входящих в именованную ячейку? | sahthey | Microsoft Office Excel | 3 | 20.05.2010 11:32 |
Как можно запретить повторный ввод нуля в ячейку StringGrid | Ветас | Помощь студентам | 5 | 12.11.2009 13:43 |
Как копировать URL адрес из ячейки в другую ячейку (макросом). | AlexDoom | Помощь студентам | 1 | 09.03.2009 10:59 |