Подскажите, пожалуйста, как лучше организовать защиту ячеек для следующего случая: 1. Файл будет сделан общим, в нем будут работать несколько пользователей. 2. На Листе1 пользователю разрешено вручную вводить данные во все столбцы, кроме столбца А. Столбец А заполняется автоматически макросом (там у меня форма с выбором из списка). 3. Нужно запретить пользователю вводить вообще любые данные на ВСЕХ листах, если у него не включены макросы. Мне это нужно, т.к. у меня ведется лог кто какую ячейку изменил. Лог ведется макросом. Т.е. если они смогут что-то ввести не включив макросы, то у меня это не залогируется. 4. На Листе2 находится наполнение для выпадающего списка. Этот лист полностью недоступен для редактирования и может опять же заполняться только макросом из формы. 5. Пользователи могут быть с достаточно хорошим знанием Excel и VBA, поэтому хочется чтобы защита действительна была надежной и не могли ни записать вручную значения закрытых ячеек, ни вскрыть пароль.
Как правильнее сделать защиту: 6. Либо у самих листов и нужных столбцов поставить признак что они могут заполняться любыми методами кроме UserInterface. Надежен ли такой метод? 7. Либо закрыть нужные столбцы и листы совсем, но при этом когда макрос будет записывать данные, будет делаться Unprotect, затем запись данных, затем Protect. Но в этом случае придется в явном виде прописывать пароль листов. 8. Если метод с признаком на листе не подходит (не надежен), и придется в макросе явно прописывать пароль, то как обеспечить чтобы пользователи не могли его увидеть? Или в любом случае смогут увидеть при желании в коде? 9. Как сделать защиту что нельзя вводить никакие данные если не включены макросы? 10. Какие есть подводные камни с такой защитой при одновременном доступе к файлу (если он сделан общим). Я по списку смотрел, вроде мои макросы не делают ничего запрещенного из того, что недоступно при общем доступе. 11. Как лучше делать обработку коллизий одновременного изменения пользователями данных - по умолчанию ранние имеют приоритет? Или дать пользователю выбирать что сохранить при коллизиях? Но тогда как сохранять те ячейки, которые заполняются только макросом (при выборе из списка)? Разве Excel даст пользователю выбрать вариант сохранения, если для него эта ячейка недоступна для ввода вручную? 12. Как лучше обновлять файл (если один что-то внес в ячейки, заполняемые макросом, чтобы у других быстро это отобразилось), чтобы не было коллизий? Сделать настройку раз в минуту? Или может макросом можно сохранить только измененную часть данных, чтобы не сохранять весь файл целиком каждый раз? 13. Ну и в целом, как по науке правильно делать защиту, чтобы только макрос мог писать в некоторые столбцы и пользователи не могли ничего сделать не включив макросы? 14. Если не сложно, не могли бы при ответе привести конкретные строки кода VBA, которые нужно добавить на листы?
Подскажите, пожалуйста, как лучше организовать защиту ячеек для следующего случая: 1. Файл будет сделан общим, в нем будут работать несколько пользователей. 2. На Листе1 пользователю разрешено вручную вводить данные во все столбцы, кроме столбца А. Столбец А заполняется автоматически макросом (там у меня форма с выбором из списка). 3. Нужно запретить пользователю вводить вообще любые данные на ВСЕХ листах, если у него не включены макросы. Мне это нужно, т.к. у меня ведется лог кто какую ячейку изменил. Лог ведется макросом. Т.е. если они смогут что-то ввести не включив макросы, то у меня это не залогируется. 4. На Листе2 находится наполнение для выпадающего списка. Этот лист полностью недоступен для редактирования и может опять же заполняться только макросом из формы. 5. Пользователи могут быть с достаточно хорошим знанием Excel и VBA, поэтому хочется чтобы защита действительна была надежной и не могли ни записать вручную значения закрытых ячеек, ни вскрыть пароль.
Как правильнее сделать защиту: 6. Либо у самих листов и нужных столбцов поставить признак что они могут заполняться любыми методами кроме UserInterface. Надежен ли такой метод? 7. Либо закрыть нужные столбцы и листы совсем, но при этом когда макрос будет записывать данные, будет делаться Unprotect, затем запись данных, затем Protect. Но в этом случае придется в явном виде прописывать пароль листов. 8. Если метод с признаком на листе не подходит (не надежен), и придется в макросе явно прописывать пароль, то как обеспечить чтобы пользователи не могли его увидеть? Или в любом случае смогут увидеть при желании в коде? 9. Как сделать защиту что нельзя вводить никакие данные если не включены макросы? 10. Какие есть подводные камни с такой защитой при одновременном доступе к файлу (если он сделан общим). Я по списку смотрел, вроде мои макросы не делают ничего запрещенного из того, что недоступно при общем доступе. 11. Как лучше делать обработку коллизий одновременного изменения пользователями данных - по умолчанию ранние имеют приоритет? Или дать пользователю выбирать что сохранить при коллизиях? Но тогда как сохранять те ячейки, которые заполняются только макросом (при выборе из списка)? Разве Excel даст пользователю выбрать вариант сохранения, если для него эта ячейка недоступна для ввода вручную? 12. Как лучше обновлять файл (если один что-то внес в ячейки, заполняемые макросом, чтобы у других быстро это отобразилось), чтобы не было коллизий? Сделать настройку раз в минуту? Или может макросом можно сохранить только измененную часть данных, чтобы не сохранять весь файл целиком каждый раз? 13. Ну и в целом, как по науке правильно делать защиту, чтобы только макрос мог писать в некоторые столбцы и пользователи не могли ничего сделать не включив макросы? 14. Если не сложно, не могли бы при ответе привести конкретные строки кода VBA, которые нужно добавить на листы?Serrg
Господа, и все же, не могли бы подсказать как можно защитить листы Excel от пользователя, но разрешить запись макросом, но при этом не указывая в VBA в явном виде пароль? Потому что все эти методы, которые я видел, требуют указания пароля в коде. Для [vba]
Код
ActiveSheet.Unprotect
[/vba] [vba]
Код
ActiveSheet.Protect
[/vba] нужно указывать пароль в явном виде...
Как сделать так, чтобы пользователь ничего не мог ввести на листе, пока не включил макросы?
Ну и по остальным вопросам, в частности при многопользовательской работе и коллизиях при записи значений в ячейку (если в эту ячейку писать может только макрос)
Господа, и все же, не могли бы подсказать как можно защитить листы Excel от пользователя, но разрешить запись макросом, но при этом не указывая в VBA в явном виде пароль? Потому что все эти методы, которые я видел, требуют указания пароля в коде. Для [vba]
Код
ActiveSheet.Unprotect
[/vba] [vba]
Код
ActiveSheet.Protect
[/vba] нужно указывать пароль в явном виде...
Как сделать так, чтобы пользователь ничего не мог ввести на листе, пока не включил макросы?
Ну и по остальным вопросам, в частности при многопользовательской работе и коллизиях при записи значений в ячейку (если в эту ячейку писать может только макрос)Serrg
Serrg, здравствуйте. В общей книге код vba не доступен, т.е., чтобы пользователь смог увидеть код макроса, ему нужно отключить общий доступ к файлу (что может привести к нехорошим последствиям). Но можно предположить, что юзер сообразит сохранить книгу локально и отключит общий доступ, а значит, сможет увидеть код VBA. Чтобы запретить ему убирать общий доступ к файлу, можно на вкладке рецензирование нажать "защитить книгу и дать общий доступ", ввести пароль и сохранить. Тогда, без знания пароля общий доступ нельзя будет убрать, даже если сохранить книгу локально. Второй вариант: защитить сам проект VBA. Тогда, при попытке открыть модули книги, будет выскакивать окошко, с просьбой ввести пароль.
Сейчас попробовала записать макрос в общей книге: автоматически создался новый файл, записанный макрос можно увидеть в модуле нового файла, VBA проект общего, так и остался недоступным.
Serrg, здравствуйте. В общей книге код vba не доступен, т.е., чтобы пользователь смог увидеть код макроса, ему нужно отключить общий доступ к файлу (что может привести к нехорошим последствиям). Но можно предположить, что юзер сообразит сохранить книгу локально и отключит общий доступ, а значит, сможет увидеть код VBA. Чтобы запретить ему убирать общий доступ к файлу, можно на вкладке рецензирование нажать "защитить книгу и дать общий доступ", ввести пароль и сохранить. Тогда, без знания пароля общий доступ нельзя будет убрать, даже если сохранить книгу локально. Второй вариант: защитить сам проект VBA. Тогда, при попытке открыть модули книги, будет выскакивать окошко, с просьбой ввести пароль.
Сейчас попробовала записать макрос в общей книге: автоматически создался новый файл, записанный макрос можно увидеть в модуле нового файла, VBA проект общего, так и остался недоступным.Manyasha
ЯД: 410013299366744 WM: R193491431804
Сообщение отредактировал Manyasha - Воскресенье, 08.03.2015, 14:55