Защита листа установлена ​​с помощью ws.protect, но не снимает защиту с помощью меню (Просмотр - Снять защиту листа) - PullRequest
2 голосов
/ 24 ноября 2011

У меня есть следующий код для защиты листов книги в Excel 2007

Private Sub password_protectallsheets()
For Each ws In Worksheets
ws.protect Password = "edc1"
Next
End Sub

, но когда я пытаюсь снять защиту листа с помощью пароля через меню Excel 2007 (просмотр -> Снять защиту листа), он говорит, что введенный вами пароль неверен.

Любая помощь очень ценится.

Ответы [ 3 ]

1 голос
/ 24 ноября 2011

Аргумент пароля должен быть указан с ": =" - не просто "=".Это верно для аргументов методов в целом:

ws.protect Password := "edc1"

Чтобы компилятор ловил эти типы ошибок, всегда используйте Option Explicit в начале модулей, как JMax делал выше.Когда вы это сделаете, компилятор выдаст вам ошибку «Variable not Defined», когда вы забудете опцию «:» Explicit, сэкономит вам много времени с другими типами ошибок объявления переменных.Чтобы включить его для всех новых модулей, выберите Инструменты> Параметры> Изменить> Требовать объявление переменной в VBE.

Не могу понять, почему в коде без ":" назначен парольсовсем.Я ожидал, что лист будет защищен, но без пароля.

0 голосов
/ 24 ноября 2011

Попробуйте:

Option Explicit

Private Sub password_protectallsheets()
    Dim ws As Worksheet
    For Each ws In Worksheets
        ws.Protect "edc1"
    Next
End Sub

без аргумента ключа password.
Это сработало в моем Excel 2007.

Кстати, обязательно скопируйте / вставьте пароль илиУбедитесь, что последний символ является ли 1 (один) или l (строчная буква L).

0 голосов
/ 24 ноября 2011

Действительно ли Ws.Unprotect защищает лист? - непристойно снимает защиту с листа, не устанавливает защиту

чтобы установить защиту в макросе, почему бы не записать защиту листа и взглянуть на код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...