excelvba&;表单中的UserForm登录名和密码VLOOKUP表
我一直试图让我的登录userform在根据工作簿中的表中的数据单击时登录,但我似乎无法正确获取代码 详情如下: Userform username textbox=username textbox Userform password textbox=PasswordTextbox 用户表单提交按钮=登录按钮 我的工作簿有许多工作表,其中一个是excelvba&;表单中的UserForm登录名和密码VLOOKUP表,vba,excel,userform,Vba,Excel,Userform,我一直试图让我的登录userform在根据工作簿中的表中的数据单击时登录,但我似乎无法正确获取代码 详情如下: Userform username textbox=username textbox Userform password textbox=PasswordTextbox 用户表单提交按钮=登录按钮 我的工作簿有许多工作表,其中一个是“用户”。在该表中,有一个名为“Users\u table”的表。该表有4列: ID(用户的个人ID)[A列] 用户名[列B] 密码[C列] 管理员(答案是
“用户”
。在该表中,有一个名为“Users\u table”
的表。该表有4列:
ID(用户的个人ID)[A列]
用户名[列B]
密码[C列]
管理员(答案是“真”或“假”,取决于他们是否拥有管理员权限)[D列]
我正在尝试这样做:
如果用户的用户名和密码正确,并且“管理员”列条目为False,则我想显示工作表“快速添加”
和“概述”
,我想将工作表“管理员”
隐藏(不是很隐蔽,因为我需要将此工作表上的数据用于其他宏),并使成为“用户”
工作表非常隐蔽,因此登录者无法查看其他用户的详细信息。但是对于那些正确输入用户名和密码并且admin列输入为True的用户,我想显示所有工作表
这就是我到目前为止所做的:
Private Sub LoginButton_Click()
Dim Username As String
Username = UsernameTextbox.Text
Dim password As String
Password = PasswordTextbox.Text
If IsNull(Me.UsernameTextbox) Or Me.UsernameTextbox = "" Then
MsgBox "You must enter your username.", vbOKOnly, "Required Data"
Me.UsernameTextbox.SetFocus
Exit Sub
End If
If IsNull(Me.PasswordTextbox) Or Me.PasswordTextbox = "" Then
MsgBox "You must enter your Password (case sensitive).", vbOKOnly, "Incomplete Entry"
Me.PasswordTextbox.SetFocus
Exit Sub
End If
Dim temp As String
On Error Resume Next
temp = WorksheetFunction.VLookup(Me.UsernameTextbox.Value, Worksheets("Users").Range("Users_Table"), 2, 0)
If Username = temp Then
Err.Clear
temp = ""
temp = WorksheetFunction.VLookup(Me.UsernameTextbox.Value, Worksheets("Users").Range("Users_Table"), 3, 0)
On Error Goto 0
If Password = temp Then
Sheets("Quick Add").Visible = xlSheetVisible
Sheets("Overview").Visible = xlSheetVisible
Sheets("Admin").Visible = xlSheetHidden 'This is now just Hidden and not VeryHidden since other macros need to use data on this sheet
Sheets("Users").Visible = xlVeryHidden
MsgBox "Password and Username Accepted. You are now Logged In."
'Unload Me
'Sheets("Quick Add").Select
'Range("A1").Select
Else
Sheets("Quick Add").Visible = xlVeryHidden
Sheets("Overview").Visible = xlVeryHidden
Sheets("Admin").Visible = xlVeryHidden
Sheets("Users").Visible = xlVeryHidden
MsgBox "Username and Password Combination Not Accepted"
End If
Else
Sheets("Quick Add").Visible = xlVeryHidden
Sheets("Overview").Visible = xlVeryHidden
Sheets("Admin").Visible = xlVeryHidden
Sheets("Users").Visible = xlVeryHidden
MsgBox "Invalid Username"
End If
End Sub
这适用于“Users\u Table”
中的第一个条目,但它不会识别其他条目的用户名(因此我不知道它是否识别用户的密码,因为它在初始用户名检查中失败)。你知道哪里出了问题吗?我也不确定我将如何着手添加上面提到的管理要求。我需要管理员(“Admin”
列中的“True”,即“Users\u Table”
中的D列)能够查看所有工作表;上面的代码仅供用户使用,显示“快速添加”
和“概述”
并隐藏“管理”
和“用户”
工作表
任何帮助都将不胜感激。谢谢大家!
你知道哪里出了问题吗
代码中有一些错误与您的描述不匹配
这里您将UsernameTextbox
与列A(ID
)匹配。用户名是否存在的测试应在B列而不是A列。如果将用户名匹配到用户名B列的ID
A列,则会出现相同的错误:
最好的方法是立即获取用户的行(如果存在),并从中获取所有属性
Private Sub LoginButton_Click()
' Get the user row or exit if not found
Dim r As Range
Set r = Worksheets("Users").Range("Users_Table").Columns(2) _
.Find(UsernameTextbox.text, , xlValues, xlWhole)
If r Is Nothing Then
MsgBox "username not found."
Me.UsernameTextbox.SetFocus
Exit Sub
End If
If Me.PasswordTextbox.Value <> r.Offset(, 1).Value2 Then
MsgBox "Wrong Password."
Me.PasswordTextbox.SetFocus
Exit Sub
End If
' So far user and password are ok
Dim isAdmin As Boolean: isAdmin = r.Offset(, 2).Value2
Sheets("Quick Add").Visible = xlSheetVisible
Sheets("Overview").Visible = xlSheetVisible
Sheets("Admin").Visible = IIf(isAdmin, xlSheetVisible, xlSheetHidden)
Sheets("Users").Visible = IIf(isAdmin, xlSheetVisible, xlSheetVeryHidden)
End Sub
Private子登录按钮点击()
'获取用户行,如果找不到,则退出
调光范围
设置r=工作表(“用户”).范围(“用户表”).列(2)_
.Find(UsernameTextbox.text、xlValues、xlWhole)
如果r什么都不是
MsgBox“未找到用户名。”
Me.UsernameTextbox.SetFocus
出口接头
如果结束
如果Me.PasswordTextbox.Value r.Offset(,1).Value2,则
MsgBox“密码错误。”
Me.PasswordTextbox.SetFocus
出口接头
如果结束
'到目前为止,用户和密码都正常
将isAdmin设置为布尔值:isAdmin=r.Offset(,2).Value2
图纸(“快速添加”).Visible=xlSheetVisible
图纸(“概述”)。可见=xlSheetVisible
工作表(“管理”).Visible=IIf(isAdmin、xlSheetVisible、xlSheetHidden)
表(“用户”)。可见=IIf(iAdmin、xlSheetVisible、xlSheetVeryHidden)
端接头
你把事情弄得很复杂。保持简单。试试这个(未经测试)
Private子登录按钮点击()
将用户名设置为字符串
将密码设置为字符串
将passWs设置为工作表
变暗rng As范围
将详细信息设置为布尔值
Username=UsernameTextbox.Text
password=PasswordTextbox.Text
如果Len(Trim(Username))=0,则
UsernameTextbox.SetFocus
MsgBox“请输入用户名”,vbOKOnly,“所需数据”
出口接头
如果结束
如果Len(Trim(password))=0,则
PasswordTextbox.SetFocus
MsgBox“请输入密码”,vbOKOnly,“输入不完整”
出口接头
如果结束
Set passWs=ThisWorkbook.Worksheets(“用户”)
带着passWs
lrow=.Range(“A”&.Rows.Count).End(xlUp).Row
对于i=1至lrow
如果UCase(Trim(.Range(“B”&i.Value))=UCase(Trim(Username)),则“Admin”为True
如果.Range(“D”&i).Value=“True”,则
'
“~~>做你想做的事
'
其他的
'
“~~>做你想做的事
'
如果结束
退出
如果结束
如果结束
接下来我
“~~>用户名/密码不正确
如果CorrectDetails=False,则
MsgBox“无效的用户名/密码”
如果结束
以
端接头
我的假设
在“用户”表中,B列有用户名,C列有密码,D列有管理员值。。如果没有,请根据需要修改上述代码。!正是我需要的。非常感谢。非常感谢您花时间回复。你的答案很有效,但我同意Siddharth Rout的答案,因为他们的代码更加精简。我会继续和他们一起玩,看看哪一个效果最好。再次感谢。
temp = WorksheetFunction.VLookup(Me.UsernameTextbox.Value, _
Worksheets("Users").Range("Users_Table"), 3, 0)
Private Sub LoginButton_Click()
' Get the user row or exit if not found
Dim r As Range
Set r = Worksheets("Users").Range("Users_Table").Columns(2) _
.Find(UsernameTextbox.text, , xlValues, xlWhole)
If r Is Nothing Then
MsgBox "username not found."
Me.UsernameTextbox.SetFocus
Exit Sub
End If
If Me.PasswordTextbox.Value <> r.Offset(, 1).Value2 Then
MsgBox "Wrong Password."
Me.PasswordTextbox.SetFocus
Exit Sub
End If
' So far user and password are ok
Dim isAdmin As Boolean: isAdmin = r.Offset(, 2).Value2
Sheets("Quick Add").Visible = xlSheetVisible
Sheets("Overview").Visible = xlSheetVisible
Sheets("Admin").Visible = IIf(isAdmin, xlSheetVisible, xlSheetHidden)
Sheets("Users").Visible = IIf(isAdmin, xlSheetVisible, xlSheetVeryHidden)
End Sub
Private Sub LoginButton_Click()
Dim Username As String
Dim password As String
Dim passWs As Worksheet
Dim rng As Range
Dim CorrectDetails As Boolean
Username = UsernameTextbox.Text
password = PasswordTextbox.Text
If Len(Trim(Username)) = 0 Then
UsernameTextbox.SetFocus
MsgBox "Please enter the username", vbOKOnly, "Required Data"
Exit Sub
End If
If Len(Trim(password)) = 0 Then
PasswordTextbox.SetFocus
MsgBox "Please enter the password", vbOKOnly, "Incomplete Entry"
Exit Sub
End If
Set passWs = ThisWorkbook.Worksheets("Users")
With passWs
lrow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 1 To lrow
If UCase(Trim(.Range("B" & i).Value)) = UCase(Trim(Username)) Then '<~~ Username Check
If .Range("C" & i).Value = password Then '<~~ Password Check
CorrectDetails = True
'~~> Admin is True
If .Range("D" & i).Value = "True" Then
'
'~~> Do what you want
'
Else
'
'~~> Do what you want
'
End If
Exit For
End If
End If
Next i
'~~> Incorrect Username/Password
If CorrectDetails = False Then
MsgBox "Invalid Username/Password"
End If
End With
End Sub