设置和检查工作簿的密码

时间:2016-05-03 20:51:32

标签: vba excel-vba excel

我想创建并保护工作簿。

这就是我为保护做的事情:

Sub Protege()
    Dim f As Worksheet
    Dim mdp As String

    mdp = InputBox("mdp est ?")

    For Each f In ActiveWorkbook.Worksheets
        f.Protect mdp, True, True, True
    Next f
End Sub

现在,这就是我为取消保护此工作簿所做的工作:

Sub unprotected()
    Dim f As Worksheet

    For Each f In ActiveWorkbook.Worksheets
        f.Unprotect
    Next f
End Sub

但我想先检查密码。我的意思是输入密码,看看它是否与真实密码匹配。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您可以通过尝试验证密码并在执行此操作时捕获任何可能的错误:

Public Sub ProectSheet()

For Each ws In ThisWorkbook.Worksheets
    ws.Protect "pw"
Next ws

End Sub

Public Sub UnprotectSheets()

strPW = InputBox("PW?")
For Each ws In ThisWorkbook.Worksheets
    On Error GoTo WrongPassword
    ws.Unprotect strPW
Next ws
MsgBox "All sheets are now unprotected."

Exit Sub

WrongPassword:
    MsgBox "The password you entered is incorrect."
    Exit Sub

End Sub

答案 1 :(得分:1)

除了尝试使用该密码取消保护工作表之外,无法测试工作表密码。

只需执行f.Unprotect mdp,但如果mdp包含无效密码,则会出现运行时错误:

For Each f In ActiveWorkbook.Worksheets
    On Error Resume Next
        f.Unprotect mdp
        lngError = Err
    On Error GoTo 0
    If lngError <> 0 Then MsgBox "Mauvais mdp !"
Next f

如果您只想测试所提供的密码是否正确,但希望该表格仍然受到保护,您可以稍后再次保护:

For Each f In ActiveWorkbook.Worksheets
    On Error Resume Next
        f.Unprotect mdp
        lngError = Err
    On Error GoTo 0
    If lngError = 0 Then
        f.Protect mdp, True, True, True
    Else
        MsgBox "Mauvais mdp !"
    End If
Next f

请注意,尽管如此 - 正如评论中提到的马特的马克杯 - 存在无限匹配的密码,因为您只需要创建一个与原始密码具有相同哈希值的密码。这非常简单。

您永远不应期望对不知道密码的人进行表单保护。它很容易被规避。