Страницы: 1
RSS
Пароль на открытие и отображение листа в зависимости от пароля
 
Всем доброе утро. Подскажите как реализовать следующее: есть файл с листами в примере их 3, в реале будет 6. Нужно сделать так, чтоб при открытии данного файла, эксель запрашивал пароль, и в зависимости от веденного пароля, открывало только тот лист, к которому будет привязан этот пароль, а все остальные листы ставали недоступными этому пользователю. Файл приложил, хотя это обычный только созданный док с 3-мя листами.
 
насколько квалифицированны и любознательны Ваши пользователи?  
ибо любые защиты в Excel'е не слишком стойки для пытливых умов и шаловливых ручек.  
а такая обходится вообще довольно просто - отключением макросов.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Не очень любознательны, уровень у людей работающих с екселем ниже среднего. До моего прихода в компанию про макросы и не слышали даже))))  
 
Впринципи нужно чтоб листы по умолчанию были в режиме xlSheetVeryHiden - этого будет достаточно чтоб они не знали про их наличие))) но при вводе пароля (при открыти доккумента) видимым ставал тот лист которому пароль соответствует.
 
тупо в лоб, как-то так:  
в модуле "Эта Книга"  
 
Private Sub Workbook_Open()  
 for i=1 to 6: sheets(i).visible=xlveryhidden: next i  
 x = InputBox("введите пароль")  
 Select Case x  
   Case "пароль1": Sheets(1).Visible = True  
   Case "пароль2": Sheets(2).Visible = True  
   '...  
 End Select  
End Sub  
 
на проект можно поставить защиту - должно хватить.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Этого вполне достаточно. Большое спасибо
 
Вообще-то все скрыть не получится, один с инструкцией нужно оставить.  
И перед закрытием листы "выводить на исходную" и сохраняться.  
И в момент сохранения тоже. Иначе может получиться, что человек сохранит файл с открытым своим листом, и вдруг электричество пропало :(  
Потом появилось, и при открытии этого файла с отключенными макросами будет что? Сплошной геморрой...  
А если человек назаводил непойми что и это сохранять не хочет и нельзя?  
В общем, может лучше каждому свой файл? А начальство собирает данные для просмотра в сводный макросом или формулами.  
Или вообще сразу Access?
 
Та у нас тут вообще всё запутано)))) Насчет одного листа я это уже успел заметить))) плюс ко мне только дошло насчет отключенных макросов((( реально тогда ничего не получиться. Остановлюсь пожалуй на разных файлах, которые подвязаны к основному. Благодарю за помощь.
 
Как вариант: <EM>Каждому пользователю свой лист/диапазон</EM>  
 
Возможность защиты от глаз при отключенных макросах предусмотрена.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
вот это - уже по-серьезному.  
The_Prist, спасибо.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Проверил - сохранился под петровым и симитировал отключение электричества (нет, не выдернул 220 - просто снял задачу :))  
Открываю файл без макросов - вуаля... Геморой.
 
И опять же - книга при закрытии сохраняется. А если не хочу/нельзя сохранять?
 
The_Prist, очень интересный пример.  
У Вас написано "Каждому пользователю свой лист/диапазон",  
Дело в том что, у меня впринципи ситуация в которой нужно разрешить просмотр только определённых строк, тобеж диапазона. Может есть что то подобное, для того чтоб можно было скрывать отображать не листы, а именно строки одного листа? это было бы тоже полезно.
 
Только что обновил статью - можно указывать для каждого листа еще и диапазоны.  
marker_mc - в Вашем случае можно для всех указать ВСЕ листы как разрешенные, а диапазоны для них уже свои.  
А еще есть такая стандартная опция - "Разрешить изменение диапазонов"  
 
Hugo - проблему можно сделать всегда. И отключение электричества и пр. Я предложил решение, а пользоваться им или поискать стандартные методы - дело каждого.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вы не множко видно не поняли что я имел ввиду. Я хотел чтоб лист был к примеру 1, но в зависимости от от введенного пользователя/пароля, отображался исключительно определённый диапазон таблицы.  
 
Например таблица у нас А1:С10, по умолчания строки с 1 по 10 скрыты и отобразить вручную чтоб их было не возможно. Теперь выбираем пользователя/пароль, и вуаля открываються только те строки которые заданы данному пользователю. А остальный отобразить по прежнему нельзя.
 
Мне кажется, что это вообще всё шатко и ненадёжно...  
Сделать можно, и работать будет. Если соблюдать много других если.  
Ну а например вдруг пользователь стёр важные данные, а про UNDO или Ctrl+Z он не знает (или эти хоткеи заняты чем-то другим, было такое).  
Или UNDO не помогает (удалил например свой лист случайно... :) )  
 
Первое желание - закрыть без сохранения и открыть файл заново. Тут и попали.  
А единственный выход (если удалили лист или напортачили так, что на UNDO надеяться не приходится) - сохранить файл под другим именем. Тогда оригинал не пострадает.  
 
Т.е. думаю нужно поменять "листы на исходную" с закрытия книги на сохранение изменений. Правда тогда после сохранения снова нужно заводить пароли, ну или как-то код усложнять дальше...  
А по закрытию файла просто предложить сохраниться - если отказ, то файл будет как был, с скрытыми листами. В общем, пока сыро...
 
Здесь надо писать код заново.  
Если коротко: просто вместо защиты диапазонов надо вставить такие строки:  
Sheets(sSheets(li)).Rows.Hidden = True  
Sheets(sSheets(li)).Range(sRng(li)).Hidden = False  
 
Но необходимо доработать проверку на скрытие строк или столбцов.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я как раз делаю такой проектик: каждому - свой лист по паролю.  
Код
Private Sub Workbook_Open()   
Dim shts As Worksheet   
       ' отобразить лист "начало"   
      Worksheets("начало").Visible = True   
      Worksheets("начало").Activate   
  
      ' другие листы спрятать   
      For Each shts In ThisWorkbook.Worksheets   
            ­If shts.Name <> "начало" Then shts.Visible = 2   
      Next   
  
     ufStart.Show ' открыть форму   
End Sub     

Можно  прятать листы при закрытии книги. При старте - только форма для ввода пароля на фоне информационного листа.  
При правильном пароле открывается нужный лист. Как открывать по паролю - неограниченное поле деятельности.
 
Добавил в статью файл, в котором реализована возможность отображать только указанные строки/столбцы в указанных листах.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
очень полезно. Спасибо.
Страницы: 1
Читают тему
Наверх