Страницы: 1
RSS
атрибут "только чтение" на книгу при невыполнении условий
 
Уважаемые форумчане, возник вопрос.

При открытии книги, макрос выполняет проверку на выполнение определенного условия. (открыт файл или нет)
Если это условие выполняется, книга открывается в режиме полного редактирования (изначально файл не запаролен, режим не readonly), если же условие не выполняется, пользователю предоставляется выбор:
1. закрыть книгу без сохранения
2. открыть книгу в режиме чтения с последующим выходом без сохранения

С первым пунктом я справился, со вторым встал в тупик.
Как это можно реализовать?
Есть 2 идеи:
1. Ставить защиту на книгу, если пользователь выбирает вариант "только для чтения"
2. Изначально книгу делать только для чтения и при прохождении проверки на выполнение условий открывать ее для полного редактирования.

Идея 1 - я не нашел как это реализовать, прошу помощи
Идея 2 - не желателен, в силу особенностей проверки условий при открытии книги.


В приложенном файле на userform2 есть кнопка CommandButton3, на которую и хотелось бы повесить команду открытия книги только в режиме чтения (либо в режиме запрета редактирования)
Прошу вашей помощи в этом вопросе.
 
Андрей Прокофьев, чтобы после открытия установить пароль, можно воспользоваться этим:
Код
ThisWorkbook.Worksheets("Лист1").Protect Password:="123"
То есть защищать не всю книгу, а целевые листы. Вдруг пользователю понадобится пустой лист :)
Закрывать книгу можно так:
Код
ThisWorkbook.Close Savechanges = False
 
И да, совет: если на компьютере пользователя будут отключен макросы, то он все отредактирует, что есть нехорошо. Можно каждый раз перед закрытием скрывать (суперскрытием) листы целевые, а при открытии уже показывать при необходимости. В таком режиме пока не включит макросы - не увидит документа  :) Ну или пока не залезет в редактор/увидит пароль/найдет взломщика/найдет пароль и т.д.  :D
 
Это все уже предусмотрено =) просто в файле примера я вырезал это.
Спасибо за напоминание.

А по предложению "Savechanges = False", -только что сам допетрил до этого =) вероятно это самый правильный путь в моем случае.
Чуть позже кину сюда готовый вариант файла для примера с описанием, вдруг кому понадобится.
 
Как и обещал выкладываю готовый файл.

Суть файла и почему сделано именно так.
Это таблица доставок, используемая нашими менеджерами и логистом, которая лежит на общем ГуглДиске.
Методика "общего доступа" не подходит, т.к. нет собственного сервера, а гуглдиск этого не поддерживает в связи с длительной синхронизацией.

Возникала проблема, когда файл открывался и сохранялся несколькими людьми одновременно, что порождало конфликт версий файла в облаке.
Что сделано:
1. проверка имени пользователя открывшего файл и запись его в лог с датой открытия
2. Запись даты закрытия
3. Проверка на предмет, открыт ли уже файл или нет.
4. Доступ в режиме "чтения", если файл уже кем-то открыт.
5. запрет сохранения в режиме чтения.

В планах
1. Оповещение пользователей, когда файл закрыли
2. Оповещение пользователей о внесенных изменениях, при открытии файла
3. Предоставление запароленного доступа к "именным листам"
4. Автоматический backup файла, методом отправки его на почту логисту раз в неделю.

Для того, чтобы понять как работает файл, необходимо открыть его с разных компьютеров одновременно (под разными логинами)
Прошу прощения за архив, больше 100 кило получился.


Буду признателен за вашу критику, идеи и предложения по доработке!
Я не плотно занимаюсь VBA (скорее даже любитель), большую часть идей подчерпнул на этом форуме, но постепенно набираюсь опыта и знаний, в связи с чем и надеюсь на ваши конструктивные комментарии.

P.S. Все пароли "123"
Изменено: Андрей Прокофьев - 25.11.2015 12:51:49
Страницы: 1
Читают тему
Наверх