| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование, связанное с MS Office > Как организовать разграничение доступа в xl? |
| Автор: kashemirny 19.8.2009, 16:47 | ||
| Доброго времени суток! Подскажите, существует ли короткий код VBA, позволяющий открывать документ в режиме "только для чтения" (без возможности сохранения файла), но одновременно с тем позволяющий при активации кнопки и последующем вводе пароля открывать документ для полный доступ? пока что идеи такие:
однако, каждый лист замучаешься разблокировать паролем + остается проблема сохранения самого файла пользователем "для чтения"... |
| Автор: kashemirny 19.8.2009, 19:34 |
| Akina, чтение - оно и есть чтение. пример: меня нет на работе, а срочно требуется распечатать готовую смету - документ xl открывает тот, кому нужна эта самая смета, при этом не имеет возможности ее откорректировать или сохранить. лица, ответственные за сметы, знают pass (я и мой напарник) и работают с документом как обычно (сохраняют, редактируют и т.д.) p.s. что за перехват и как его сделать? |
| Автор: Akina 19.8.2009, 19:55 |
| Защита книги и каждого листа от изменения - вполне достаточно. Сервис - Защита |
| Автор: kashemirny 19.8.2009, 23:04 |
| Akina, это вам достаточно, а мне - отнюдь. если речь идет речь об ответственности за правильность расчетов, нужно предусмотреть любое "варварство" со стороны юзеров. p.s. как записать в файл xl служебную информацию, такую как юзер_домена, имя_машины)? |
| Автор: Akina 20.8.2009, 08:07 | ||
Если книга защищена - юзеру будет трудно придумать "варварство" иное, нежели удаление. Посмотри книгу в аттаче. Оба листа защищены (пароль любого из листов - 666), в одном запрещено всё, даже выделение ячеек. Книга также защищена (пароль пустой). Попробуй её испоганить, не вводя пароля... |
| Автор: kashemirny 20.8.2009, 14:50 |
| интересно.... а каким образом организовано все это? макроса в книге не нашел |
| Автор: Akina 20.8.2009, 15:02 |
| Читай мои ответы с самого начала. Медленно и вслух. |
| Автор: kashemirny 20.8.2009, 16:27 |
| прочитал, все уяснил, НО: каждый лист открывать паролем очень долго. хочется простоты и эффективности. в аттаче пример с элементом интерфейса. пример не проработан по 3м пунктам, хочется вот чего: - при нажатии на кнопку "Хочу полный доступ" должен выполняться не макрос Full, а popup-окно с предложением ввести пароль, при правильном вводе пароля должен сработать макрос Full, при неправильном - выход из приложения - после окончания работы с файлом в режиме полного доступа и его закрытии должен выполниться макрос HideIt для преведения файла в изначальный вид. - при открытии файла кнопкой "для чтения" файл ни в коем случае нельзя дать сохранить! помогите, плиз |
| Автор: kashemirny 24.8.2009, 12:59 |
| Akina, памагитя! |
| Автор: Akina 24.8.2009, 13:59 |
popup-окно - это inputbox(). А лучше - самописное окно. Всё необходимое для реализации у тебя есть. Чего нет - получи с помощью макрорекордера. |
| Автор: FINANSIST 30.8.2009, 21:01 | ||||
kashemirny, в объект "Эта книга" вставляешь следующий код:
На лист кидаешь кнопку CommandButtonUnprotect и в объект данного листа вставляешь процедуру обработки события нажатия на данную кнопку:
|
| Автор: kashemirny 1.9.2009, 12:22 |
| FINANSIST, большое спасибо, только я уже организовал запуск макроса через комбинацию клавиш в персонале (кстати, присваивать макросы можно только в комбинации с контролом или можно назначить что-нибудь из F5-F12?). запуск через комбинацию клавиш - все же быстрее ввода пароля, да и безопаснее. ваш вариант интересен тем, что наделяет книгу отсутствием необходимости защищать листы при сохранении и закрытии файла, что по сути очень важно - ведь любые пользователи сохраняються во время работы с таблицей, в моем случае такую защиту я еще не предусмотрел - буду переделывать ваш макрос, посмотрим что получится! |
| Автор: Akina 1.9.2009, 14:23 |
| Автор: kashemirny 8.9.2009, 17:42 | ||
код после небольшой доработки - события обрабатываются при сохранении, а не при закрытии:
еще раз - огромное спасибо, FINANSIST |