Очень часто на своих тренингах и в форумах я слышу вопрос: как защитить доступ к книге так, чтобы для каждого пользователя был доступен только свой лист/листы? А другие ячейки или листы были недоступны для изменения или просмотра? Или скрыть отдельные столбцы с глаз пользователя? Часть подобного функционала предоставляется стандартными средствами Excel, а другая(например, доступность просмотра только конкретных листов) достигается только через макросы. В этой статье хочу привести несколько примеров реализации подобных разграничений прав между пользователями, их плюсы и минусы.
- Доступ пользователям только к определенным листам
- Доступ пользователю к определенным листам и возможность изменять только отдельные ячейки
- Доступ к определенным листам и скрытие указанных строк/столбцов
- Практический пример с использованием администратора
Для разграничения доступа к ячейкам на листе можно воспользоваться инструментом Разрешить изменение диапазонов
Это стандартный инструмент, для использования которого нет необходимости подключать что-то дополнительно и он относительно прост в использовании.
Данный инструмент позволяет назначить каждому отдельному диапазону ячеек свои пароли, диапазоны могут располагаться на разных листах книги или на одном листе:
Например, сотрудники коммерческого отдела в общем файле бюджета(картинка выше) должны иметь возможность заполнять только ячейки строк со статьями выручки (строки 8-11, 13-14), а производственный отдел строки 18-22, в которых расположены статьи по расходам производственного отдела. При этом сотрудники коммерческого отдела не должны иметь возможность изменять данные статей другого отдела – каждый только данные своих статей.
Для начала необходимо для сотрудников каждого отдела создать отдельные диапазоны, к которым они будут иметь доступ. Для этого переходим на вкладку Рецензирование
Нажимаем Создать
После нажатия Ок появится окно подтверждения пароля. Необходимо указать тот же пароль, что был указан ранее для данного диапазона.
Точно так же создаем второй диапазон – "производственный", но для него указываем другой пароль(например –
Здесь можно еще раз проверить все ли правильно указано, при необходимости изменить (так же изменить диапазоны можно в любое время, вызвав данное окно с вкладки Рецензирование
Теперь, чтобы такая защита сработала необходимо непосредственно защитить лист. Это можно сделать либо сразу из этого же окна, нажав кнопку Защитить лист, либо закрыв окно перейти на вкладку Рецензирование
В появившемся окне проставляем галочки для тех действий, которые мы хотим разрешить делать пользователю на защищенном листе без ввода пароля(например, на картинке выше помимо стандартного выделения ячеек разрешена вставка столбцов. Подробнее про защиту листов и ячеек можно прочитать в статье - Защита листов и ячеек в MS Excel). Указываем пароль (например
Что важно: не следует указывать здесь пароль, который совпадает хотя бы с одним из паролей для отдельных диапазонов. Думаю, понятно почему: чтобы защиту не могли снять те, кому этого не положено делать.
Теперь остается сообщить сотрудникам отделов их пароли: производственный -
При первой попытке изменить данные в ячейках
Если пользователю известен пароль для диапазона – его необходимо будет ввести лишь один раз. В дальнейшем для ввода данных в ячейки этого диапазона вводить пароль не придется до тех пор, пока файл не будет закрыт. После повторного открытия файла пароль необходимо будет указать заново.
Однако, если сотрудник другого отдела попытается изменить ячейки производственного отдела и пароль ему неизвестен – изменить данные этих ячеек не получится.
Также ни сотрудники коммерческого отдела, ни сотрудники производственного отдела не смогут изменить данные столбцов А и В(№ и наименование статьи), заголовки таблицы(строки с 1-ой по 7-ю) и строки с итоговыми формулами (12, 15 и т.д. – закрашенные зеленым). Они смогут изменять только те ячейки, которые перечислены в назначенных каждому отделу диапазонах. Внести данные в другие ячейки(не перечисленные в разрешенных диапазонах) можно будет исключительно сняв общий доступ с книги, а после этого защиту с листа –Рецензирование
Важно: приведенные ниже решения могут работать некорректно в книгах с общим доступом. А те решения, в которых устанавливается защита на листы вообще не будут работать, т.к. для книг с общим доступом невозможно изменять параметры защиты листов и книг.
Доступ пользователям только к определенным листам
Исходная задача: дать возможность пользователю видеть и работать только на определенных листах - тех, которые мы ему выделили. При этом он даже не подозревает, что есть другие листы. Как работает. Открываем файл - автоматом отображается лишь один лист "Main", доступный всем пользователям, жмем на кнопку, появляется форма:
В форме необходимо выбрать пользователя и указать пароль, соответствующий этому пользователю.
Важно: Пароли и список доступных листов можно редактировать на очень скрытом листе "Users". Для каждого пользователя можно указать несколько листов. Указывать имена листов необходимо в точности такие же, какие они на самом деле. Это значит, что и регистр букв и каждый пробел должен быть учтен. Для разделения записей с несколькими листами используется точка-с-запятой(Лист1;Лист2;Лист3).
На листе "Main" перечислены имена пользователей, пароли для них и доступные для просмотра листы. Данная информация указаны только для ознакомления и тестов. Менять данные для реальных задач необходимо на листе "Users".Важно: файл может работать нестабильно в книгах с общим доступом.Скачать пример Tips_Macro_Sheets_for_Users.xls (84,5 КиБ, 11 609 скачиваний)
Доступ пользователю к определенным листам и возможность изменять только отдельные ячейки
Помимо того, что можно ограничить пользователю свободу выбора листов, ему можно еще и ограничить диапазоны ячеек, которые ему разрешено изменять. Иначе говоря, человек сможет работать только на Лист1 и Лист2 и вносить изменения только в указанные для каждого из листов ячейки. Файл с примером работает так же, как и пример выше: открываем книгу - видим только один лист "Main", жмем кнопку. Появляется форма, выбираем пользователя. Появятся только разрешенные листы и на этих листах можно изменять только те ячейки, который мы разрешим в настройках. При этом диапазоны для изменения можно указать для каждого листа разные.Важно: Пароли, список доступных листов и диапазонов можно редактировать на очень скрытом листе "Users". Для этого его необходимо отобразить, как описано в статье: Как сделать лист очень скрытым.
Чтобы разрешить изменять диапазоны на Лист1 -А1:А10 иА15:А20 , а на Лист2 -В1:В10 иВ15:В20 , необходимо на листе "Users" указать листы:Лист1;Лист2 и диапазоны:A1:A10,A15:A20;B1:B10,B15:B20
На листе "Main" пароли и фамилии указаны только для ознакомления и тестов. Менять данные для реальных задач необходимо на листе "Users".
Пароль на листы указывается напрямую в коде. Для изменения пароля необходимо перейти в редактор VBA(Alt+F11), раскрыть папку Modules, выбрать там модуль sPublicVars и изменить значение 1234 в строке: Public Const sPWD As String = "1234":
Важно: защита диапазонов достигается за счет установки защиты листа. Поэтому файл не будет работать в книгах с общим доступом.Скачать пример Tips_Macro_Sheets_Rng_for_Users.xls (86,0 КиБ, 5 237 скачиваний)
Доступ к определенным листам и скрытие указанных строк/столбцов
И еще чуть-чуть испортим жизнь пользователю: каждому пользователю видны только свои листы и виден только свой диапазон на этом листе. Точнее - строка или столбец. Все так же, как и в файлах выше(Пароли, список доступных листов и диапазонов можно редактировать на очень скрытом листе "Users". Для этого его необходимо отобразить, как описано в статье: Как сделать лист очень скрытым).
На листе "Users " доступны следующие настройки: в самом правом столбце необходимо указать скрывать столбцы(C) или строки(R) указанного диапазона.
Например, указаны диапазоны на Лист1 -А1:А10 иА15:А20 , а на Лист2 -В1:В10 иВ15:В20 , а в правом столбце -R;C . Значит на Лист1 будут скрыты строки1:10 ,15:20 , а на Лист2 столбец В. Почему так заумно? Потому что нельзя скрыть только отдельные ячейки - можно скрыть лишь столбцы или строки полностью.
На листе "Main" пароли и фамилии указаны только для ознакомления и тестов. Менять данные для реальных задач необходимо на листе "Users".
Пароль на листы указывается напрямую в коде. Для изменения пароля необходимо перейти в редактор VBA(Alt+F11), раскрыть папку Modules, выбрать там модуль sPublicVars и изменить значение 1234 в строке: Public Const sPWD As String = "1234":
Важно: защита отображения скрытых строк и столбцов достигается за счет установки защиты листа. Поэтому файл не будет работать в книгах с общим доступом.Скачать пример Tips_Macro_Sheets_Hide_Rng_for_Users.xls (100,0 КиБ, 4 868 скачиваний)
Практический пример с использованием администратора
Все примеры выше имеют один маленький недостаток: при открытии файла виден один лист и надо жать на кнопку, чтобы выбрать пользователя. Это не всегда удобно. Плюс есть недостаток куда хуже: для изменения настроек всегда надо вручную отображать лист настроек, а может и другие листы. Поэтому ниже я приложил файл, форма в котором открывается сразу после открытия файла:
Если выбрать "Пользователь" -admin , указать "Пароль" -1 , то все листы файла будут отображены. Другим пользователям будут доступны только назначенные листы. Таким образом, пользователь, назначенный администратором сможет легко и удобно менять настройки и права доступа пользователей: добавлять и изменять пользователей, их пароли, листы для работы(они доступны на листеUsers , как и в файлах выше). После внесения изменений надо просто закрыть файл - он сохраняется автоматически, скрывая все лишние листы.
При этом если пользователя нет в списке или пароли ему неизвестны, то при нажатии кнопкиОтмена или закрытии формы крестиком файл так же закроется. Таким образом к файлу будет доступ только тем пользователям, которые перечислены в листе Users, что исключает доступ к файлу посторонних лиц.
Если макросы будут отключены, то пользователь увидит лишь один лист - с инструкцией о том, как включить макросы. Остальные листы будут недоступны.
В реальных условиях не лишним будет закрыть доступ к проекту VBA паролем: Как защитить проект VBA паролемВажно: файл может работать нестабильно в книгах с общим доступом.Скачать пример Tips_Macro_UsersRulesOnStart.xls (72,0 КиБ, 6 959 скачиваний)
что бы не поменяй:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If bClose = True Then ThisWorkbook.Close True
End Sub
на:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
End Sub
По поводу исчезновения сделал вот так.
Next li
End If
Next
If Sheets("Soft").Visible = -1 Then Sheets("Имя_листа").Select
Sheets("Main").Visible = 2
Else
MsgBox "Неверно указан код!", vbCritical, "Ошибка": Exit Sub
End If
End If
Else
Подскажите пожалуйста, взял в 3 пример, открыл нужные ячейки, все замечательно, но как теперь редактировать лист(например добавить столбец), как дать полный доступ, как снять защиту листа. требует пароль. заранее спасибо
Как в третьем примере, дать общий доступ с возможностью редактирования. Спасибо
Ввел данные открываю файл, спрашивает пароль
Сергей, на листе Main ВСЯ информация. Каким паролем какой лист защищен, какие диапазоны разрешены, какие листы и все остальное. Если Вы ничего сами там не накурочили - то именно этот лист отображается сразу после запуска.
Прошу прощения, все же не получается. Как дать администратору полный доступ с возможностью редактирования таблицы. Т.е я например хочу добавить в таблицу столбец, но не могу, т.к. лист защищен. я нажимаю рецензирование - снять защиту листа и у меня требуют пароль. Как редактировать? как дать полный доступ? Заранее спасибо
В чем проблема с паролем вообще не понимаю - дайте администратору возможность видеть лист Users и он увидит все пароли ко всем листам. Надо добавить столбец - посмотрел какой пароль, снял, добавил столбец.
Сергей, если очень уж хочется, то ответ такой - подучить VBA, может быть стоит? И изменить код так, что будут и администраторы, и пользователи, и еще кто-нибудь, кто нужен для удобной работы с файлом.
В моих статьях есть примеры для определенных задач, но я не ставлю цель сделать универсальное и подходящее абсолютно всем решение. Это нереально. А переделывать код под пожелание каждого у меня нет ни времени, ни желания.
Вы не ругайтесь на меня пожалуйста. Очень хочется воспользоваться Вашей для меня очень подходящей программой и у меня не получается. Я вообще не знаю VBA, поэтому и подучить его не получится (нужно учить). Я наверное неправильно выражаюсь, с паролями и с листом user мне все понятно, как задать пользователя, интервалы и пароль я тоже вроде разобрался, но например я ввожу пользователя Иванов пароль 1 открываются листы, и вот как их возможно редактировать(например добавить столбец), попробуйте - лист защищен. как снять защиту? Как создать админа который сможет редактировать все листы. Извините уж пожалуйста, просто очень хочется. Спосибо
Дмитрий, очень прошу Вас дать ответ. Заранее очень благодарен
Сергей, какого ответа ждете? Я не могу Вас в комментариях научить программировать. И дорабатывать код под Ваши нужды тоже времени нет. Удалять столбцы при подобном подходе можно только применив доп.код. Администратора создать легко - добавляете пользователя и даете ему полный доступ ко всем листам. Или прямо в коде, если это Админ - все листы отображаются и защита не устанавливается.
Спасибо Дмитрий, во всем разобрался, однако как сделать эту книгу для общего доступа по сети, метод peotect в общем доступе не работает. Может быть у Вас есть какие нибудь идеи.
Если сеть с доменом, то можно просто назначить диапазоны пользователям и они автоматически получают доступ к нужным диапазонам, остальные под паролями которые заданы для этих диапазонов, в равноранговой сети не могу связать пользователя с методом AllowEditRanges, а в Вашем решении идентификация пользователей сделана на ура.
С уважением Денис.