我想创建并保护工作簿。
这就是我为保护做的事情:
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
但我想先检查密码。我的意思是输入密码,看看它是否与真实密码匹配。
答案 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
请注意,尽管如此 - 正如评论中提到的马特的马克杯 - 存在无限匹配的密码,因为您只需要创建一个与原始密码具有相同哈希值的密码。这非常简单。
您永远不应期望对不知道密码的人进行表单保护。它很容易被规避。