0
- 21.05.2013 - 13:00
|
Нужно сделать таблицу, в которой для разных юзеров будут скрыты разные ячейки. В каком направлении рыть?
| |
1
- 21.05.2013 - 13:41
|
Направлений, как всегда, несколько. 1. Васе надеть розовые очки, а шрифт в нужных (и видимых) ему ячейках - сделать синим, он будет видеть его как черный. А Петин текст пусть будет розовым, но зато очки у Пети будут синие, и шрифт ему будет казаться белым - бесцветным и он его не увидит. 2. Можно написать макрос, который будет скрывать от Пети - Васин столбец. Причем с без возможности его отобразить. Ну что-то вроде такого (за 10 минут) Private Sub Workbook_Open() ' пряталка ячеек по юзерам (с) econоmsit, 2013 ' перем окружения username смотрится по Win+PauseBreak ' пароль такой, надо бы посложнее, а еще запаролить сам VBA-проект pass = "123" ' для Васи не виден столбец D If Environ("USERNAME") = "vasya" Then ActiveSheet.Unprotect Password:=pass Columns("D:D").Hidden = True ActiveSheet.Protect Password:=pass End If ' для Пети не виден столбец E If Environ("USERNAME") = "petya" Then ActiveSheet.Unprotect Password:=pass Columns("E:E").Hidden = True ActiveSheet.Protect Password:=pass End If ' для Директора видно все If Environ("USERNAME") = "director" Then ActiveSheet.Unprotect Password:="123" Columns.Hidden = False ActiveSheet.Protect Password:="123" End If End Sub | |
2
- 21.05.2013 - 13:52
| Снимать, скрывать, а затем опять ставить защиту нужно потому, что на защищенных листах такие операции запрещены. Также можно скрывать строки. Если нужно произвольные ячейки скрывать - придется продумать структуру таблицы, или скрывать целыми листами (одна версия для васи - другая для пети). Еще можно шифровать содержимое ячейки, умножая его на некую легковосстановимую хеш-функцию (например на квадратный корень произведения номеров столбца и строки). | |
3
- 21.05.2013 - 13:53
| Еще можно монитор васи закрасить слева черным маркером, а пети - справа. Чтобы они не прокручивали таблицы - закрепить области и поставить защиту. | |
4
- 21.05.2013 - 13:59
|
Самый продвинутый из названных спосбо - все так с цветными очками. ... Единственный в мире способ, позволяющий двум находящимся рядом людям, глядящим в один и тот же монитор - видеть разрешенное и не видеть запрещенного, причем ячейки могут быть вперемешку в любой последовательности. А чтобы Вася или Петя не могли сами снять очки - придется привернуть очки саморезами ими в виски (но через несколько минут они не смогут видеть вообще), или использовать антураж-маску для БДСМ из секс-шопа. Тоже вариант, причем долгоиграющий... | |
5
- 21.05.2013 - 14:06
|
Сейчас стал очень популярен OpenOffice/LibleOffice, который легко открывает XLS/XLSX и игнорирует макросы - и вася увидет все. Поэтому макрос должен при закрытии книги прятать все столбцы вот таким кодом, в результате не в Excel ничего не увидеть: Private Sub Workbook_BeforeClose(Cancel As Boolean) pass = "123" ActiveSheet.UnProtect Password:=pass Columns.Hidden = True ActiveSheet.Protect Password:=pass End If End Sub | |
6
- 21.05.2013 - 15:05
|
пасибо за живое участие 1. OpenOffice/LibleOffice неактуально, так как компы в доменной сети и никто ничего несанкционированного не установит. 2. некоторые уточнения по задаче. Юзера сидят за своими мониторами. При запуске Ехсел в параметрах есть имя, взятое из таблицы учетных записей. Это значение можно прочитать изнутри макроса? Не то не совсем понятно "перем окружения username смотрится по Win+PauseBreak". 3. А в самом Ехсел нет внутренних механизмов для решения такой задачи? К примеру, каждый создает свою таблицу с разрешенными ему ячейками, а директор видит консолидированную. | |
banned 7
- 21.05.2013 - 18:16
| К примеру, каждый создает свою таблицу с разрешенными ему ячейками, а директор видит консолидированную. Дык, так и делать. У каждого своя, а у директора сводная... И для уточнения, невозможность именно видеть или, все же, править? | |
8
- 21.05.2013 - 20:03
| 7-Технолог > Видеть. Содержимое ячеек. | |
9
- 22.05.2013 - 11:29
|
pens - в домене можно распаковать архив portable-версии OOLO и он заработает в 80% случаев, т.к. ничего никуда не пишет. переменная окружения USERNAME - это логин пользователя из таблицы учетных записей домена (AD/LDAP), либо, если выдернули хвост (кабель сети) перед включением - какая-то локальная учетная запись. И та, и та возвращаются командой, можете проверить: Sub KtoYa msgbox(Environ("USERNAME")) End sub | |
10
- 22.05.2013 - 11:45
|
pens - в (1) готовое работающее решение для вашей задачи. Если же прятать листами (Вася, Петя, Директор) - то можно обойтись даже без пароля и защиты на листе - т.к. VBA-макрос умеет прятать лист целиком так, что его не отобразишь (команда для Васи): Sheets("Петя").VeryHidden=True Sheets("Директор").VeryHidden=True При этом возникают еще некоторые "секьюриковые" плюсы. В частности, юзер понятия не имеет - как точно называется чужой лист (а знание имени листа делает задачу взлома данных наполовину решенной)... | |
| Интернет-форум Краснодарского края и Краснодара |