Удаление значения ячейки, если выбрана кнопка «Выйти» - PullRequest
0 голосов
/ 05 января 2019

У меня есть 1 пользовательская форма для входа в систему под названием «LoginForm» и 3 дополнительные пользовательские формы «AMForm», «FMForm» и «HRMForm», которые открываются, если данные пользователя верны. Существуют 3 электронные таблицы «AMChoices», «FMChoices» и «HRMChoices», в которых содержимое 3 дополнительных пользовательских форм заносится в соответствующую электронную таблицу, т.е. FMForm в FMChoices. Чтобы указать пользователя, его UserID появляется в соответствующей электронной таблице, если его учетные данные приняты. Например, если это пользовательская форма «AMForm», их идентификатор пользователя вводится в следующую доступную ячейку в столбце B в «AMChoices» (начиная с B3). Поскольку в систему входят несколько пользователей, она входит в следующую пустую строку.

Код у меня отлично работает. Однако на каждой пользовательской форме «AMForm», «FMForm» и «HRMForm» есть кнопка «Выход». Поэтому я хочу удалить недавно введенный идентификатор пользователя.

Как я могу написать это? Я ввел код, который я использую для ввода идентификатора пользователя в электронную таблицу из LoginForm. Пожалуйста, дайте мне знать :)

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 голосов
/ 05 января 2019

Фрагмент кода, который вы показали, записывает идентификатор на лист. Чтобы удалить его, нужно найти его и очистить ячейку, в которой он находится. Это действие можно выполнить либо до вызова 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

Теперь, поскольку вы упомянули нескольких пользователей, это может быть немного сложнее, потому что вам нужно найти ячейку с соответствующим идентификатором (это может быть не последний!), А затем удалить ее. «Удаление» может быть просто опустошением ячейки (как указано выше) или удалением всей строки этой ячейки, или чем-то еще - я недостаточно хорошо знаю вашу ситуацию, чтобы сказать, что это такое.

В любом случае, чтобы найти последнее вхождение этого идентификатора в столбце «B: B», необходимо проверить ячейки в столбце, чтобы иметь этот идентификатор, начиная с последней и повышаясь, по одной ячейке за раз, что-то вроде

For i = LastRow to 3 Step -1 
    If .Cells(i, "B") = WorksheetFunction.Proper(ID) Then
        .Rows(i).Delete
        Exit For
    End If
Next

Я очень надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...