Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA密码与手动键入的密码不匹配_Vba_Excel - Fatal编程技术网

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

VBA密码与手动键入的密码不匹配,vba,excel,Vba,Excel,我在带有密码的受保护工作表中有一个ActiveX切换按钮。 当我想要触发一个动作时,它确实需要取消对工作表的保护 发生的情况是,通过右键单击工作表名称>>保护工作表手动插入的相同密码。。。如果使用VBA,则不起作用。 反过来也是如此:如果我使用VBA保护工作表,则无法通过右键单击工作表名称>>保护工作表来手动取消保护 这是我的密码: Private Sub ToggleButton1_Click() On Error GoTo Error_handler psw = InputBox("ple

我在带有密码的受保护工作表中有一个ActiveX切换按钮。 当我想要触发一个动作时,它确实需要取消对工作表的保护

发生的情况是,通过右键单击工作表名称>>保护工作表手动插入的相同密码。。。如果使用VBA,则不起作用。
反过来也是如此:如果我使用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(“请输入密码”)
    ,然后使用工作表(“多区域”)。取消保护密码=psw
  • 在代码
    工作表(“多区域”)中键入psw。取消密码保护=“xyz”
编辑:

不起作用的是,使用与用于保护工作表的方法不同的方法解除工作表的保护(反之亦然),因为出于某种原因,通过VBA或手动输入的相同psw似乎未被Excel识别为相同的字符串。这导致:
1) 如果通过VBA设置psw,则无法手动取消对图纸的保护,反之,
2) 如果手动设置psw,则无法使用宏。
在这两种情况下,错误消息都是psw不正确

您是否有解决方案或以前遇到过相同的问题


提前感谢大家的支持

从非常小的事情开始。例如,试试这个:

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
则取消保护,否则为-protect。一旦这样做了,你就可以继续构建进一步的逻辑了。

我也遇到了同样的问题,我想与大家分享我的发现。问题是,通过脚本保护/取消保护工作表时应使用冒号:

Worksheets("Multiregional").Protect Password = psw
Worksheets("Multiregional").Unprotect Password = psw
应该是

Worksheets("Multiregional").Protect Password := psw
Worksheets("Multiregional").Unprotect Password := psw

谢谢Vityata的回复,但我认为我没有很好地解释问题是什么。上面的宏工作正常,即它执行列的隐藏/取消隐藏。我在原来的帖子中添加了一个解释,它可能会澄清这个问题。@Ema-我明白了。如果你只使用我答案中的代码会发生什么。在此之后,您是否能够手动保护/取消保护工作表?除英语外,您是否使用多个键盘布局?它的工作原理是,我可以手动或通过VBA来保护/取消保护工作表-尽管这没有链接到单击事件。但我也注意到,它使用除“xyz”之外的任何psw保护工作表,这可能会导致用户无法再在工作表上工作…@Ema-您可以随时玩一些游戏。现在,如果密码不是
xyz
,而是其他任何内容,则将其设置为
xyz1
。用户需要手动给出
xyz
。一般来说,这取决于您希望遵循的业务逻辑。@Vitayta,问题已解决:我复制了所有值并重新编写了相同的代码,它可以完全正常工作,在手动或通过VBA保护/取消保护时没有问题。可能是因为该文件是在旧版本的Excel中生成的?