使用vba userform的员工登录系统。 我可以捕获员工姓名和登录时间并将其放在工作表中。但是,当前登录的员工仍然可以登录系统。我想阻止它发生。
这是我表单的屏幕截图。
[]
代码:
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
答案 0 :(得分:0)
解决此问题的方法有很多,但它们取决于了解登录表单的显示方式和时间。我会考虑解决这个问题:
为已登录的用户创建并维护一个标记
为登录和退出功能创建另一个表单
答案 1 :(得分:0)
您可以将登录详细信息存储到
中sem_wait
)// initialization of semaphore
semaphore = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
sem_init(semaphore, 1, 0);
代码SaveSettings
文件等然后在代码中检索详细信息。
建议你挑选最适合自己的东西。