Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как организовать разграничение доступа в xl? кодом VBA 
V
    Опции темы
kashemirny
Дата 19.8.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



Доброго времени суток! Подскажите, существует ли короткий код VBA, позволяющий открывать документ в режиме "только для чтения" (без возможности сохранения файла), но одновременно с тем позволяющий при активации кнопки и последующем вводе пароля открывать документ для полный доступ?

пока что идеи такие:

Код

Sheets("Лист1").Protect "pass"
Sheets("Лист2").Protect "pass"
Sheets("Лист3").Protect "pass"
' и т.д.


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

Это сообщение отредактировал(а) kashemirny - 19.8.2009, 19:26
PM MAIL   Вверх
Akina
Дата 19.8.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(kashemirny @  19.8.2009,  17:47 Найти цитируемый пост)
открывать документ в режиме "только для чтения" (без возможности сохранения файла)

Но с возможностью редактирования? Ну разве только перехватом запроса на сохранение...
А нахрена?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kashemirny
Дата 19.8.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



Akina, чтение - оно и есть чтение. пример: меня нет на работе, а срочно требуется распечатать готовую смету - документ xl открывает тот, кому нужна эта самая смета, при этом не имеет возможности ее откорректировать или сохранить. лица, ответственные за сметы, знают pass (я и мой напарник) и работают с документом как обычно (сохраняют, редактируют и т.д.)

p.s. что за перехват и как его сделать?
PM MAIL   Вверх
Akina
Дата 19.8.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Защита книги и каждого листа от изменения - вполне достаточно.
Сервис - Защита


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kashemirny
Дата 19.8.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



Akina, это вам достаточно, а мне - отнюдь. если речь идет речь об ответственности за правильность расчетов, нужно предусмотреть любое "варварство" со стороны юзеров. 

p.s. как записать в файл xl служебную информацию, такую как юзер_домена, имя_машины)?
PM MAIL   Вверх
Akina
Дата 20.8.2009, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(kashemirny @  20.8.2009,  00:04 Найти цитируемый пост)
если речь идет речь об ответственности за правильность расчетов, нужно предусмотреть любое "варварство" со стороны юзеров. 

Если книга защищена - юзеру будет трудно придумать "варварство" иное, нежели удаление.
Посмотри книгу в аттаче. Оба листа защищены (пароль любого из листов - 666), в одном запрещено всё, даже выделение ячеек. Книга также защищена (пароль пустой). Попробуй её испоганить, не вводя пароля...

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  WorkBook1.zip 9,91 Kb


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kashemirny
Дата 20.8.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



интересно.... а каким образом организовано все это? макроса в книге не нашел  smile 
PM MAIL   Вверх
Akina
Дата 20.8.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Читай мои ответы с самого начала. Медленно и вслух.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kashemirny
Дата 20.8.2009, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



прочитал, все уяснил, НО: каждый лист открывать паролем очень долго.
хочется простоты и эффективности. в аттаче пример с элементом интерфейса. пример не проработан по 3м пунктам, хочется вот чего:

- при нажатии на кнопку "Хочу полный доступ" должен выполняться не макрос Full, а popup-окно с предложением ввести пароль, при правильном вводе пароля должен сработать макрос Full, при неправильном - выход из приложения

- после окончания работы с файлом в режиме полного доступа и его закрытии должен выполниться макрос HideIt для преведения файла в изначальный вид.

- при открытии файла кнопкой "для чтения" файл ни в коем случае нельзя дать сохранить!

помогите, плиз  smile 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  ______.rar 32,04 Kb
PM MAIL   Вверх
kashemirny
Дата 24.8.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



Akina, памагитя!  smile 
PM MAIL   Вверх
Akina
Дата 24.8.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(kashemirny @  20.8.2009,  17:27 Найти цитируемый пост)
 popup-окно с предложением ввести пароль

popup-окно - это inputbox(). А лучше - самописное окно.

Всё необходимое для реализации у тебя есть. Чего нет - получи с помощью макрорекордера.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FINANSIST
Дата 30.8.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 13
Всего: 23



kashemirny, в объект "Эта книга" вставляешь следующий код:
Код

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wsheet As Worksheet
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
On Error GoTo 30
'==============================================
For Each wsheet In ActiveWorkbook.Sheets
If wsheet.Visible = False Then GoTo 10
Debug.Print wsheet.Name
wsheet.Protect "123"
10: Next wsheet
20:
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Exit Sub
30: MsgBox Err.Description
GoTo 20
End Sub

На лист кидаешь кнопку  CommandButtonUnprotect и в объект данного листа вставляешь процедуру обработки события нажатия на данную кнопку:
Код

Private Sub CommandButtonUnprotect_Click()
Dim str As String: Dim wsheet As Worksheet
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
On Error GoTo 30
'==============================================
Let str = InputBox("input pass")
For Each wsheet In ActiveWorkbook.Sheets
If wsheet.Visible = False Then GoTo 10
Debug.Print wsheet.Name
wsheet.Unprotect str
10: Next wsheet
20:
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Exit Sub
30: MsgBox Err.Description
GoTo 20
End Sub



--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
kashemirny
Дата 1.9.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



FINANSIST, большое спасибо, только я уже организовал запуск макроса через комбинацию клавиш в персонале (кстати, присваивать макросы можно только в комбинации с контролом или можно назначить что-нибудь из F5-F12?). запуск через комбинацию клавиш - все же быстрее ввода пароля, да и безопаснее.

ваш вариант интересен тем, что наделяет книгу отсутствием необходимости защищать листы при сохранении и закрытии файла, что по сути очень важно - ведь любые пользователи сохраняються во время работы с таблицей, в моем случае такую защиту я еще не предусмотрел - буду переделывать ваш макрос, посмотрим что получится!
PM MAIL   Вверх
Akina
Дата 1.9.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(kashemirny @  1.9.2009,  13:22 Найти цитируемый пост)
наделяет книгу отсутствием необходимости 

 smile 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kashemirny
Дата 8.9.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 12.11.2007

Репутация: нет
Всего: нет



код после небольшой доработки - события обрабатываются при сохранении, а не при закрытии:
Код

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wsheet As Worksheet
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
On Error GoTo 30
'==============================================
For Each wsheet In ActiveWorkbook.Sheets
If wsheet.Visible = False Then GoTo 10
Debug.Print wsheet.Name
wsheet.Protect "pass"
wsheet.Visible = xlVeryHidden
10:
Sheets("Заставка").Visible = True
Next wsheet
20:
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Exit Sub
30: MsgBox "Да вы спите на ходу?!"
'30: MsgBox Err.Description
GoTo 20
End Sub


еще раз - огромное спасибо, FINANSIST

Это сообщение отредактировал(а) kashemirny - 2.10.2009, 15:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0645 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.