为不同用户分隔Excel用户表单标签

时间:2015-03-15 11:30:29

标签: excel vba excel-vba user-controls userform

我在工作表中有数据,这些数据是在用户注册到他选择的访问类型(作为学生或教授)时生成的。我有两个用户表单(frmStudent和frmProfessor)。我的问题是,如何在用户登录时更改用户表单的标题(名称,课程/部门,性别)。

示例:当用户123登录时,frmStudent会显示工作表中列出的相应名称,课程和性别,并显示在用户表单的标签中。 (frmStudent.lblname.caption将更改为“Bogart MAgnifico”,课程和性别也会更改。)或者如果user456登录frmProfessor显示并对标签执行相同操作。

此外,在注册期间,我让他们使用两个选项按钮选择他们想要的访问类型。我尝试过使用一个循环(我用作frmLogin,检查用户名和密码是否正确),但我似乎无法使其正常工作。

显示代码可能有所帮助。 请考虑我的问题,因为我是VBA的新手。

1 个答案:

答案 0 :(得分:0)

在我的虚拟工作簿中,我创造了这些东西:

  1. 在“Sheet1”中:第1行 - 2个用户的登录名;其他2行 - 他们的名字和姓氏。

    enter image description here

  2. 该按钮与此子项相关联:
  3. Sub Excel_login()
        UserForm1.Show
    End Sub
    

    该按钮用于调用UserForm1以输入登录名。如果正确,则显示UserForm2。

    enter image description here enter image description here

    1. 这是“确定”按钮下的代码:
    2. Private Sub CommandButton1_Click()
          Dim ws As Worksheet
          Set ws = ThisWorkbook.Worksheets("Sheet1")
      
          Select Case Me.TextBox1.Text
              Case ws.Range("A1").Value 'userABC
                  UserForm2.Caption = ws.Range("A1").Value
                  UserForm2.Label2.Caption = ws.Range("A2").Value
                  UserForm2.Label3.Caption = ws.Range("A3").Value
                  Me.Hide
                  UserForm2.Show
              Case ws.Range("B1").Value 'userDEF
                  UserForm2.Caption = ws.Range("B1").Value
                  UserForm2.Label2.Caption = ws.Range("B2").Value
                  UserForm2.Label3.Caption = ws.Range("B3").Value
                  Me.Hide
                  UserForm2.Show
              Case Else
                  MsgBox "Incorrect username."
                  Me.Hide
                  Exit Sub
          End Select
      
          Set ws = Nothing
      End Sub
      
      1. 如果用户成功登录,他会看到这两个表单中的一个具有不同的label和userForm标题,具体取决于用户:

        enter image description here enter image description here

      2. 修改

        为了不为每个新用户创建新的Case,您只需执行此操作:

        Dim i as long
        For i = 1 To ws.UsedRange.Columns.Count
            If ws.Cells(1, i).Value = Me.TextBox1.Text Then
                UserForm2.Caption = ws.Cells(1, i).Value
                UserForm2.Label2.Caption = ws.Cells(2, i).Value
                UserForm2.Label3.Caption = ws.Cells(3, i).Value
                Me.Hide
                UserForm2.Show
            Exit For
            End If
        Next