EXCEL-Макросы с запароливанием листа?

Программирование на Visual Basic for Applications
lamden
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 04.04.2004 (Вс) 15:48

EXCEL-Макросы с запароливанием листа?

Сообщение lamden » 22.04.2004 (Чт) 17:32

Можно ли макросом скрыть с паролем лист и, соответственно, открыть скрытый с паролем.
Аналогично - произвести те же действия с защитой листа.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 23.04.2004 (Пт) 8:33

через свойство Visible скрывается лист, через методы Protect и UnProtect ставится и снимается пароль листа

lamden
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 04.04.2004 (Вс) 15:48

Сообщение lamden » 23.04.2004 (Пт) 12:54

Увы, Protect закрывает лист, не спрашивая пароля, а прямо без пароля, а Anprotect - если пароль установлен, открывает стандартное окно на ввод пароля. Задача же в другом - задать пароль раз навсегда и чтобы макрос открывал и закрывал лист с этим паролем сам...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.04.2004 (Пт) 13:03

Указывай аргументы и будет защита с паролем. Вводишь ActiveSheet.Protect и нажимаешь Shift+F2.
Lasciate ogni speranza, voi ch'entrate.

lamden
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 04.04.2004 (Вс) 15:48

Сообщение lamden » 23.04.2004 (Пт) 13:13

Алибек, ты всегда так краток 8-( , а я ламер - потому и не знаю как раз про аргументы - какой формат их задания). Ох уж эти ламеры!!!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.04.2004 (Пт) 13:20

.Protect([Password], [DrawingObjects], [Contents], [Scenarios], [UserInterfaceOnly], [AllowFormattingCells], [AllowFormattingColumns], [AllowFormattingRows], [AllowInsertingColumns], [AllowInsertingRows], [AllowInsertingHyperlinks], [AllowDeletingColumns], [AllowDeletingRows], [AllowSorting], [AllowFiltering], [AllowUsingPivotTables])
.Unprotect([Password])

Код: Выделить всё
ActiveSheet.Protect Password:="123", DrawingObjects:=True, [Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
ActiveSheet.Unprotect "123"
Lasciate ogni speranza, voi ch'entrate.

Agent_Smith
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 11.05.2005 (Ср) 16:01
Откуда: РФ, Москва

При активации листа не могу отловить самое раннее событие.

Сообщение Agent_Smith » 22.06.2005 (Ср) 12:18

Многоуважаемые, направьте на путь истинный, плз! :)

Ситуация такая:
в книге 2 листа, при открытии активируется первый. у второго, при активации выскакивает модальное окошко для ввода пароля, и в этот же момент лист делается невидимым.

Код: Выделить всё
Private Sub Worksheet_Activate()
        Sheets(2).Visible = xlVeryHidden
        frmPass.Show
End Sub


Соответснно, при правильном вводе пароля форма прячется, лист становится Visible и активируется...

Но хитрые юзвери нашли элементарный выход из ситуации (всё гениальное просто, млин!) - они, щёлкая мышью по вкладке листа, просто нажимают и держут левую кнопку - пока они её не отпускают, лист отображается на экране, а вывод формы (и сокрытие листа) не происходят.

Какое это событие (удержание левой мыши на вкладке листа)? Должно быть что-то типа MouseDown... или что-то подобное?

Как быть, помогите пожалуйста!

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 22.06.2005 (Ср) 12:32

У книги есть событие Open
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Maks the best
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 09.06.2005 (Чт) 12:34
Откуда: Санкт-Петербург

Сообщение Maks the best » 22.06.2005 (Ср) 12:42

А представь ещё если этот юзер удерживая мышку на ярлыке второго листа поставит его перед первым ... лучше уж написать тады не Sheets(2) а Sheets("2")

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 22.06.2005 (Ср) 12:46

Maks the best
Sheets("2") - будет выбран лист с именем 2, а если его нет будет ошибка
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Agent_Smith
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 11.05.2005 (Ср) 16:01
Откуда: РФ, Москва

Сообщение Agent_Smith » 22.06.2005 (Ср) 12:49

Igor_123 писал(а):У книги есть событие Open


Дык, что-то я не понимаю, чем оно поможет-то?
Мне нужно, чтобы изначально второй лист был видимым - чтобы можно было его активировать, кликнув по его вкладке (что должно вызвать его сокрытие, отображение формы для ввода пароля и т.д. и т.п..).

Понимаю, что можно сделать кнопку, или щелч0к по определённой ячейке на первом листе обработать - тогда можно прятать лист 2 при открытии книги... Но это крайний вариант.

Пока пытаюсь просто обламать юзеров, "из принЫпа", чтобы не умничали - жали на вкладку, и "опаньки им" :twisted:

Maks the best писал(а):... лучше уж написать тады не Sheets(2) а Sheets("2")


Ясень пень, это ж я просто упрощённо пытаюсь излагать... Там не только в этом подводные камни могут быть ;)
Но меня заморочило именно момент нажания-и-удерживания мышью по вкладке листа - что это за событие, как его обработать, или что с ним сделать можно?

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 22.06.2005 (Ср) 12:59

Тогда сабклассинг тебе в руки, терпение в голову.
В Spy++ посмотришь какие сообщения посылаються, и вставишь свою, дополнительную обработку. :wink:

Agent_Smith писал(а):просто обламать юзеров


Святое дело :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Maks the best
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 09.06.2005 (Чт) 12:34
Откуда: Санкт-Петербург

Сообщение Maks the best » 22.06.2005 (Ср) 13:08

а если изначально на втором листе скрывать все столбцы или скажем активной делать ячейку в дебрях, где ничего не видно типа Range("DD56000")

Agent_Smith
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 11.05.2005 (Ср) 16:01
Откуда: РФ, Москва

Сообщение Agent_Smith » 22.06.2005 (Ср) 13:08

Igor_123 писал(а):Тогда сабклассинг тебе в руки...

В Spy++ посмотришь


Едрить-колотить, я слова-то енти раз во второй слышу (заметь, что "понимаю" - даже не говорю ;)... )

Лана, видимо "перректальный способ" терапии придётся возводить в ранг хобби.

Есть пару задумок - первая, это нае... обмануть юзеров - сделать 3 листа, при этом 2-й скрывать сразу, а 3-й, пустой, использовать лишь для того, чтобы пользователи кликали по его вкладке. И тогда уже - вывод окна с паролем, при правильном пароле - 2-й лист показать, 3-й спрятать :D

Не получится - буду делать с вариантом "сч0лкни по заветной ячеечке на 1-м листе, у тебя паролик-то и спросится" ;-)

Будут ещё какие предложения - с благодарностью выслушаю! =)

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 22.06.2005 (Ср) 13:19

Agent_Smith
Если не сильно горит, попробую помочь.

Maks the best
Это из задачи и пожеланий заказчика. Не всегда прокатывает, и к тому-же можно обойти
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Agent_Smith
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 11.05.2005 (Ср) 16:01
Откуда: РФ, Москва

Сообщение Agent_Smith » 22.06.2005 (Ср) 13:40

Igor_123 писал(а):Agent_Smith
Если не сильно горит, попробую помочь.


Буду благодарен любой помощи и в любой срок!
Самому интересно уже... :)

Поднятый мной пример является яростным подтверждением известных аксиом - технические средства информационной безопасности заффсегда должны идти вкупе с административными.

Посему - сажусь за написание бумаги по фирме с ж0стким проставлением цен за такие "хакерццтва" (aka несанкционированный доступ к информации).

Вот.

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 22.06.2005 (Ср) 14:31

Agent_Smith писал(а):Поднятый мной пример является яростным подтверждением известных аксиом - технические средства информационной безопасности заффсегда должны идти вкупе с административными.


Только администрация считает, что это очень дорого и поэтому хотят решить проблему только выдавая ЕБЦУ и потом полоская мозги вопросами как идет выполнение. :(
Ввобщем очень грусная ситуация. Сочувствую и желаю решения в сторону поддержки твоих усилий. :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Agent_Smith
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 11.05.2005 (Ср) 16:01
Откуда: РФ, Москва

Сообщение Agent_Smith » 23.06.2005 (Чт) 17:05

Igor_123 писал(а):Только администрация считает, что это очень дорого

Сочувствую и желаю решения в сторону поддержки твоих усилий. :D


Спасибо за пожелания, с администрацией, к счастью, как раз особых проблем нет.
"Нужны административные меры - пжалста!". Вот только инициатива наказуема... а составлять всю эту бюрократию особого желания не имею :)

Сорри за оффтоп, теперь по теме:
временное решение (до тех пор, пока не осенит ещё какая гениальная идея, или юзеры чего нового не выкинут) - контроль события
Код: Выделить всё
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

То бишь, проверка пароля запускается при выделении определённой ячейки на первом, открытом листе. Второй лист изначально спрятан.

Остаюсь открыт любым идеям и предложениям по теме :)

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 23.06.2005 (Чт) 17:51

Если уж ты к этому пришел, то:

Лист 2 изначально спрятан, на листе 1 кнопочка, при нажатии на нее ввод пароля, при правильном пароле отображение листа. Просто и цивильно.

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Сообщение SergT » 23.06.2005 (Чт) 19:42

Однажды мне посоветовали умные люди - напиши Макрос, и увидишь как правильно надо писать код! Так же и в Access - удобно пользоваться мастерами и потом уже наводить крсоту! Очень рекомендую - Excel сделает за вас почти все сам ...
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

Agent_Smith
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 11.05.2005 (Ср) 16:01
Откуда: РФ, Москва

Сообщение Agent_Smith » 23.06.2005 (Чт) 23:11

uhm писал(а):Если уж ты к этому пришел, то:

Лист 2 изначально спрятан, на листе 1 кнопочка


Да, но решил делать без явных управляющих элементов, ибо:
1. Первый лист - готовая печатная форма, и для кнопки на ней места не предусмотрено :)
2. Нет кнопки - нет лишних вопросов. Кто знает, в какую ячейку надо ткнуть - ткнёт, и введёт пароль. Кто не знает - тот и не узнает :)

Также хочу сделать третий лист, скрытый наглухо, в который логировать, когда, с каким паролем (их там несколько), и, желательно, с какой системы (имя компа, юзер) открывался закрытый второй лист. ;-)

В связи с этим, снова вопрос - какой функцией в VBA в Excell'е можно получить инфу о системе - пользователя, имя компьютера (да и про дату с временем тада уж, если не сложно, напомните - сам-то найду, но не быстро :)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 112

    TopList