Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel VBA自定义密码保护多张图纸_Excel_Vba - Fatal编程技术网

Excel VBA自定义密码保护多张图纸

Excel VBA自定义密码保护多张图纸,excel,vba,Excel,Vba,我目前正在处理一个启用宏的excel工作表,有多个选项卡(有9个选项卡我想这样做,但出于问题的目的,我只包括2个),对于每个选项卡,我想添加一个与我在代码中指定的内容相匹配的密码提示 这是正常的,但我的问题是,当两张工作表在“实际工作表”选项卡上彼此相邻时,它将同时检查这两张工作表,而不是隐藏第一张工作表,直到输入正确的密码 例如,在我的工作表上有一个名为Cascada的选项卡,后面是一个名为Cascada2的选项卡。如果我在这两者之间放置一个空白选项卡,那么我的代码将正常工作。但是,当它们按顺

我目前正在处理一个启用宏的excel工作表,有多个选项卡(有9个选项卡我想这样做,但出于问题的目的,我只包括2个),对于每个选项卡,我想添加一个与我在代码中指定的内容相匹配的密码提示

这是正常的,但我的问题是,当两张工作表在“实际工作表”选项卡上彼此相邻时,它将同时检查这两张工作表,而不是隐藏第一张工作表,直到输入正确的密码

例如,在我的工作表上有一个名为Cascada的选项卡,后面是一个名为Cascada2的选项卡。如果我在这两者之间放置一个空白选项卡,那么我的代码将正常工作。但是,当它们按顺序排列时,无论我输入的字符串是否正确,似乎都会按照密码提示的顺序排列

请参阅下面的代码,如有任何建议,将不胜感激

谢谢

用答案更新编辑


试试看。清洁剂和清洁剂在我测试时起作用:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    Application.EnableEvents = False

    Dim cascada As String, cascada2 As String
    cascada = "config_Cascada"
    cascada2 = "config_Cascada2"

    Select Case Sh.Name
        Case cascada, cascada2

            Dim pwd As String
            pwd = "cascada" & IIf(Sh.Name = cascada2, 2, "")

            Dim Response as String
            Response = InputBox("Enter password to view sheet")

            If Response = pwd Then
                Sh.Select
            End If

    End Select

    Application.EnableEvents = True

 End Sub

试试看。清洁剂和清洁剂在我测试时起作用:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    Application.EnableEvents = False

    Dim cascada As String, cascada2 As String
    cascada = "config_Cascada"
    cascada2 = "config_Cascada2"

    Select Case Sh.Name
        Case cascada, cascada2

            Dim pwd As String
            pwd = "cascada" & IIf(Sh.Name = cascada2, 2, "")

            Dim Response as String
            Response = InputBox("Enter password to view sheet")

            If Response = pwd Then
                Sh.Select
            End If

    End Select

    Application.EnableEvents = True

 End Sub

感谢您的回复,当您输入正确的密码时,您的代码可以完美地工作,但是如果您输入错误的密码,它似乎会完全删除工作表,即使在关闭和重新打开时,它仍然不存在。我不得不加载一个备份并测试了几次。我还想将其扩展到文档中的9张左右的表,这些表中并不都包含字符串cascada。谢谢,现在见。我做了一个小小的改变。没有必要隐藏/取消隐藏表单OK谢谢,请参阅编辑的作品。我在你的代码中添加了一段代码,如果他们输入了错误的密码,会将我重定向到“主页”,我现在最不想做的就是将其缩放到我在开篇文章中提到的9张左右的表单。例如,我可以有另一个名为“config_KitDrws”的选项卡,我希望其密码为“KitDrws”。最好的方法是什么?要分离我的案例陈述并添加我想要的每个密码?我回答了自己一点,请参阅OP以获取解决方案,不确定这是否是最佳实践,但它工作得很好。@Macca424-通过您所做的,您毁掉了整个SO体验。您提出了一个问题,然后用自己的答案编辑您的问题。这对后面的人毫无帮助。除此之外,您还为原始问题添加了功能,因此本质上是添加了一个问题。最后,如果提供的答案回答了您的问题,最好将其标记为已回答。感谢您的回答,当输入正确的密码时,您的代码可以完美地工作,但是如果输入错误的密码,它似乎会完全删除工作表,即使在关闭和重新打开时,它仍然不存在。我不得不加载一个备份并测试了几次。我还想将其扩展到文档中的9张左右的表,这些表中并不都包含字符串cascada。谢谢,现在见。我做了一个小小的改变。没有必要隐藏/取消隐藏表单OK谢谢,请参阅编辑的作品。我在你的代码中添加了一段代码,如果他们输入了错误的密码,会将我重定向到“主页”,我现在最不想做的就是将其缩放到我在开篇文章中提到的9张左右的表单。例如,我可以有另一个名为“config_KitDrws”的选项卡,我希望其密码为“KitDrws”。最好的方法是什么?要分离我的案例陈述并添加我想要的每个密码?我回答了自己一点,请参阅OP以获取解决方案,不确定这是否是最佳实践,但它工作得很好。@Macca424-通过您所做的,您毁掉了整个SO体验。您提出了一个问题,然后用自己的答案编辑您的问题。这对后面的人毫无帮助。除此之外,您还为原始问题添加了功能,因此本质上是添加了一个问题。最后,如果提供的答案回答了您的问题,最好将其标记为已回答。