Скрыть листы на основе значения ячейки при входе в систему - PullRequest
0 голосов
/ 01 января 2019

Я создаю систему, использующую VBA, чтобы учащиеся выбирали свои классы в старшей школе.Пользователей приветствует пользовательская форма входа в систему «LoginForm» для входа в систему.Однако, поскольку их конфиденциальная информация хранится на листах «Информация об ученике», где хранится их информация и «Выбор AM» для выбора класса, я не хочу, чтобы студенты могли это увидеть.

Итак, код, который я написал, считывает их идентификатор пользователя и пароль из листа "studentinformation" и открывает форму пользователя "AMForm", если она верна.Я только хочу, чтобы логин администратора имел доступ к этим листам, и поэтому я хочу, чтобы все листы были скрыты от учащихся.Я установил значения в столбце G как «студент» для студентов или «админ» для администратора.Идея состоит в том, что если значение ячейки в столбце G равно «студент», две таблицы будут скрыты, но если это «admin», то листы будут видны и т. Д.

Я ввел ниже свой текущий код входа в систему.Спасибо за вашу помощь:)

Option Explicit

Private Sub btnLogin_Click()
    Dim RowNo As Long
    Dim ID As String, PW As String
    Dim WS As Worksheet
    Dim aCell As Range

    On Error GoTo ErrorHandler

    If Len(Trim(txtUser)) = 0 Then
        txtUser.SetFocus
        MsgBox "Error. UserID cannot be empty."
        Exit Sub
    End If

    If Len(Trim(txtPass)) = 0 Then
        txtPass.SetFocus
        MsgBox "Error. Password cannot be empty."
        Exit Sub
    End If
    Application.ScreenUpdating = False

    Set WS = Worksheets("StudentInformation")
    ID = LCase(Me.txtUser)

    Set aCell = WS.Columns(1).Find(What:=ID, LookIn:=xlValues, _
                                   LookAt:=xlWhole, _
                                   SearchOrder:=xlByRows, _
                                   SearchDirection:=xlNext, _
                                   MatchCase:=False, _
                                   SearchFormat:=False)

    If Not aCell Is Nothing Then
        RowNo = aCell.Row
        If Me.txtPass = aCell.Offset(, 1) Then
            MsgBox "Login Successful."
            Unload Me
        Else
            MsgBox "Incorrect UserID or Password. Please try again.", vbOKOnly
        End If

    Else
        MsgBox "Incorrect UserID or Password. Please try again.", vbOKOnly
    End If

    'Opening specific Userform
    If aCell.Offset(, 4) = "SBUB10" Then AMForm.Show
    If aCell.Offset(, 4) = "SBUB20" Then FMForm.Show
    If aCell.Offset(, 4) = "SBUB30" Then HRMForm.Show

CleanExit:
    Set WS = Nothing
    Application.ScreenUpdating = True
    Exit Sub
ErrorHandler:
    MsgBox Err.Description
    Resume CleanExit
End Sub

1 Ответ

0 голосов
/ 01 января 2019

Сначала не совсем понятная подсказка для пользователя.Не включайте кнопку входа, пока не будут выполнены все предварительные условия.Другими словами, где-то еще в вашем коде у вас есть

btnLogin.Enabled = Len(Trim(txtUser.Text)) > 0 And Len(Trim(txtPass.Text)) > 0

Чтобы решить свой вопрос , вы хотите установить WS.Hidden=xlVeryHidden.В связи с этим пароль защищает рабочую книгу и паролем, защищают IDE VBA.Используйте разные пароли для каждого.

Теперь у вас может быть макрос, который запрашивает пароль рабочей книги для обычного администрирования, но секретные данные могут быть скрыты только через VBA.

Другой аспектэто делается для повторной защиты книги на Workbook_Open (с паролем, конечно) и установки флажка UserInterfaceOnly:=True.Excel не сохраняет этот флаг при закрытии, поэтому его необходимо сбрасывать при каждом открытии книги.Этот флаг означает, что все ваши макросы могут выполнять свою работу без необходимости разблокировать листы (за исключением некоторых особых случаев).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...