我有1个登录的用户表单,称为“ LoginForm”,还有3个附加的用户表单,即“ AMForm”,“ FMForm”和“ HRMForm”,如果用户的详细信息正确,则会打开。存在3个电子表格“ AMChoices”,“ FMChoices”和“ HRMChoices”,其中3个其他用户表单的内容记录在相关电子表格中,即FMForm记录在FMChoices中。 要指定用户,如果他们的凭据被接受,他们的UserID将显示在相关电子表格中。例如,如果用户表单为“ AMForm”,则其用户ID将输入到“ AMChoices”(从B3开始)的B列中的下一个可用单元格中。由于有多个用户登录,它将进入下一个空行。
我拥有的代码运行完美。但是,在每个用户窗体“ AMForm”,“ FMForm”和“ HRMForm”上,都有一个“退出”按钮。因此,我希望它删除最近输入的用户ID。
我该如何编码?我已经输入了用于从LoginForm将用户ID输入到电子表格中的代码。请让我知道:)
Private Sub btnAMLogout_Click()
If MsgBox("Are you sure you want to quit? Press Yes to proceed and No to cancel.", vbYesNo) = vbYes Then
Unload Me
End If
End Sub
If aCell.Offset(, 4) = "SBUB10" Then
AMForm.Show
With Worksheets("AMChoices")
LastRow = .Range("B" & .Rows.CountLarge).End(xlUp).Row + 1
If LastRow < 3 Then LastRow = 3
.Cells(LastRow, "b") = WorksheetFunction.Proper(ID)
End With
答案 0 :(得分:1)
您显示的代码片段将ID写入工作表。要删除它,您需要找到它并清空它所在的单元格。此操作可以在调用Unload Me
之前或之后执行。您需要对代码进行一些修改:
Private Sub btnAMLogout_Click()
If MsgBox("Are you sure ...", vbYesNo) = vbYes Then
Unload Me
' Let's say the new code goes here. The last ID (whichever it is) will be removed.
With Worksheets("AMChoices")
LastRow = .Range("B" & .Rows.CountLarge).End(xlUp).Row ' no need for: + 1
If LastRow < 3 Then Exit Sub ' no need for: LastRow = 3
.Cells(LastRow, "b") = "" ' no need for: WorksheetFunction.Proper(ID)
End With
End If
End Sub
现在,由于您提到了多个用户,因此可能会稍微复杂一些,因为您需要找到具有相关ID(可能不是最后一个ID)的单元格,然后将其删除。 “删除”可能只是清空该单元格(如上)或删除该单元格的整行,或者其他内容-我不十分了解您的情况以至于无法确定。
无论如何,要查找该ID在“ B:B”列中的最后一次出现,您需要测试该列中的单元格是否具有该ID,从最后一个单元格开始,然后向上移动一次,像
For i = LastRow to 3 Step -1
If .Cells(i, "B") = WorksheetFunction.Proper(ID) Then
.Rows(i).Delete
Exit For
End If
Next
我希望这会有所帮助。