【发布时间】:2016-08-10 06:04:20
【问题描述】:
我对工作表进行了密码保护,并且我想在打开时验证密码没有被用户更改过。
我已尝试通过 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
我的代码解释:
上述代码循环遍历工作簿中的所有工作表,并通过使用原始密码取消对当前工作表的保护来检查工作表保护密码是否已更改。
然后它使用原始密码保护工作表,以防止其不受保护。 (如果当前密码与原始密码不同,则不会引发错误,并且此步骤不会发生任何事情。)
如果代码无法取消对工作表的保护,则会引发错误,并且会出现一个消息框,让我知道该工作表上的密码已更改。
在评估下一个工作表以确定哪些工作表仍具有正确密码之前,我将错误计数重置为零。
我要问的是,这可以在不必取消保护工作表的情况下完成吗?
【问题讨论】:
-
您说您尝试查看它是否出错,但没有成功?如果您未保护工作表,您是如何尝试的,如果密码不同,它应该会出错。
-
没有。没有任何属性/方法可以返回工作表密码,以便您可以将其与另一个字符串匹配。
Worksheet.Password,它会很酷,但违反密码的整个概念:) -
谢谢@cyboashu,这就是我一直在寻找的答案,我没有其他方法可以检查它。