Пользовательская защита паролем VBA для более чем 1 листа - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время я работаю над таблицей 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

1 Ответ

0 голосов
/ 20 ноября 2018

Дайте этому шанс.Очиститель и работает, насколько я тестировал:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...