如果选择了“退出”按钮,则删除单元格值

时间:2019-01-05 14:44:57

标签: excel vba excel-vba

我有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

1 个答案:

答案 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

我希望这会有所帮助。