首页 > 解决方案 > VBA自定义密码保护超过1张

问题描述

我目前正在处理一个启用宏的 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"
Rhea = "Config_Rhea"

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
        Else
        Worksheets("Doors").Activate
        End If


End Select

Select Case Sh.Name
    Case Rhea

        Dim pwdRhea As String
        pwdRhea = "rhea"

        Dim ResponseRhea As String
        ResponseRhea = InputBox("Enter password to view sheet")

        If Response = pwdRhea Then
            Sh.Select
        Else
        Worksheets("Doors").Activate
        End If


End Select

Application.EnableEvents = True

End Sub

标签: excelvba

解决方案


试一试。据我测试,更清洁且有效:

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

推荐阅读