К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

спецы в Ехсел, дайте направление

Гость
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

При этом возникают еще некоторые "секьюриковые" плюсы. В частности, юзер понятия не имеет - как точно называется чужой лист (а знание имени листа делает задачу взлома данных наполовину решенной)...


К списку вопросов






Copyright ©, Все права защищены