在登录时根据单元格值隐藏工作表

问题描述 投票:0回答:1

我正在建立一个使用VBA的系统,让学生在高中选择他们的课程。用户登录用户窗口“LoginForm”,用户可以登录。然而,由于他们的敏感信息存储在“学生信息”表中,其中包含他们的信息和“AMchoices”以供他们选择班级,我不希望学生能够看到这一点。

因此,我编写的代码从工作表“studentinformation”读取他们的用户ID和密码,如果正确则打开userform“AMForm”。我只希望管理员登录可以访问这些工作表,因此我希望从学生中隐藏所有工作表。我已将G列中的值设置为学生的“学生”或管理员的“admin”。我们的想法是,如果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
excel vba excel-vba
1个回答
1
投票

首先是一个偏离主题的用户体验提示。在满足所有前提条件之前,请勿启用登录按钮。换句话说,你的代码中的其他地方

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

要解决您的问题,您需要设置WS.Hidden=xlVeryHidden。与此同时,密码保护工作簿和密码保护VBA IDE。每个使用不同的密码。

您现在可以使用宏来请求正常管理的工作簿密码,但只能通过VBA取消隐藏敏感数据表。

另一方面是重新保护Workbook_Open上的工作簿(当然使用密码)并设置标志UserInterfaceOnly:=True。 Excel不会在关闭时保存此标志,因此每次打开工作簿时都必须重置它。此标志表示您的所有宏都可以在不必解锁工作表的情况下完成工作(在某些特殊情况下除外)。

© www.soinside.com 2019 - 2024. All rights reserved.