目前,我使用两种形状(一种标题为" 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:J163
和Sheet3
到Sheet14
的{{1}}位置。任何想法如何做到这一点?
另一个可行的选项(我更喜欢上面的答案,但如果有人知道的话,这是可以接受的),如果用户被提示输入密码来解锁单元格Sheet29
,如果他们试图更改任何单元格J22:J163
中的单元格。
答案 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内部“允许用户编辑范围”工具。工作得很好,所以当用户去更改某些单元格时,它会提示输入密码。
谢谢!