通过VBA验证工作表上的设置密码是否正确

时间:2016-08-10 06:04:20

标签: excel vba excel-vba

我密码保护了工作表,我想在打开时验证用户以后没有更改过密码。

我已经尝试在密码更改的工作表上通过VBA再次设置密码,以查看是否会出错但是没有提供错误。

以下代码是我目前用于测试它的代码并且它可以工作,但我认为您不应该取消保护工作表然后保护它以验证密码。

Sub CheckSheetPassword()
    Dim ws As Worksheet

    On Error Resume Next
    For Each ws In Worksheets
        ws.Unprotect Password:="Password"
        ws.Protect Password:="Password"
        If Err <> 0 Then
            MsgBox "Failed To Verify Password on: " & ws.Name
            Err = 0
        End If
    Next ws

End Sub

我的代码说明:

上面的代码循环遍历工作簿中的所有工作表,并通过使用原始密码取消保护当前工作表来检查工作表保护密码是否已更改。

然后使用原始密码保护工作表,以防止其保持不受保护。 (如果当前密码与原始密码不同,则不会抛出任何错误,此步骤也不会发生任何错误。)

如果代码无法取消保护工作表,那么它将抛出错误并显示一个消息框,让我知道该工作表上的密码已被更改。

在评估下一个工作表之前,我将错误计数重置为零,以确定哪些工作表仍具有正确的密码。

我要问的是,这可以在不必取消保护表单的情况下完成吗?

2 个答案:

答案 0 :(得分:1)

使用密码取消保护工作表后您可以验证工作表是否受保护。

以下是完整的代码:

Sub CheckSheetPassword()
    Dim ws As Worksheet

    On Error Resume Next
    For Each ws In Worksheets
        ws.Unprotect Password:="Password"
        If ws.ProtectContents = False Then
            ' The sheet is unprotected, so password hasn't changed
        Else
            ' The sheet is protected, so password has changed
            MsgBox "Failed To Verify Password on: " & ws.Name
        End If
    Next ws
End Sub

答案 1 :(得分:0)

在评论中回答了这个问题,说明我提出的方式是正确的。