Ввод значения ячейки на основе значения текстового поля в пользовательской форме - PullRequest
0 голосов
/ 05 января 2019

У меня есть одна пользовательская форма "LoginForm" и одна электронная таблица "AMChoices".

При вводе данных для входа в систему пользователь вводит свой идентификатор пользователя в текстовое поле "txtUser" в форме LoginForm. Когда запись принята, AMForm открывается. Я хочу, чтобы их идентификатор пользователя отображался в ячейке B3 в «AMChoices», если их учетные данные приняты. Поскольку в систему входят несколько пользователей, я хочу, чтобы она была введена в следующую пустую строку.

Как я могу написать это? Пожалуйста, дайте мне знать.

Private Sub btnLogin_Click()
Dim RowNo As Long
Dim ID As String, PW As String
Dim WS As Worksheet
Dim aCell As Range

On Error GoTo ErrorHandler

If Len(Trim(txtUser)) = 0 Then
    txtUser.SetFocus
    MsgBox "Error. UserID cannot be empty."
    Exit Sub
End If

If Len(Trim(txtPass)) = 0 Then
    txtPass.SetFocus
    MsgBox "Error. Password cannot be empty."
    Exit Sub
End If

Application.ScreenUpdating = False

Set WS = Worksheets("StudentInformation")
ID = LCase(Me.txtUser)

Set aCell = WS.Columns(1).Find(What:=ID, LookIn:=xlValues, _
            LookAt:=xlWhole, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False)

If Not aCell Is Nothing Then
    RowNo = aCell.Row
    If Me.txtPass = aCell.Offset(, 1) Then
        MsgBox "Login Successful."
        Unload Me
    Else
        MsgBox "Incorrect UserID or Password. Please try again.", vbOKOnly
    End If

Else
    MsgBox "Incorrect UserID or Password. Please try again.", vbOKOnly
End If

'Opening specific Userform
If aCell.Offset(, 4) = "SBUB10" Then AMForm.Show
If aCell.Offset(, 4) = "SBUB20" Then FMForm.Show
If aCell.Offset(, 4) = "SBUB30" Then HRMForm.Show



CleanExit:
Set WS = Nothing
Application.ScreenUpdating = True
Exit Sub
ErrorHandler:
MsgBox err.Description
Resume CleanExit
End Sub

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Добавьте код ниже после открытия AMForm

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

Код ниже должен делать то, что вы хотите.

Dim R As Long

With Worksheets("AMChoices").Columns("B")
    R = 3
    Do While Len(.Cells(R).Value)
        R = R + 1
    Loop
    .Cells(R).Value = ID
End With

Лучшее место для его интеграции в существующий код должно быть непосредственно перед или сразу после сообщения об успешном входе в систему, за исключением объявления переменной, которое лучше в верхней части. Фактически, переменная RowNo больше не нужна в этот момент, и вы можете изменить ее назначение, чтобы заменить R в моем коде.

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