Страница 2 из 8
Re: Пароль на защиту листа
Добавлено: 20 мар 2008, 16:59
Aent
" писал(а):А что за сайт?
http://www.eliansoft.com/
Но там сейчас ничего нет

cсылки на старые продукты остались на
http://wareseeker.com/publisher/elian-soft/24334/
Но сами продукты автор похоже убрал из Сети

Re: Пароль на защиту листа
Добавлено: 20 мар 2008, 17:11
Aent
VictorM, я когда то развлекался удалением S-кода из скомпилированного
компаунд документа (EXCEL). В принципе это работает. Но результат
неустойчивый. При переносе файла на другой компьютер иногда рабочая
книга не открывалась ...
По идее с xlsx это можно сделать ещё проще

Т.е сохранить скомпилированный проект а потом просто открыть zip и убрать
исходный код. Правда, возможно будет заморочка с контрольными суммами - в офисе 2007 не пробовал.

Re: Пароль на защиту листа
Добавлено: 20 мар 2008, 17:18
VictorM
Aent, спасибо за ссылки, интересно.
p.s. Вы развлекались, а подобными вещами еще даже не пробовал заниматься

пока что это для меня - темный лес

Все что можно найти почитать - на английском, а у меня с ним туго.
Re: Пароль на защиту листа
Добавлено: 21 мар 2008, 13:46
Mint86
VictorM, Спасибо за код, конечно же буду пробовать, просто знаний пока маловато.
Aent, спасибо за файл то что нужно.
Re: Пароль на защиту листа
Добавлено: 01 апр 2008, 09:06
Mint86
Вроде получилось устанавливать случайный пароль при открытии книги. Проверил с помощью двух программ взломщиков, они говорят что книга не защищена, но при открытии пароль стоит. Но с VBA проектом пока не могу справиться, подскажите как можно установить на него пароль (случайный). VictorM решал проблему со снятием пароля с помощью SendKey, а мне наоборот надо установить пароль.
Re: Пароль на защиту листа
Добавлено: 01 апр 2008, 09:58
VictorM
Mint86, тут такая ситуация:
пароль, установленный программым путем, при открытии рабочей книги, легко обходится. Создаем рабочую книгу с таким кодом:
Код: Выделить всё
Sub NoStart()
Dim iName
iName = "ИмяКниги"
iFullName = "C:\Temp\" & iName'обе книги в одной папке
With Application
.EnableEvents = False
.Workbooks.Open Filename:=iFullName
.EnableEvents = True
End With
End Sub
открываем эту книгу, запускаем код и все

. И опять Ваш код беззащитный

И еще - пароль, созданный случайным образом, сами - то как собираетесь вводить? Или тоже "ломать" прийдется?
IMHO программа, предложенная
Aent все - таки лучший вариант. Хотя, может я и не прав, не зная именно Вашей ситации, судить трудно. В любом случае - выбор за Вами.
Re: Пароль на защиту листа
Добавлено: 01 апр 2008, 10:18
VictorM
Mint86, о
SendKey "Если знаешь, что нельзя, но сильно хочется - то можно" (с) К.Прудков

Посмотрите код в теме
http://forum.developing.ru/showthread.php?t=12818, поэкспериментируйте. Сохраняйте сгенерированный пароль в переменную и вставляйте в SendKey. Однако здесь тоже возникают неприятности. Пароль на код VBA, созданный таким образом, не сработает до сохранения
и закрытия рабочей книги. Т.е., пароль Вы создали, редактор VBE закрыли, но... Alt+F11 и Ваш код - вот он.

Попробуйте.
Так что, не знаю...

Re: Пароль на защиту листа
Добавлено: 01 апр 2008, 11:23
Mint86
VictorM писал(а):Mint86, тут такая ситуация:
пароль, установленный программым путем, при открытии рабочей книги, легко обходится. Создаем рабочую книгу с таким кодом:
Код: Выделить всё
Sub NoStart()
Dim iName
iName = "ИмяКниги"
iFullName = "C:\Temp\" & iName'обе книги в одной папке
With Application
.EnableEvents = False
.Workbooks.Open Filename:=iFullName
.EnableEvents = True
End With
End Sub
открываем эту книгу, запускаем код и все

. И опять Ваш код беззащитный

И еще - пароль, созданный случайным образом, сами - то как собираетесь вводить? Или тоже "ломать" прийдется?
IMHO программа, предложенная
Aent все - таки лучший вариант. Хотя, может я и не прав, не зная именно Вашей ситации, судить трудно. В любом случае - выбор за Вами.
Да, лучше конечно использовать программу от
Aent, просто было интересно можно ли это сделать и как. Оказалось что затраты выше чем прибыль
Насчет кода, да действительно чел. им может воспользоваться, но раз он знает что такое VBA, то в случае с моей "защитой" он может просто отключить выполнение макроса и заломать пароль. Данная защита конечно же предназначена на среднего юзера. А сам я просто держу второй "резервный" файл, который без пароля.
ИМХО: Как Вы сами сказали в начале топика, если чел. знает как ломать и главное хочет сломать он это сделает, даже если использовать DLL и упаковать его протектором (хотя хлопот будет намного больше).
Спасибо огромное за помощь!
Re: Пароль на защиту листа
Добавлено: 03 апр 2008, 09:04
Mint86
Подскажите пожалуйста кусочек кода с помощью которого можно проверить правильность пароля листа. Т.е. если лист защищен, то проверить пароль с определенным паролем.
Сам добился только того что проверяю защищен ли лист
Private Sub workbook_open()
Dim iWorksheet As Worksheet
For Each iWorksheet In ThisWorkbook.Worksheets
If iWorksheet.ProtectContents Then
MsgBox "Лист защищен"
Else
MsgBox "Не защищен"
End If
Next
'ThisWorkbook.Close
End Sub
Re: Пароль на защиту листа
Добавлено: 03 апр 2008, 10:47
VictorM
Mint86, посмотрите.
Первые два кода я Вам давал, только в первом есть некоторые изменения. Точно так же можно модифицировать и второй код. Читайте комменты. Третий код -
кусочек кода с помощью которого можно проверить правильность пароля листа
если я Вас правильно понял.
Код: Выделить всё
Sub SheetsPassw() ' листы по выбору, если листы скрытые - выскочит ошибка
iPass = InputBox("Введите новый пароль") 'пароль можно ввести так
'достаточно интересный вариант, пароль не хранится в открытом виде
' iPass = "321"' или сразу в коде
For Each iList In Worksheets(Array("Лист1", "Лист2", "Лист3"))
Worksheets(iList.Index).Protect Password:=iPass, UserInterfaceOnly:=True
' раскомментируйте MsgBox и увидите работу макроса
' MsgBox "Имя рабочего листа : " & iList.Name & ", пароль: " & iPass
Next
End Sub
Sub AllSheetsPassw() 'все рабочие листы книги, в том числе и скрытые
Application.ScreenUpdating = False
Dim iWorksheet As Worksheet, iHidden As Boolean
For Each iWorksheet In ThisWorkbook.Worksheets
If iWorksheet.Visible <> True Then 'если есть скрытые листы, перед установкой пароля - отобразить
iHidden = True
iOldVisible& = iWorksheet.Visible
iWorksheet.Visible = True
End If
iWorksheet.Protect Password:="12345", UserInterfaceOnly:=True
If iHidden = True Then ' и опять все скрыть
iWorksheet.Visible = iOldVisible&
iHidden = False
End If
Next
Application.ScreenUpdating = False
End Sub
Sub EnterPass() ' можно проверить пароль на правильность
iPass = "321" 'но только если Вы его знаете :-)
Pword = InputBox("Введите пароль")
If Pword <> iPass Then
MsgBox "Неправильный пароль"
End
End If
End Sub
Обратите внимание,
новый пароль можно установить ТОЛЬКО сняв прежний пароль.
поэтому, по аналогии с установкой пароля, можно написать процедуру для снятия паролей, перед установкой новых.
p.s. при ответе не обязательно цитировать сообщение целиком :-)