Макрос предназначен для программного подбора и снятия защиты с листа Excel.
Подобранный пароль не совпадает с установленным - но, тем не менее, защита снимается.
Sub Unlock_Excel_Worksheet() t = Timer If UnlockSheet(ActiveSheet) Then MsgBox "Защита снята. Потребовалось времени: " & Format(Timer - t, "0.0 сек.") Else MsgBox "Не удалось снять защиту листа", vbCritical End If End Sub
Function UnlockSheet(ByRef sh As Worksheet) As Boolean Dim i%, j%, k%, l%, m%, n As Long, i1%, i2%, i3%, i4%, i5%, i6%, txt$ On Error Resume Next For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 For i5 = 65 To 66: For i6 = 65 To 66 txt$ = Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) For n = 32 To 126 sh.Unprotect txt$ & Chr(n) If Err Then Err.Clear Else Debug.Print "Пароль: " & txt$ & Chr(n) UnlockSheet = True Exit Function End If Next Next: Next: Next: Next: Next: Next Next: Next: Next: Next: Next End Function
Аналогичный макрос снимает защиту книги Excel:
Sub Unlock_Excel_Workbook() ' снятие защиты книги Excel t = Timer If UnlockWorkbook(ActiveWorkbook) Then MsgBox "Защита снята. Потребовалось времени: " & Format(Timer - t, "0.0 сек.") Else MsgBox "Не удалось снять защиту книги", vbCritical End If End Sub
Function UnlockWorkbook(ByRef wb As Workbook) As Boolean Dim i%, j%, k%, l%, m%, n As Long, i1%, i2%, i3%, i4%, i5%, i6%, txt$ On Error Resume Next For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 For i5 = 65 To 66: For i6 = 65 To 66 txt$ = Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) For n = 32 To 126 wb.Unprotect txt$ & Chr(n) If Err Then Err.Clear Else Debug.Print "Пароль: " & txt$ & Chr(n) UnlockWorkbook = True Exit Function End If Next Next: Next: Next: Next: Next: Next Next: Next: Next: Next: Next End Function
Комментарии
Не знаю с чем связано, но иногда макрос подвисает (сам пару раз сталкивался).
Либо отрабатывает менее чем за секунду (и снимает защиту), либо подвисает надолго - видимо, метод Unprotect в каких-то случаях применяется моментально, а в других - какие-то еще действия невидимые вызывает (что занимает в разы больше времени)
Возможно, от версии Excel зависит, но скорее - от конкретного файла Excel, с которого снимается защита
(например, там может запускаться автопересчёт формул при каждой попытке снятия защиты с листа)
Как вариант, - попробуйте отключить автопересчёт формул в файле перед снятием защиты макросом, вдруг поможет.
В любом случае, что есть, то есть. В подавляющем количестве случаев код отрабатывает быстро, и дает нужный результат.
Поскольку я применяю этот макрос примерно раз в год, что-то оптимизировать в коде планов нет.
Кроме того, можете добавить строку кода
DoEvents
после строки
If Err Then
тогда подвисания не будет (но макрос по прежнему будет работать либо очень быстро и результативно, либо долго и безрезультатно)
Добрый день, несколько лет работало отлично и вот пришли очередные файлы на разбор - и программа зависает на несколько часов и в конце "Не удалось снять защиту книги". Один проход цикла занимает 10 секунд! Эксель 2016, форматы не менялись, вообще вроде бы ничего не изменилось - но больше не работает.
В большинстве случаев, пароль подбирается за 1-2 секунды. Но иногда подвисает, - если больше 5-10 секунд думает, то можно уже не ждать (снимая задачу excel через диспетчер задач)
Видимо, от версии эксель зависит
Создал Макрос предназначен для программного подбора и снятия защиты с листа Excel.
Запустил и зависло причем минут 30 висело и ничего
Версия EXCEL 2016
Огонь, пораздолбал все пароли, сотрудники в шоке, сидят косятся... >:)
Потратил полдня, искал как снять защиту структуры книги от изменений. Перепробовал все что угодно, и вот только здесь наконец таки нашел решение проблемы.
Автору РЕСПЕКТ!!
Добрый день, Николай!
на данной странице макрос для снятия защиты с листов и структуры книги (т.е. защита от добавления или удаления листов в книгу, например). Пароль для открытия книги этим макросом снять нельзя.
Прошу прощения за возможно тупой вопрос, но куда нужно вставить этот макрос?
1) Если в новую книгу - то он ее и пытается взломать (пишет пароль снял)
2) если открываю Excel с паролем на книгу (при открытии МОДАЛЬНОЕ окно), то в код этой книги встроить код не получается (все не активно, пока активно окно "Введите пароль").
Спасибо большое, очень помогла эта программка
В Excel 2016 всё работает аналогично, зависать не должно
К сожалению, в 16 Excele тоже намертво зависает и не взламывает. Видимо сделали заплатку.
Перебирайте листы в цикле, внутри цикла активируйте каждый лист, и вызывайте приведенный в статье макрос.
Если сами не справитесь, - можем сделать под заказ (платно)
А не подскажете, пожалуйста, макрос, который будет снимать защиту с 3 листов.. только при условии что на 1 листе один пароль, а на 2 и 3 - другой??? Что то не очень получается все правильно сделать:/
Макрос для снятия защиты со всех листов, если пароль одинаковый - знаю. а вот если такая ситуация... не щелкать же каждый лист отдельно(((
Офигеть!!!! Ума не приложу как это работает, но блин работает!!!! Огромное спасибо!!!
Спасибо большое. Ваш макрос реально работает!
Круто!!!
Спасибо ОГРОМНОЕ!!! Написавшему макрос - 100500 плюсов в Карму!!!
Пароль не находит. Но защиту с книги снимает. Занятно.
Единственный пароль - на открытие файла Excel. Остальные пароли снимаются легко без применения макросов. Есть все в интернете.
VBA Password Bypasser. Вот програмка, которая снимает защиту с VBA.
А для этого есть другие программы и макросы (у меня на сайте нет, - т.к. стабильно работающего решения на VBA нет)
А если стоит пароль и на редактор VBA?
Ребят, защита от редактирования можно снять и без этого. Необходимо открыть документ в Numbers (Mac OS) система от Apple. Сохраняется его снова в exels формате и все =)
Спасибо ребят! Это мегабомбически! :)))
Спасибо, помогло
Здравствуйте, Алексей.
Эти макросы предназначены для снятия пароля с листов и пароля на книгу Excel (эти пароли легко снимаются и подбираются)
А в вашем случае стоит пароль на открытие файла, - это совсем другое, ваш пароль никаким макросом не снимается и не взламывается
(там только полным перебором всех возможных вариантов, - что, в общем случае, нереально)
Не смог понять, как применить макрос к книге, которая с паролем. Файл запрашивает пароль и если его не угадал, закрывается. Возможности запустить макрос нет.
А Вы попробуйте сами в Excel 2013, хоть со статус-баром, хоть без него, результата не дождетесь.
А вот если не помещать переменную в статус-бар (что замедляет макрос многократно, в сотни раз) - то среднее время работы макроса составит около 1 секунды...
В Excel 2013 макрос работает, но настолько медленно, что дождаться результата нереально. Это наглядно можно увидеть, если поместить переменную txt в статус-бар.
Спасибо большое! )
Возможно, у вас подключены какие-то надстройки в Excel 2013, которые реагируют на этот макрос.
Потому что макрос простейший, и ему без разницы, какая версия Excel - везде одинаково должно работать (не дольше 1-5 секунд)
Почему в Excel 2013 не работает макрос?? Намертво зависает. В Excel 2010 работает. Может что-то подправить можно, чтобы в 2013 заработал ??
А в чем заключается физический смысл данного алгоритма?
Почему циклы For i = 65 To 66:
и For n = 32 To 126 ?
Марина, так в чем проблема?
В статье же есть макрос, снимающий защиту листа
Необходимо снять защиту листа
А вы не обратили внимание, что в вашем макросе есть строка
а в моей версии:
Вот это как раз и есть вывод пароля... совсем необязательно было искать другие макросы
А чтобы окошко с паролем выскакивало, - замените Debug.Print на MsgBox
всё супер, снимает. но вот поискал что бы показывал ещё пароль. Нарыл в инете:
Sub Подбор_аналога_пароля_листа()
'Макрос написан 20 декабря 2003 года (автор Djon Player).
'Программа предназначена для подбора пароля, для снятия защиты активного листа.
Dim str_pass As String
Dim s As String
Dim ls As Integer
Dim i As Integer
Dim j As Integer
Dim ch As String * 1
Dim found As Boolean
Dim bit0 As String * 1
Dim bit1 As String * 1
Dim kolichestvoBit As Integer
bit0 = "0" 'Символ соотвествующий нулевому биту.
bit1 = "1" 'Символ соотвествующий единичному биту.
kolichestvoBit = 20 'Максимальное количество бит в числе.
s = "" '
ls = Len(s)
While ls < kolichestvoBit
found = False 'Переменная используется как индикатор нахождения очередного двоичного числа.
While Not found
For i = ls To 1 Step -1
ch = Mid(s, i, 1)
If ch = 0 Then
Mid(s, i, 1) = bit1
For j = i + 1 To ls
Mid(s, j, 1) = bit0
Next j
found = True
Exit For
End If
Next i
If Not found Then
s = bit0 & s
ls = ls + 1
found = True
End If
Wend
str_pass = s 'Строка, в которой формируется число в двоичном представлении.
On Error Resume Next
ActiveSheet.Unprotect Password:=str_pass 'Попытка снятия защиты листа.
If Err.Number <> 0 Then
Err.Clear 'Очистить ошибку.
Else
MsgBox "Подобран пароль листа: " & str_pass
Debug.Print "Подобран пароль листа: " & str_pass
Exit Sub
End If
Wend
On Error GoTo 0
End Sub
Спасибо, выручили! Коллега случайно поставила пароль на книгу, а какой - не запомнила.
Спасибо !!! все работает в лучшем виде =)
Здравствуйте, Геннадий.
Защита книги снимается аналогично.
Добавил соответствующий макрос в статью.
А для снятия пароля книги макрос есть?
Огромное спасибо!!! Безотказно, как автомат Калашникова ;)
Спасибо, всё чётко.
Good'N'Cool Спасибо, комрад
Спасибо большое, сработало!
Спасибо! Работает!
ВАХ! ШАЙТАН)))))))
Супер!!!!!!
Отправить комментарий