Прошу помочь решить такую задачу. Есть файл с множеством листов и формул. Все листы защищены паролем. На каждом листе есть пустые незащищенные ячейки, предназначенные для ввода информации пользователем. Что требуется: Если на каком-то определенном листе пользователем была заполнена хоть одна доступная ему (незащищенная) ячейка, то после закрытия файла, ВСЕ ячейки на ЭТОМ листе, которые пользователю были доступны ранее, перестают быть доступными (становятся защищенными). Т.е. пользователь лишается возможности вносить изменения на листе после того, как уже внес значения и закрыл файл.
Прошу помочь решить такую задачу. Есть файл с множеством листов и формул. Все листы защищены паролем. На каждом листе есть пустые незащищенные ячейки, предназначенные для ввода информации пользователем. Что требуется: Если на каком-то определенном листе пользователем была заполнена хоть одна доступная ему (незащищенная) ячейка, то после закрытия файла, ВСЕ ячейки на ЭТОМ листе, которые пользователю были доступны ранее, перестают быть доступными (становятся защищенными). Т.е. пользователь лишается возможности вносить изменения на листе после того, как уже внес значения и закрыл файл. ASV
Вовсе нет. Здесь вопрос безопасности - файл предназначен для отражения кассовых операций. Данные файла должны передаваться в бухгалтерию, где на его основании проведут операции в 1С. Но, если вдруг пользователь внесет изменения в уже проведенную ранее операцию, то соответственно не будет сходится остаток с данными в 1С - что влечет за собой негативные последствия в виде недостачи или излишков денег в кассе - а это материальная ответственность. Поэтому лучше лишить пользователя возможности вносить изменения, если он уже отразил операцию и закрыл файл. А в случае необходимости ему предоставят доступ (откроют доступ с помощью пароля), но это уже будет санкционировано и по согласованию.
Вовсе нет. Здесь вопрос безопасности - файл предназначен для отражения кассовых операций. Данные файла должны передаваться в бухгалтерию, где на его основании проведут операции в 1С. Но, если вдруг пользователь внесет изменения в уже проведенную ранее операцию, то соответственно не будет сходится остаток с данными в 1С - что влечет за собой негативные последствия в виде недостачи или излишков денег в кассе - а это материальная ответственность. Поэтому лучше лишить пользователя возможности вносить изменения, если он уже отразил операцию и закрыл файл. А в случае необходимости ему предоставят доступ (откроют доступ с помощью пароля), но это уже будет санкционировано и по согласованию.ASV
ВСЕ ячейки на ЭТОМ листе, которые пользователю были доступны ранее, перестают быть доступными (становятся защищенными)
Но д.б.возможность сделать эти самые ячейки обратно незащищенными. Так ведь? Т.е. это какие-то фиксированные диапазоны на каждом из листов - их нужно делать то защищенными, то нет. Так?
ВСЕ ячейки на ЭТОМ листе, которые пользователю были доступны ранее, перестают быть доступными (становятся защищенными)
Но д.б.возможность сделать эти самые ячейки обратно незащищенными. Так ведь? Т.е. это какие-то фиксированные диапазоны на каждом из листов - их нужно делать то защищенными, то нет. Так?nilem
В этом файле два листа. Все незащищенные ячейки, предназначенные для ввода данных пользователем, выделены зеленым цветом. Остальные все защищены. Таких листов, как "1" здесь будет 31 - по 1 листу на каждый день месяца. Страница "Старт" - это стартовая страница, с которой начинается работа с файлом, здесь указываются начальные данные. Получается, нужно чтобы срабатывала блокировка ячеек (зеленых) на листе "Старт" и листах "1-31".
В этом файле два листа. Все незащищенные ячейки, предназначенные для ввода данных пользователем, выделены зеленым цветом. Остальные все защищены. Таких листов, как "1" здесь будет 31 - по 1 листу на каждый день месяца. Страница "Старт" - это стартовая страница, с которой начинается работа с файлом, здесь указываются начальные данные. Получается, нужно чтобы срабатывала блокировка ячеек (зеленых) на листе "Старт" и листах "1-31".ASV
Можно попробовать с именованными диапазонами см. файл
[vba]
Код
Sub LockRanges() Dim nm As Name For Each nm In ThisWorkbook.Names If InStr(nm.Name, "LockRng") Then With nm.RefersToRange .Parent.Unprotect '.Interior.ColorIndex = 36 .Locked = True .Parent.Protect End With End If Next nm End Sub
Sub UnLockRanges() Dim nm As Name For Each nm In ThisWorkbook.Names If InStr(nm.Name, "LockRng") Then With nm.RefersToRange .Parent.Unprotect .Locked = False .Parent.Protect End With End If Next nm End Sub
[/vba]
Можно попробовать с именованными диапазонами см. файл
[vba]
Код
Sub LockRanges() Dim nm As Name For Each nm In ThisWorkbook.Names If InStr(nm.Name, "LockRng") Then With nm.RefersToRange .Parent.Unprotect '.Interior.ColorIndex = 36 .Locked = True .Parent.Protect End With End If Next nm End Sub
Sub UnLockRanges() Dim nm As Name For Each nm In ThisWorkbook.Names If InStr(nm.Name, "LockRng") Then With nm.RefersToRange .Parent.Unprotect .Locked = False .Parent.Protect End With End If Next nm End Sub
Что-то не срабатывает. Может я что-то не так делаю?.. Я вашем в коде есть привязка к цвету ячеек "... Interior.ColorIndex = 36 ..." Может быть на разных компьютерах цвета по разному отображаются? Потому что изначально были цвета зеленые, а сейчас после вставки макроса стали бледно желтыми (или так и было задумано?). Или цвета здесь не имеют значения?
Что-то не срабатывает. Может я что-то не так делаю?.. Я вашем в коде есть привязка к цвету ячеек "... Interior.ColorIndex = 36 ..." Может быть на разных компьютерах цвета по разному отображаются? Потому что изначально были цвета зеленые, а сейчас после вставки макроса стали бледно желтыми (или так и было задумано?). Или цвета здесь не имеют значения?ASV
Interior.ColorIndex = 36 закомментировано в коде, это просто чтобы выделить цветом именованные диапазоны, которые обрабатывает код. Открываем книгу (макросы д.б. разрешены), нажимаем Alt+F8, выбираем LockRanges - Выполнить. Ячейки в желтых диапазонах защищены. Опять Alt+F8, выбираем UnLockRanges - Выполнить. Защита с ячеек в желтых диапазонах снята. Можно добавить листов, создать новые именованные диапазоны (уровня книги) с именами "LockRng4", "LockRng5" ..., - макросы будут работать со всеми именами, кот. есть в книге.
Interior.ColorIndex = 36 закомментировано в коде, это просто чтобы выделить цветом именованные диапазоны, которые обрабатывает код. Открываем книгу (макросы д.б. разрешены), нажимаем Alt+F8, выбираем LockRanges - Выполнить. Ячейки в желтых диапазонах защищены. Опять Alt+F8, выбираем UnLockRanges - Выполнить. Защита с ячеек в желтых диапазонах снята. Можно добавить листов, создать новые именованные диапазоны (уровня книги) с именами "LockRng4", "LockRng5" ..., - макросы будут работать со всеми именами, кот. есть в книге.nilem