Данные-Проверка не работает

Программирование на Visual Basic for Applications
Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Данные-Проверка не работает

Сообщение Wasup! » 13.12.2007 (Чт) 18:25

На ячейку установлена проверка, значение меньше 10.
Если в ячейку ввести, например 12345, то всё нормально – выдается сообщение об ошибке.
Но, если это 12345 скопировать из другой ячейки, то всё вставляется. Проверка просто затирается!

Скажите, пожалуйста, как сделать проверку, которая будет работать всегда и не обходиться элементарным copy&paste?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 13.12.2007 (Чт) 19:20

Боюсь, что никак :-(

проверка обходится:
- Copy&Paste
- Протяжкой значения ячейки
- формулой
- VBA

Условное форматирование обходится:
- Copy&Paste
- Протяжкой значения ячейки

самописная процедура проверки привязанная к событию Worksheet_Change обходится:
- отключением макросов
Привет,
KL

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 13.12.2007 (Чт) 20:14

:(

Получается, что если я хочу реализовать банальную проверку число<10 в ячейке, то мне надо делать форму на VBA, что-то вроде «Ввести данные в текущую ячейку», где-то на листе делать кнопку, которая вызывает эту форму, а сам лист защищать от редактирования?

Нет, ли пути попроще?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 13.12.2007 (Чт) 20:40

Wasup! писал(а)::(

Получается, что если я хочу реализовать банальную проверку число<10 в ячейке, то мне надо делать форму на VBA, что-то вроде «Ввести данные в текущую ячейку», где-то на листе делать кнопку, которая вызывает эту форму, а сам лист защищать от редактирования?

защита листа, кстати, тоже обходится нараз :-)

Wasup! писал(а):Нет, ли пути попроще?

Access????
Привет,
KL

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 14.12.2007 (Пт) 8:52

KL писал(а):защита листа, кстати, тоже обходится нараз :-)


Не знал :( а можно по подробнее?
Про Access уже думаю.

Pavel55
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 27.10.2006 (Пт) 20:11

Сообщение Pavel55 » 14.12.2007 (Пт) 13:26

Wasup! писал(а): а можно по подробнее?


Можно. Вот ссылка. Там ниже на странице будет код

http://www.mcgimpsey.com/excel/removepwords.html

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 17.12.2007 (Пн) 9:34

Спасибо, но это уже преднамеренный обход защиты. Тогда, как данные-проверка пользователь может обойти совсем случайно, просто скопировав. Да и проверку с помощью макросов пользователь тоже может обойти не преднамеренно, просто они могут быть по умолчанию отключены на его компьютере.

В общем, сделал так: рядом с ячейкой, куда вводится значение, другая, защищенная, в ней формула =ЕСЛИ(A1<10;"";"А1 должно быть меньше 10") и дальше всё на усмотрение пользователя.

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 17.12.2007 (Пн) 17:46

То же не работает :(

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

Например, А1 проверяемая ячейка, B1 защищенная ячейка с формулой.
Встаем на A1, ctrl+x, ctrl+v в С15, формула меняется на
=ЕСЛИ(С15<10;"";"А1 должно быть меньше 10")
Таким образом при интенсивном редактировании, пользователь может случайно сменить ссылку, и больше не видеть результатов проверки.

Как сделать так, чтобы формула всегда ссылалась на конкретную ячейку и не меняла свою ссылку?

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 19.12.2007 (Ср) 9:28

Пожалуйста, посмотрите пример. Он поясняет, как я пытаюсь сделать проверку.

Вопрос в том: можно ли закрепить формулы, чтобы они всегда ссылались на указанную ячейку?
Вложения
Primer.xls
(18.5 Кб) Скачиваний: 87

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 20.12.2007 (Чт) 14:58

Выбирай:
=ЕСЛИ(ДВССЫЛ("A3")<=10;"Ок";"Неправильное значение в стобце А")
=ЕСЛИ(ДВССЫЛ("A"&СТРОКА())<=10;"Ок";"Неправильное значение в стобце А")
=ЕСЛИ(ДВССЫЛ(АДРЕС(СТРОКА();1))<=10;"Ок";"Неправильное значение в стобце А")
=ЕСЛИ(ДВССЫЛ("RC[-3]";0)<=10;"Ок";"Неправильное значение в стобце А")
=ЕСЛИ(СМЕЩ(D3;;-3)<=10;"Ок";"Неправильное значение в стобце А")

но формула будет летучей
Привет,
KL

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 24.12.2007 (Пн) 9:25

Спасибо,
Вот это =ЕСЛИ(ДВССЫЛ("A3")<=10;"Ок";"Неправильное значение в стобце А") вполне подходит.

Немного не понял, а почему она будет летучей? Вроде всё хорошо, жестко указывает на А3, не изменяется.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 24.12.2007 (Пн) 14:08

Wasup! писал(а):Спасибо,
Вот это =ЕСЛИ(ДВССЫЛ("A3")<=10;"Ок";"Неправильное значение в стобце А") вполне подходит.

Немного не понял, а почему она будет летучей? Вроде всё хорошо, жестко указывает на А3, не изменяется.
Потому что функция ДВССЫЛ летучая по дизайну и по определению. Это и логично, ведь "А3" у нас текстовая строка, а значит как еще наша формула узнает об изменениях в [A3] - только пересчитывая при каждой возможности в надежде поймать момент изменения.

Список летучих функций Office 2003-2007:

очевидно летучие
СЛЧИС
ТДАТА
СЕГОДНЯ

не так очевидно летучие
СМЕЩ
ЯЧЕЙКА
ДВССЫЛ
ИНФОРМ

летучие вопреки Справке Microsoft
ЯЧЕЙКА("filename")

не летучие вопреки Справке Microsoft
ИНДЕКС
ЧСТРОК
ЧИСЛСТОЛБ
ОБЛАСТИ

Подробнее: http://www.decisionmodels.com/calcsecretsi.htm
Привет,
KL

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 25.12.2007 (Вт) 9:25

Спасибо, я даже не знал про такое определение.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 108

    TopList