Excel vba как снять защиту листа в excel

Apos, можно заблокировать лист так, чтобы на макросы эта блокировка не распространялась — то есть для пользователь ничего не сможет поменять, а у макроса будут права на изменение ячеек (даже заблокированных).

Включается эта блокировка макросом:

Код
Sheet1.Protect UserInterfaceOnly:=True

Соответственно, в макросе можно задать и другие параметры блокировки листа — например, разрешить пользователю форматировать ячейки или пользоваться автофильтром с сортировкой. При этом пользователь изменить заблокированные ячейки не сможет, а макрос не будет на этом спотыкаться и весьма успешно будет все менять ;-)

Цитата
Apos написал:

Код
Sheets("название_листа").Select
ActiveSheet.Unprotect

Пардон, конечно, но зачем вырезать гланды через.. кхм..? А если пользователь поменяет название листа, то Ваш макрос перестанет работать…

Заходите в VBA, там ищите окно Properties: если его нет — нажимаете F4. В дереве проекта выбираете тот лист, с которым работаете — в окно свойств загружаются все свойства листа, которые можно поменять во время разработки. Самое первое свойство — (Name) — это имя листа, которое может использоваться в коде (например, Sheet1 как в моем примере выше). Это имя можно изменить только во время разработки, во время выполнения у этого свойства включается атрибут read-only.

И, соответственно, по этому имени и можете обращаться к данному листу; после чего Вас уже не будет интересовать как этот лист называется и как переименовал его пользователь: Excel будет точно знать, что действия нужно выполнять именно с этим листом.

Макрос предназначен для программного подбора и снятия защиты с листа 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

Содержание

  1. Метод Worksheet.Unprotect (Excel)
  2. Синтаксис
  3. Параметры
  4. Замечания
  5. Пример
  6. Поддержка и обратная связь
  7. Метод Worksheet.Protect (Excel)
  8. Синтаксис
  9. Параметры
  10. Замечания
  11. Поддержка и обратная связь
  12. Макрос для снятия защиты листа или книги Excel
  13. Комментарии
  14. Как снять защиту со всех листов
  15. Как макрос работает
  16. Код макроса
  17. Как этот код работает
  18. Код макроса
  19. Как использовать

Метод Worksheet.Unprotect (Excel)

Удаляет защиту листа или книги. Этот метод не действует, если лист или книга не защищены.

Синтаксис

expression. Отмена защиты (пароль)

Выражение Переменная, представляющая объект Worksheet .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Password Необязательный Variant Строка, обозначающая пароль с учетом регистра, используемый для отмены защиты листа или книги. Если лист или книга не защищены паролем, этот аргумент игнорируется. Если этот аргумент не указан для листа, защищенного паролем, вам будет предложено ввести пароль. Если этот аргумент не указан для книги, защищенной паролем, метод завершается ошибкой.

Замечания

Если вы забыли пароль, вы не сможете снять защиту листа или книги. Рекомендуется хранить список паролей и соответствующие имена документов в безопасном месте.

Пример

В этом примере удаляется защита активной книги.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Метод Worksheet.Protect (Excel)

Защищает лист, чтобы его нельзя было изменить.

Синтаксис

expression. Защита (Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables )

Выражение Переменная, представляющая объект Worksheet .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Password Необязательный Variant Строка, указывающая пароль для листа или книги с учетом регистра. Если этот аргумент опущен, можно снять защиту листа или книги, не используя пароль. В противном случае необходимо указать пароль для отмены защиты листа или книги. Если вы забыли пароль, вы не сможете снять защиту листа или книги.

Используйте надежные пароли, содержащие строчные и прописные буквы, цифры и знаки. В слабых паролях эти элементы не комбинируются. Надежный пароль: Y6dh!et5. Слабый пароль: House27. Длина паролей должна быть не меньше 8 символов. В парольной фразе лучше использовать 14 или более символов.

Очень важно запомнить пароль. Если вы его забудете, корпорация Майкрософт не сможет его восстановить. Храните пароли, записанные на бумаге, в безопасном месте вдали от информации, которую они защищают. DrawingObjects Необязательный Variant Значение true для защиты фигур. Значение по умолчанию — True. Contents Необязательный Variant Значение true для защиты содержимого. Для диаграммы это защищает всю диаграмму. Для листа это защищает заблокированные ячейки. Значение по умолчанию — True. Scenarios Необязательный Variant Значение true для защиты сценариев. Этот аргумент действителен только для листов. Значение по умолчанию — True. UserInterfaceOnly Необязательный Variant Значение true для защиты пользовательского интерфейса, но не макросов. Если этот аргумент опущен, защита применяется как к макросам, так и к пользовательскому интерфейсу. AllowFormattingCells Необязательный Variant Значение True позволяет пользователю форматировать любую ячейку на защищенном листе. Значение по умолчанию — False. AllowFormattingColumns Необязательный Variant Значение True позволяет пользователю форматировать любой столбец на защищенном листе. Значение по умолчанию — False. AllowFormattingRows Необязательный Variant Значение True позволяет пользователю форматировать любую строку на защищенном листе. Значение по умолчанию — False. AllowInsertingColumns Необязательный Variant Значение True позволяет пользователю вставлять столбцы на защищенный лист. Значение по умолчанию — False. AllowInsertingRows Необязательный Variant Значение True позволяет пользователю вставлять строки на защищенный лист. Значение по умолчанию — False. AllowInsertingHyperlinks Необязательный Variant Значение True позволяет пользователю вставлять гиперссылки на защищенный лист. Значение по умолчанию — False. AllowDeletingColumns Необязательный Variant Значение True позволяет пользователю удалять столбцы на защищенном листе, где каждая ячейка удаляемого столбца разблокирована. Значение по умолчанию — False. AllowDeletingRows Необязательный Variant Значение True позволяет пользователю удалять строки на защищенном листе, где каждая ячейка в удаляемой строке разблокирована. Значение по умолчанию — False. AllowSorting Необязательный Variant Значение True позволяет пользователю выполнять сортировку на защищенном листе. Каждая ячейка в диапазоне сортировки должна быть разблокирована или не защищена. Значение по умолчанию — False. AllowFiltering Необязательный Variant Значение True позволяет пользователю задавать фильтры на защищенном листе. Пользователи могут изменять условия фильтра, но не могут включать или отключать автоматический фильтр. Пользователи могут задавать фильтры для существующего автофильтра. Значение по умолчанию — False. AllowUsingPivotTables Необязательный Variant Значение True позволяет пользователю использовать отчеты сводной таблицы на защищенном листе. Значение по умолчанию — False.

Замечания

В предыдущих версиях, если применить этот метод с аргументом UserInterfaceOnly , равным True , а затем сохранить книгу, при повторном открытии книги будет полностью защищен весь лист (а не только интерфейс). Чтобы повторно включить защиту пользовательского интерфейса после открытия книги, необходимо снова применить этот метод, если параметр UserInterfaceOnly имеет значение True.

Если вы хотите внести изменения в защищенный лист, можно использовать метод Protect на защищенном листе, если указан пароль. Кроме того, другой метод — снять защиту листа, внести необходимые изменения, а затем снова защитить лист.

Незащищено означает, что ячейка может быть заблокирована (диалоговое окно Форматирование ячеек ), но включена в диапазон, определенный в диалоговом окне Разрешить пользователям изменять диапазоны , и пользователь отключил защиту диапазона паролем или был проверен с помощью разрешений NT.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Макрос для снятия защиты листа или книги Excel

Макрос предназначен для программного подбора и снятия защиты с листа Excel.

Подобранный пароль не совпадает с установленным — но, тем не менее, защита снимается.

Аналогичный макрос снимает защиту книги Excel:

Комментарии

Не знаю с чем связано, но иногда макрос подвисает (сам пару раз сталкивался).
Либо отрабатывает менее чем за секунду (и снимает защиту), либо подвисает надолго — видимо, метод 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 — другой. Что то не очень получается все правильно сделать:/

Макрос для снятия защиты со всех листов, если пароль одинаковый — знаю. а вот если такая ситуация. не щелкать же каждый лист отдельно(((

Офигеть. Ума не приложу как это работает, но блин работает. Огромное спасибо.

Спасибо большое. Ваш макрос реально работает!

Источник

Как снять защиту со всех листов

Что делает макрос: Бывает необходимость снять защиту со всех листов, обычно это делается вручную. Данный макрос автоматизирует это.

Как макрос работает

Этот макрос проходит цикл листов и использует аргумент пароль для снятия защиты листа.

Код макроса

Как этот код работает

  1. Шаг 1 объявляет объект под названием WS. Это создает контейнер памяти для каждого рабочего листа.
  2. Шаг 2 запускается цикл через все рабочие листы в этой книге.
  3. Шаг 3 снимает защиту активного листа, обеспечивая пароль по мере необходимости, а затем возвращается обратно, чтобы получить рабочий лист.

Очевидно, что макрос будет работать, если все рабочие листы, которые должны быть незащищенными имеют один и тот же пароль. Если это не так, то вам нужно явно снять защиту каждый лист с соответствующим паролем.

Код макроса

Как использовать

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши personal.xlb в окне Project.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.

Привет! Меня зовут Якушев Дмитрий! Моя цель — помочь тебе изучить Excel.
На этом сайте буду выкладывать полезные статьи по Excel, VBA с примерами и трюками. Делаю это, чтобы помочь тебе лучше узнать Excel. Читай, прокачивай навыки, чтобы не тратить кучу времени на неинтересную рутину. Вот тут можно прочитать обо мне.

Источник

The common ways of locking or hiding tabs in a workbook can be easy to reverse for many users. Using VBA code to do this is considered a better way to do this, if you are familiar with macros. In this article, we’re going to show you how to ‘un-protect’ protected worksheets and how to protect un-protected worksheets using VBA.

Worksheets are objects in the worksheet collection of a workbook, and they have Protect and Unprotect methods. These methods determine the protected status of a worksheet as the name suggests. Both methods can also accept optional arguments. The first argument is the password. By setting a string into the parameter argument, you can lock your worksheets with a password. Below is a breakdown.

Code sample

You can use this in two ways:

  • Module
  • Immediate Window

In the Module method, you need to add the module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.

The Immediate Window method, on the other hand, is essentially a quick and dirty method where you can simply copy and paste the code into the Immediate Window, and press the Enter key to run it. Unfortunately, any code you use in the Immediate Window will not be saved. Also note that icons and keyboard shortcuts will not be available.

Protect a worksheet

Module Version:

Sub ProtectActiveWorksheet()

    ActiveSheet.Protect "pass"

End Sub

Immediate Window version:

ActiveSheet.Protect "pass"

Unprotect a worksheet

Module Version:

Sub UnprotectActiveWorksheet()

    ActiveSheet.Unprotect "pass"

End Sub

Immediate Window version:

ActiveSheet.Unprotect «pass»

Protect all worksheets

Module Version:

Sub ProtectAllWorksheets()

    Dim sh As Worksheet

    For Each sh In ActiveWorkbook.Worksheets

        sh.Protect "pass"

    Next sh

End Sub

Immediate Window version:

For Each sh In ActiveWorkbook.Worksheets: sh.Protect "pass": Next sh

Unprotect all worksheets

Module Version:

Sub ProtectAllWorksheets()

    Dim sh As Worksheet

    For Each sh In ActiveWorkbook.Worksheets

        sh.Unprotect "pass"

    Next sh

End Sub

Immediate Window version:

For Each sh In ActiveWorkbook.Worksheets: sh.Unprotect "pass": Next sh

Skip to content

На чтение 2 мин. Просмотров 2.4k.

Что делает макрос: В предыдущем макросе мы устанавливали защиту на лист, теперь давайте узнаем, как снять защиту с листа.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как работает это код
  4. Как использовать

Как макрос работает

Этот код запускается событием рабочей книги (BeforeClose— перед закрытием). При нажатии на кнопку закрыть срабатывает событие и запускается макрос. Макрос автоматически снимает защиту с указанного листа (в сохранении книги в данном примере нет необходимости).

Код макроса

Private Sub Workbook_BeforeClose(Cancel As
Boolean)
'Снимаем защиту с листа
Sheets("Отчет").Unprotect 
Password:="Akademia_excel"
End Sub

Как работает это код

Мы указываем лист(ы), с которого хотим снять защиту — «Отчет», в данном случае. Мы также прописываем аргумент Password (пароль): = «Akademia_Excel» (т.к. в предудущем примере мы ставили такой же пароль).

Как использовать

Для реализации этого макроса, Вам нужно скопировать и вставить его в код события Workbook_BeforeClose. Размещение макроса здесь позволяет запускать макрос непосредственно перед закрытием excel-файла.

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. В окне проекта найдите свой проект/имя рабочей книги и нажмите на знак плюс рядом с ним в чтобы увидеть все листы и модуль ЭтаКнига.
  3. Правой кнопкой мыши нажмите на модуле ЭтаКнига и выберите View Code
  4. В левой части окна выберите объект WorkBook (Excel автоматом предложит написать макрос для события Workbook_Open (можете позже удалить его за ненадобностью)
  5. В правом выпадающем списке свойство BeforeClose

Понравилась статья? Поделить с друзьями:
  • Excel vba как скрывать строки
  • Excel vba как скопировать строку с листа на лист
  • Excel vba как проверить что массив пустой
  • Excel vba как проверить существование файла
  • Excel vba как проверить существование листа