密码VBA与手动输入的密码不匹配

时间:2018-05-07 11:01:39

标签: excel vba excel-vba

我在受保护的工作表中有一个带有密码的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"
  • 中输入psw

编辑:

什么不起作用是以与用于保护它的方法不同的方法取消保护(反之亦然),因为由于某种原因,通过VBA 输入相同的psw或手动似乎不被Excel识别为相同的字符串。这导致以下事实:
1)如果我通过VBA设置psw,我不能手动取消保护片材,相反,我不能 2)如果我手动设置psw,我就不能使用宏 在这两种情况下,错误消息都是psw不正确。

您之前有解决方案或遇到过同样的问题吗?

感谢大家的支持!

2 个答案:

答案 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