我在受保护的工作表中有一个带有密码的ActiveX切换按钮。 当我想触发一个动作时,它确实需要取消保护工作表。
如果我使用VBA,通过右键单击工作表名称>> Protect Sheet ...手动插入的相同密码将无效。 反过来也是如此:如果我使用VBA保护工作表,那么我无法通过右键单击工作表名称>>保护工作表来手动取消保护...
这是我的代码:
Private Sub ToggleButton1_Click()
On Error GoTo Error_handler
psw = InputBox("please enter the password")
If ToggleButton1.Value = False Then
Worksheets("Multiregional").Unprotect Password = psw
ToggleButton1.BackColor = vbGreen
Call hide_columns 'this filters row and hides a few columns
Worksheets("Multiregional").Protect Password = psw, DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowFormattingColumns:=False, AllowFormattingRows:=False, _
AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
ElseIf ToggleButton1.Value = True Then
Worksheets("Multiregional").Unprotect Password = psw
ToggleButton1.BackColor = RGB(204, 204, 204)
Call show_everything 'this unhide and unfilter everything
Worksheets("Multiregional").Protect Password = psw, DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowFormattingColumns:=False, AllowFormattingRows:=False, _
AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End If
Exit Sub
Error_handler:
MsgBox Err.Description
End Sub
我尝试了这两种插入密码的方法,但两种方法都没有;
psw = InputBox("please enter the password")
然后Worksheets("Multiregional").Unprotect Password = psw
Worksheets("Multiregional").Unprotect Password = "xyz"
编辑:
什么不起作用是以与用于保护它的方法不同的方法取消保护(反之亦然),因为由于某种原因,通过VBA 输入相同的psw或手动似乎不被Excel识别为相同的字符串。这导致以下事实:
1)如果我通过VBA设置psw,我不能手动取消保护片材,相反,我不能
2)如果我手动设置psw,我就不能使用宏
在这两种情况下,错误消息都是psw不正确。
您之前有解决方案或遇到过同样的问题吗?
感谢大家的支持!
答案 0 :(得分:2)
从非常小的东西开始。例如。试试这个:
Public Sub TestMe()
Dim psw As String
psw = InputBox("please enter the password")
MsgBox psw 'to see what you have entered
If psw = "xyz" Then
Worksheets(1).Unprotect "xyz1"
Else
Worksheets(1).Protect "xyz1"
End If
End Sub
如果密码为xyz
,则取消保护,否则 - 保护。一旦这样做,您可以继续构建更多逻辑。
答案 1 :(得分:0)
我只是遇到了同样的问题,并以为我会分享我的发现。问题是,通过脚本保护/取消保护工作表时应使用冒号:
Worksheets("Multiregional").Protect Password = psw
Worksheets("Multiregional").Unprotect Password = psw
应该是
Worksheets("Multiregional").Protect Password := psw
Worksheets("Multiregional").Unprotect Password := psw