|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
12.05.2008, 16:54 | #1 |
Пользователь
Регистрация: 06.02.2008
Сообщений: 42
|
Отображать лист по user name или паролю
Народ, ниже представлен макрос который отображает лист если пользователь "я", а если пользователь не "я" то лист все таки можно отобразить через Формат\Лист\отобразить... нужно ввести пароль и лист будет виден...
Единственная проблема, если я кликаю на этот отображенный лист то он начинает макрос заново... предлагая ввести пароль... а раз я его уже отобразила.. значит мне надо там работать .. а не вводить блин пароли... Что там не так в этом коде... подскажите пожалуйста что я делаю не так..? как остановить цикличность...? Если я ставлю проверку в начало кода: if Application.ThisWorkbook.Worksheets ("Delete").Visible = True then exit Sub То скрытый лист открывается без пароля... Private Sub Worksheet_Activate() Dim User As String Dim Password As String User = Application.UserName If User = "Наталия" Then Application.ThisWorkbook.Worksheets ("Delete").Activate Else Application.ThisWorkbook.Worksheets ("Delete").Visible = False Password = InputBox("Введите пароль на открытие листа", "Проверка") If Password = 123 Then Application.ThisWorkbook.Worksheets ("Delete").Visible = True Application.ThisWorkbook.Worksheets ("Delete").Activate = True Exit Sub Else Application.ThisWorkbook.Worksheets ("Delete").Visible = False Exit Sub End If End If End Sub |
12.05.2008, 18:00 | #2 | |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Все правильно.
Это кусок кода будет срабатывать, каждый раз когда фокус переносится с любого листа на лист "Delete". Чтобы этого не происходило предлагаю перекинуть его в auto_open. Запрос на пароль появиться только 1 раз, при открытии файла (или не появится ваще если пользователь "Наталия"). Только аккуратно там с выходами. Или всю эту проверку расположить в самом конце процедуры auto_open, а обьявления, понятно, в начале. имеющуюся процедуру Private Sub Worksheet_Activate() - закомментировать для начала, а потом и удалить совсем. Цитата:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
|
12.05.2008, 19:44 | #3 |
Форумчанин
Регистрация: 06.03.2008
Сообщений: 352
|
ТщательнЕй надо, ребята (с)
В том смысле, что тщательнЕй надо читать хэлп на Visible.
Константа xlSheetVeryHidden придумана именно для того, чтобы нельзя было открыть лист вручную и даже увидеть его в юзерском списке листов. По коду: - Отрабатывает один раз при открытии книги. - Помещается, естественно, в модуль "ЭтаКнига". - Требует пароль только от определённого пользователя. Всяким прочим незачем знать, что здесь что-то скрыто. - Worksheets на всякий случай заменено на Sheets. Диаграммы там всякие... - Активация, вообще говоря, к секретности отношения не имеет и взята из кода Dorvir. Код:
Последний раз редактировалось дмидми; 12.05.2008 в 20:06. Причина: Куда ставить-то?! (с) |
13.05.2008, 06:28 | #4 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Господа! По-моему, этого мало. Нужно по событию Workbook_BeforeClose(Cancel As Boolean) добавить скрытие нужного листа Sheets(x)=xlVeryHidden. Иначе, нежелательный пользователь может удерживая при открытии клавишу Shift открыть файл, предотвратив выполнение макроса по событию Workbook_Open(),
Чем шире угол зрения, тем он тупее.
|
13.05.2008, 08:25 | #5 |
Форумчанин
Регистрация: 06.03.2008
Сообщений: 352
|
Как страшно жить!
Конечно, мало. И сколько ни добавляй - всё будет мало Ведь один шпиён умеет давить на Shift; другой умеет запускать VBE - а в окне Project Explorer'а даже "очень-очень хидден" листы сразу видны, а уж написать программку из одной строки Лист1.Hidden=false (и никакого пароля не надо) каждый дурак сумеет; третий ва-аще хакером окажется, да и криптологом к тому же; etc. etc.
Как всегда, приходится решать: стОит ли овчинка выделки? С какого момента затраты на секретность станут больше стоимости секрета? |
13.05.2008, 11:36 | #6 |
Пользователь
Регистрация: 06.02.2008
Сообщений: 42
|
Спасибо Всем Огромное!
Мне очень понравилось - xlSheetVeryHidden я знаю о такой возможности, но не знала как такое написать в коде.))) Cобытие Workbook_BeforeClose у меня в файле есть)))) Секретность от "шпионов" особо не нужна, прото хотелось чтобы эксель сам скрывал и открывал лист, а не делать это каждый раз вручную)))) Спасибо Всем еще раз! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как отображать в своей программе файлы *.gif с анимацией? | SalasAndriy | Общие вопросы C/C++ | 1 | 02.11.2007 12:17 |
User list | RKS | Работа с сетью в Delphi | 8 | 10.09.2007 13:42 |