添加提示密码解锁特定单元格的第3个形状

时间:2015-05-04 15:48:27

标签: excel vba excel-vba

目前,我使用两种形状(一种标题为" Lock"另一种"解锁")来解锁/锁定工作簿中的单元格。这是代码:

要锁定的宏:

Sub ProtectAll()
Dim wSheet As Worksheet
Dim Pwd As String
Pwd = "passwordhere"
For Each wSheet In Worksheets
    wSheet.Protect Password:=Pwd, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
        AllowFormattingColumns:=True, AllowFormattingRows:=True
Next wSheet
ActiveWorkbook.Sheets("Master").Activate
End Sub

要解锁的宏:

Sub UnProtectAll()
Dim wSheet As Worksheet
Dim Pwd As String
Pwd = InputBox("Enter your password to unprotect all worksheets", "Password Input")
On Error Resume Next
For Each wSheet In Worksheets
    wSheet.Unprotect Password:=Pwd
Next wSheet
If Err <> 0 Then
    MsgBox "You have entered an incorrect password. All worksheets could not " & _
        "be unprotected.", vbCritical, "Incorrect Password"
End If
On Error GoTo 0
ActiveWorkbook.Sheets("Master").Activate
End Sub

我的问题是;如何添加第3和第4个形状,提示密码锁定/解锁多张纸上的特定单元格?目标是保持一切锁定,除了具有“价格”的单元格。用户可以在知道密码后进行更改。

&#39; price&#39;我尝试解锁的单元格位于J22:J163Sheet3Sheet14的{​​{1}}位置。任何想法如何做到这一点?

另一个可行的选项(我更喜欢上面的答案,但如果有人知道的话,这是可以接受的),如果用户被提示输入密码来解锁单元格Sheet29,如果他们试图更改任何单元格J22:J163中的单元格。

2 个答案:

答案 0 :(得分:1)

一种解决方案是使用单元格的锁定属性。一个例子如下。

Dim Password as String
Dim UserPassword as String
Password = "Password"
UserPassword = InputBox("Enter Password")
If UserPassword = Password Then
    ActiveSheet.Range("A1:A50").Locked = False
    ActiveSheet.Protect
Else 
    ActiveSheet.Range("A1:A50").Locked = True
End if

此代码的作用是将单元格A1到A50的锁定属性设置为false,这样当工作表受到保护时,仍可以编辑这些单元格。单元格的默认状态是锁定属性为true,因此除了您选择的范围外,工作簿中的每个单元格都应该是不可编辑的。但是,如果在您想要的范围之外的某些单元格中将锁定属性设置为false,那么它们也将是可编辑的。希望这会有所帮助。

答案 1 :(得分:0)

对上述内容并不完全是答案,但我最终使用了审核功能区下的excel内部“允许用户编辑范围”工具。工作得很好,所以当用户去更改某些单元格时,它会提示输入密码。

谢谢!