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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> защита листа Excel, защита листа Excel 
V
    Опции темы
usver
Дата 11.12.2008, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток.
Есть задача сделать в Excel доступ каждому пользователю доступ только к своему листу, т.е. при запуске открывается Лист0 (общий доступ), а затем каждый пользователь может выбрать (открыть) только свой лист (пользователь1 - лист1, пользователь2 - лист2 ... пользователь(n) - лист(n)). В общем по аналогии с защитой диапазонов для разных пользователей, только вместо диапазонов листа - сами листы.
Заранее благодарен.
PM MAIL   Вверх
FINANSIST
Дата 11.12.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А почему диапозоном нельзя сделать весь лист?:
1) Шаг первый
user posted image
2) Шаг второй
user posted image

Это сообщение отредактировал(а) FINANSIST - 11.12.2008, 15:47


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


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


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

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



Програмно:
Код

Option Explicit
Public Sub Auto_Close()
Dim wsheet As Worksheet
For Each wsheet In ActiveWorkbook.Sheets
If wsheet.Name = "главный" Then GoTo 10:
wsheet.Visible = xlVeryHidden
10: Next wsheet
End Sub
Public Sub Auto_Open()
Dim lgn As String: Dim pass As String:
 lgn = Application.InputBox("Input your loggin", Default:="User#")
20:  pass = Application.InputBox("Input your password")

Select Case lgn
Case "User#1"
If pass = "pass#1" Then
ActiveWorkbook.Sheets(2).Visible = True
Else
MsgBox "Invalid password! Try again", vbCritical
GoTo 20
End If
Case "User#2"
If pass = "pass#2" Then
ActiveWorkbook.Sheets(3).Visible = True
Else
MsgBox "Invalid password! Try again", vbCritical
GoTo 20
End If
Case Else
MsgBox "Required format 'User#*' where * is your digit!"
End Select
End Sub



Присоединённый файл ( Кол-во скачиваний: 56 )
Присоединённый файл  _____Microsoft_Excel.rar 8,31 Kb


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


Шустрый
*


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

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



Защита диапазона дает запрет на редактирование, а мне надо запрет просмотра.

PM MAIL   Вверх
FINANSIST
Дата 12.12.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Второй пример (который Програмный) имеено этим и занимается!
Даже вложение прикрепил же! 


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


Шустрый
*


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

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



Цитата

Второй пример (который Програмный) имеено этим и занимается!
Даже вложение прикрепил же! 

Не, ну может я чего не так делаю, или объяснить правильно не могу, но приведенный пример - это не то, что требуется, там же лист видно при вводе пароля, а это уже не верно.
PM MAIL   Вверх
FINANSIST
Дата 15.12.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(usver @  15.12.2008,  09:31 Найти цитируемый пост)
Не, ну может я чего не так делаю, или объяснить правильно не могу, но приведенный пример - это не то, что требуется, там же лист видно при вводе пароля, а это уже не верно.

Не можешь!

Цитата(usver @  11.12.2008,  04:13 Найти цитируемый пост)
Есть задача сделать в Excel доступ каждому пользователю доступ только к своему листу, т.е. при запуске открывается Лист0 (общий доступ), а затем каждый пользователь может выбрать (открыть) только свой лист (пользователь1 - лист1, пользователь2 - лист2 ... пользователь(n) - лист(n)).

Не чуствешь противоречий?
ps Я и сделал 1 лист для общего просмотра и доступа, как и требовалось...


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


Шустрый
*


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

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



Цитата

Не чуствешь противоречий?
ps Я и сделал 1 лист для общего просмотра и доступа, как и требовалось... 

нет, противоречий не чувствую .... еще раз ...
Есть книга Excel с n-листами и общим доступом, лист 1 открывается при открытии файла (его могут видеть ВСЕ), далее каждый пользователь может открыть лист ТОЛЬКО со своей (ну допустим) фамилией. Данные о пользователе беруться те, под которыми он зашел в систему. Вот как я бы хотел что бы это работало.
PM MAIL   Вверх
FINANSIST
Дата 16.12.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(usver @  16.12.2008,  03:58 Найти цитируемый пост)
 Данные о пользователе беруться те, под которыми он зашел в систему.

Так только в этом проблема что ли?
Т.е. требуется автоматическое определение логина при открытии файла локальной сети организации?

Тогда так :
Код

Option Explicit
Public Sub Auto_Close()
Dim wsheet As Worksheet
For Each wsheet In ActiveWorkbook.Sheets
If wsheet.Name = "видимый и доступный для всех" Then GoTo 10:
wsheet.Visible = xlVeryHidden
10: Next wsheet
End Sub
Public Sub Auto_Open()
Dim pass As String: Dim strUserName As String
Dim wshell As Object
Set wshell = CreateObject("WScript.Shell")
'получаем имя текущего пользователя в системе ( для меня "OEM")
strUserName = wshell.ExpandEnvironmentStrings("%USERNAME%")
Debug.Print strUserName
20: pass = Application.InputBox(strUserName & " : input your password")
Select Case strUserName
Case "OEM"
If pass = "pass#1" Then
ActiveWorkbook.Sheets("OEM_User").Visible = True
Else
If pass <> "" Then MsgBox "Invalid password! Try again", vbCritical Else Exit Sub
GoTo 20
End If
Case Else
MsgBox "Required format 'User#*' where * is your digit!"
End Select
End Sub



Это сообщение отредактировал(а) FINANSIST - 17.12.2008, 18:12

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  _____Microsoft_Excel.rar 7,11 Kb


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


Шустрый
*


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

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



Всем привет. Вот что получилось у меня. Не много не так как я описывал в начале, но работа кода мне подходит.
Вдруг кому еще пригодиться.
Код

Private Sub Workbook_Open()
 Dim n, m As Integer
 Dim strUserName As String, def As String
 Dim wshell As Object
 m = 0
 Set wshell = CreateObject("WScript.Shell")
 'получаем имя текущего пользователя в системе
 strUserName = wshell.ExpandEnvironmentStrings("%USERNAME%")
 'проверяем есть ли такой лист
For n = 1 To Sheets.Count
  Select Case Worksheets(n).Name = strUserName
  Case True
  Worksheets(n).Visible = -1 'если есть, делаем видимым
  m = 1 'для проверки, встречался лист или нет
  Case False 'если нет - создаем новый с именем пользателя, остальные прячем
  If n = Sheets.Count And m = 0 Then Sheets.Add after:=Sheets(Sheets.Count): ActiveWorkbook.ActiveSheet.Name = strUserName
  Worksheets(n).Visible = 0
  End Select
Next n
End Sub

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Работа с MS Office"
mihanik staruha

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

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

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



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


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

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


 




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


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

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