当员工当前login到excel vba时禁用loginbutton

员工login系统使用vba userform。 我可以捕获员工姓名和login时间,并将其放在工作表中。 但是,当前login的员工仍然可以login系统。 我想阻止它发生。

这是我的表单的截图。

[ 在这里输入图像说明 ]

码:

Dim CM As Boolean Private Sub cmdLogin_Click() With Worksheets("May_1st").Range("A65536").End(xlUp) .Offset(1, 0) = UserForm1.txtName.Value .Offset(1, 1) = UserForm1.txtEmpID.Value .Offset(1, 2) = UserForm1.txtTime.Value End With 'Unload Me 'Optional: Close Userform1 txtName.Value = "" txtEmpID.Value = "" txtEmpID.SetFocus End Sub Private Sub cmdLogOut_Click() 'Worksheets("May_1st").Range("D65536").End(xlUp).Offset(1) = Format(Now, "hh:mm:ss") 'Unload Me 'Optional: Close Userform On Where Logout Button Is Dim myLog As Worksheet Dim myLogSheet As Range Set myLog = Sheets("May_1st") Set myLogSheet = myLog.Range("B:B").Find(txtEmpID.Value, , , xlWhole) If Not myLogSheet Is Nothing Then myLogSheet.Offset(0, 2) = Format(Now, "hh:mm:ss") Else txtName.Value = "XXX" End If txtName.Value = "" txtEmpID.Value = "" txtEmpID.SetFocus End Sub Private Sub txtEmpID_Change() Dim mySheet As Worksheet Dim myRange As Range Set mySheet = Sheets("Emp_ID") Set myRange = mySheet.Range("B:B").Find(txtEmpID.Value, , , xlWhole) If Not myRange Is Nothing Then txtName.Value = myRange.Offset(0, -1) Else txtName.Value = "Match not found" End If End Sub Private Sub UserForm_activate() 'Do 'If CM = True Then Exit Sub 'txtTime = Format(Now, "hh:mm:ss") 'DoEvents 'Loop Do While CM = False UserForm1.txtTime = Format(Now, "hh:mm:ss") DoEvents Loop 'txtEmpID.SetFocus End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) CM = True End Sub 

有很多方法可以解决这个问题,但是他们需要了解如何以及何时显示login表单。 我会去解决这个问题,衡量这些选项:

  1. 为已login的用户创build和维护一个标志

    • 这样你可以把loginbutton变成灰色。 当游标焦点离开Emp_ID时,代码将会运行。 虽然这可能是计算量大,但这只是一个代码实现的问题。
  2. 为login和注销function创build另一个表单

    • 您可以提示用当前表单询问用户详细信息,点击下一步button打开下一个表单,您可以validation用户是否应该login或注销,并为用户提供相应的选项

您可以将login详细信息存储到任一个

  • 一个隐藏的表格
  • 范围名称
  • registry( SaveSettings
  • UserForm标签
  • 单独的txt文件等

然后检索细节作为您的代码的一部分。

build议你select最适合你的东西。