使用带有宏的Excel的员工登录系统。 员工将输入员工ID,然后在txtName中显示其姓名。如果他们点击登录按钮,我希望能够捕获登录时间并将其粘贴到Excel工作表中,然后在他们注销时反之亦然。
到目前为止,这是代码:
Dim CM As Boolean
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
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
CM = True
End Sub
答案 0 :(得分:1)
首先,我建议您对控件使用userform名称以避免可能的错误。其次,您可以使用do loop
而不使用if
,如下所示:
Do While CM = False
UserForm1.txtTime = Format(Now, "hh:mm:ss")
DoEvents
Loop
至于您的问题,以下是将值从文本框传递到工作表中最后一个空单元格的方法:
Private Sub CommandButton1_Click()
With Worksheets("Emp_ID").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
End Sub
当你说时我没有关注你,然后当他们退出时反之亦然“但如果你想记录注销时间,你也可以使用注销按钮(CommandButton2)做同样的事情):
Private Sub CommandButton2_Click()
Worksheets("Emp_ID").Range("D65536").End(xlUp).Offset(1) = Format(Now, "hh:mm:ss")
Unload Me 'Optional: Close Userform On Where Logout Button Is
End Sub
请记住,为了能够将文本框值传递给工作表单元格,应该打开userform。除非在关闭之前将它们传递给全局变量,否则无法从关闭的用户窗体传递值。