2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Аватара пользователя
OSWin777

2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение OSWin777 »

Здравствуйте!



Прошу помощи у специалистов!

Приложен файл с ошибками в 327-й строке. Стоит защита листа (изначально - с паролем). Файл сделан в расчете на пользователей, НЕ УМЕЮЩИХ пользоваться компьютером в принципе.

КАК могла возникнуть подобная ошибка??

Как модифицировать файл, чтобы избежать подобных ошибок в дальнейшем?



Заранее большое спасибо!
Вложения
Bug.rar
(112.34 КБ) 0 скачиваний
Bug.rar
(112.34 КБ) 0 скачиваний
Аватара пользователя
a_axe

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение a_axe »

OSWin777, не очень понятно в чем заключается ошибка.

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

PS Речь идет только об условном форматировании?
Аватара пользователя
a_axe

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение a_axe »

Если вопрос только в форматировании, то проблема была в следующем:

Условное форматирование (красная заливка строки) работает на основании значения ячейки в столбце F. Соответственно, пользователь судя по всему неосознанно схватил ячейку F327 за рамку и перетащил ее в ячейку C327. Ячейка была незащищаемой.

Решение на первый взгляд такое:

1. Снять защиту с листа.

2. Указать в свойствах всех ячеек, что они защищаемые.

3.Кнопкой "Разрешить изменение диапазонов" указать диапазон(ы) тех ячеек, в которые пользователь будет вбивать данные

4. Включить защиту листа.

если проблема в ином ракурсе, отпишитесь.

Ох ты, я эти ошибки вообще не увидел)

Ну получается что ячейка С327 была заменена ячейкой F327. Решение то же.
Аватара пользователя
OSWin777

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение OSWin777 »

a_axe

Большое спасибо за предложенный способ!

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

Нет ли такого способа, чтобы исключить и перетаскивание ячеек (и, желательно, вообще такие пункты меню, как копирование/вставка и т.п.) в ячейках для ввода данных и оставить выделяемыми только эти ячейки?

Заранее большое спасибо!

П.с. Насчет переноса F327 в C327 и появления из-за этого ошибки #ССЫЛКА - это Вы прекрасно подметили! Но интересно, как могли появиться прочие ошибки в данной строке, как то выделение всех границ ячеек жирными рамками, изменение форматов чисел, выделение красным цветом вводимых значений не только в ячейке C327 и т.п.?

П.п.с. Еще столкнулся с необъяснимой ошибкой ранее. Пользователь, предположительно, работал с зажатой посторонним предметом клавишей левый Shift. После этого возникло следующее: во всех незаполненных строках формулы считали значения ТОЛЬКО после сохранения документа, а до сохранения клетки результатов оставались пустыми! Что является возможной причиной данной ошибки? Можно ли заблокировать для пользователя ввод всех команд Excel с клавиатуры?

П.п.п.с. Все строки файла одинаковые, так что и сверху и снизу от 327-й полностью исправные строки.
Аватара пользователя
a_axe

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение a_axe »

OSWin777, сложно посоветовать что-то толковое.


Цитата OSWin777:



в ячейках для ввода данных и оставить выделяемыми только эти ячейки
2003/XP/2000 - [Решено] Защита "от дурака" в Excel




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

1. Переименовал бы ваш существующий лист в "Исходные данные"

2. Создал бы копию этого листа и назвал "Результат"

3. На листе "Результат" в ячейках, данные в которые вносит пользователь - сделал бы ссылки на соответствующие ячейки листа "Исходные данные"

4. Убрал бы с листа "исходные данные" все расчетные ячейки, оставил бы только те, в которые пользователь заносит данные.

5. Выставил бы разрешения на оба листа - в листе "Результат" вообще ничего нельзя выделять и менять, на листе "Исходные данные" соответственно запретил что не надо, плюс разрешил бы изменения диапазонов.

6. Защитил бы листы.

7. Возможно - скрыл бы ярлычок листа "Результат" - если пользователь не в состоянии понять, что он делает, ему этот лист вообще не нужен.



Как результат - люди работают с первым листом, результат отображается на втором в полном объеме как у вас было изначально.



На 100% уверен, что в конечном итоге лучше выучить людей работе, все подобные меры все равно не помогают. Думаю, что любому человеку можно объяснить, что вбивать можно только в ячейки белого цвета, если объяснить не получается - это уже клиника какая-то. Ну еще кнопку "проверка данных" нажать из вкладки "Данные", там выбрать любое значение", а в "сообщение для вывода" вбить что-нить ругательное типо "Эта ячейка не белая, поищи белую", и при выделении ячейки пользователь получит предупреждение с этой фразой. Когда-нибудь ему надоест это читать.


Цитата OSWin777:



как то выделение всех границ ячеек жирными рамками, изменение форматов чисел, выделение красным цветом вводимых значений
2003/XP/2000 - [Решено] Защита "от дурака" в Excel





Цитата OSWin777:



работал с зажатой посторонним предметом клавишей левый Shift
2003/XP/2000 - [Решено] Защита "от дурака" в Excel




Соответственно, если таскать ячейку за рамку с зажатым шифтом - ячейка перемещается, да еще сдвигает остальные ячейки вправо или вниз (я этого не знал кстати, любопытно), разумеется вместе с форматированием. Соответственно - если перетащить любую ячейку из первого столбца, вместе с ней вы перетащите жирную рамку границы вместе с ячейкой, красный шрифт у вас на листе тоже где-то встречался. Форматирование ваше же родное, просто ячейки перемешаны. Возможно, какие-нибудь сочетания клавиш сработали.
Цитата:



считали значения ТОЛЬКО после сохранения документа



На этот счет даже нет предположений. Кроме того, что уже говорил - лучше научите людей экселю, вам в конечном итоге дешевле выйдет Изображение
Аватара пользователя
OSWin777

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение OSWin777 »

a_axe, большое спасибо за столько интересных предложений!



Но вообще, мне именно "элегантное" решение-то и найти надо бы Изображение.

Разделение на 2 листа точно не подходит, т.к. на самом деле пользователю нужно видеть и результаты именно в консолидированном виде.

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

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение a_axe »

OSWin777, на VBA можно достичь того, чего вы хотите.

Код приблизительно следующий:



Код:

Код: Выделить всё

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim j As Integer, i As Integer
j = Application.ActiveCell.Column
Select Case j
    Case 2 To 5, Is = 7, Is = 8
    i = -1
    Case Is = 12
    i = -1
   Case Else
    i = 0
End Select
ActiveCell.Offset(0, i).Select
End Sub

Вставьте в редакторе VBA в расчетный лист, соответственно в операторе case вставьте через запятую номера столбцов Is=1, где вместо единицы номер столбца, который не должен выделять пользователь. В примере это номера от 2 до 5, 7, 8 и 12.

Выделение будет смещаться влево до первой разрешенной ячейки.
Аватара пользователя
OSWin777

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение OSWin777 »

a_axe, супер, большое спасибо!



Как модифицировать скрипт, чтобы не выделялись одновременно строки с 1-й по 5-ю?



А можно использовать данный скрипт для указания любых наборов диапазонов ячеек, не только столбцов или строк?

Мне бы здорово пригодилась такая вещь.

Какая команда на задание диапазона для j, и как указывается диапазон?



П.с. Для чего в скрипте последний столбец указывается отдельно и строка i = -1 дублируется?



Заранее большое спасибо!



П.п.с. На самом деле даже с таким скриптом оказалось не все идеально... Дело в том, что при задании выделения заблокированных ячеек в защите листа и соответствующих диапазонов, по нажатию стрелки влево/вправо активная ячейка в эти диапазоны не перескакивает (как при обычном разделении ячеек на защищаемые и незащищаемые и выделении только первых), и ее приходится выбирать только с помощью мыши, что, конечно, сильно замедляет работу.
Аватара пользователя
a_axe

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение a_axe »

Цитата OSWin777:



А можно использовать данный скрипт для указания любых наборов диапазонов
2003/XP/2000 - [Решено] Защита "от дурака" в Excel




На VBA можно реализовать практически любую прикладную потребность. Мое знание VBA очень поверхностно, хотя в диапазонах ничего сложного нет. Однако, тут гугл Вам в помощь, поищите, растите над собой)
Цитата OSWin777:



Для чего в скрипте последний столбец
2003/XP/2000 - [Решено] Защита "от дурака" в Excel




Как пример вам, чтобы было понятно, как вбить номера всех ваших столбцов. Я честно говоря, номера проставил совершенно произвольно.
Цитата OSWin777:



не все идеально
2003/XP/2000 - [Решено] Защита "от дурака" в Excel




Проблем на самом деле еще больше, код совсем простенький. По сути в процессе работы вылезет много нюансов. Вот вам еще экземпляр, там диапазоны перескакивает, однако при смене направления перехода требуется двойное нажатие на стрелку (то есть если идти все время вправо, а потом нажать влево, нужно два нажатия).



Код:

Код: Выделить всё

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim j As Integer, i As Integer
Static Jold As Integer
j = Application.ActiveCell.Column
Select Case j
    Case 11, 12, 14, 15, 17, 18, 20, 21, 23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 41, 42, 44, 45
    i = 1
   Case Else
    i = 0
End Select
If Jold >= j And j  1 Then i = -i
ActiveCell.Offset(0, i).Select
Jold = Application.ActiveCell.Column
End Sub
Аватара пользователя
OSWin777

Re: 2003/XP/2000 - [Решено] Защита "от дурака" в Excel

Сообщение OSWin777 »

Спасибо за код!



Попробовал в перечислении Case указать последнее значение Is >= 46 - получил ошибку.

Также вылезает та же ошибка при установке последним значением диапазона to > 100.

Что я делаю не так?
Ответить

Вернуться в «Microsoft Office (Word, Excel, Outlook и т.д.)»