Как защитить книгу Excel с помощью VBA? - PullRequest
7 голосов
/ 11 сентября 2010

С помощью триггера, похожего на флажок, я хочу защитить свою рабочую книгу.Я пробовал Excel 2003:

thisworkbook.protect("password",true,true)

thisworkbook.unprotect("password")

Не работает.Есть предложения?

Ответы [ 3 ]

7 голосов
/ 11 сентября 2010

Я согласен с @Richard Morgan ... то, что вы делаете, должно работать, поэтому может потребоваться больше информации.

Microsoft предлагает несколько вариантов защиты ваших таблиц Excel 2003 .

Вот немного больше информации ...

Из файлов справки (метод защиты):

expression.Protect(Password, Structure, Windows)

выражение Обязательное. Выражение, которое возвращает объект Workbook.

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

Необязательный вариант структуры. Истинно для защиты структуры рабочей книги (относительное положение листов). Значением по умолчанию является False.

Необязательный вариант Windows. True для защиты окон рабочей книги. Если этот аргумент пропущен, окна не защищены.

ActiveWorkbook.Protect Password:="password", Structure:=True, Windows:=True

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

Sub ProtectSheet()
    ActiveSheet.Protect "password", True, True
End Sub

Sub UnProtectSheet()
    ActiveSheet.Unprotect "password"
End Sub

Sub protectAll()
    Dim myCount
    Dim i
    myCount = Application.Sheets.Count
    Sheets(1).Select
    For i = 1 To myCount
        ActiveSheet.Protect "password", true, true
        If i = myCount Then
            End
        End If
        ActiveSheet.Next.Select
    Next i
End Sub
1 голос
/ 16 июня 2014

Чтобы заблокировать открытие всей книги, в VBA может использоваться опция Thisworkbook.password.

Если вы хотите защитить рабочие листы, то сначала нужно заблокировать ячейки с помощью параметра Thisworkbook.sheets.cells.locked = True, а затем использовать параметр Thisworkbook.sheets.protect password:="pwd".

В основном ищите по этим ключевым словам: Thisworkbook.password или Thisworkbook.Sheets.Cells.Locked

1 голос
/ 14 сентября 2010
  1. в вашем примере кода вы должны снять скобки, потому что это не функциональное назначение;также по документальным причинам я бы предложил вам использовать обозначение := (см. пример кода ниже)

  2. Application.Thisworkbook относится к книге, содержащей код VBA, не обязательно к книге, содержащей данные, поэтому будьте осторожны.

Экспресс лист, над которым вы работаетекак объект листа и передайте его вместе с логической переменной следующему подпункту:

Sub SetProtectionMode(MySheet As Worksheet, ProtectionMode As Boolean)

    If ProtectionMode Then
        MySheet.Protect DrawingObjects:=True, Contents:=True, _
                        AllowSorting:=True, AllowFiltering:=True
    Else
        MySheet.Unprotect
    End If
End Sub

В методе .Protect вы можете определить, что вы хотите разрешить / запретить.Этот блок кода включает / выключает защиту - в этом примере без пароля вы можете добавить его в качестве параметра или жестко закодировать в Sub.В любом случае где-то PW будет жестко закодирован.Если вы не хотите этого, просто вызовите диалоговое окно «Защита» и позвольте пользователю решить, что делать:

Application.Dialogs(xlDialogProtectDocument).Show

Надеюсь, это поможет

Удачи - MikeD

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