2016-02-28 4 views
2

Я пытаюсь создать пользовательскую форму входа в vba, но он возвращает мне ошибку, указанную в названии. Итак, вот какой-то фон.Ошибка времени выполнения: невозможно получить свойство Vlookup класса WorksheetFunction

У меня есть лист под названием «User_List», в котором есть имя пользователя и связанный с ним пароль. Диапазон начинается от диапазона B3 до C1000. Столбец B имеет все имена пользователей, в то время как в столбце C есть пароли. Я хотел бы создать пользовательскую форму входа в систему, чтобы после ввода пользователем имени пользователя и пароля, vba будет искать список пользователей и определять, верны ли данные. Как только это подтвердится, vba направит пользователя на другой лист, называемый домашней страницей. Ниже мой код.

Private Sub MLIB_Click() 
Dim UserName As String 
Dim PassWord As String 

' MUN is the name of the textbox associated to the Username 
' MPW is the name of the textbox associated to the Password 
UserName = MUN.Value 
PassWord = MPW.Value 

If UserName = Application.WorksheetFunction.VLookup(UserName, Sheets("User_List").Range("B3:C1000"), 1, True) Then 
    If PassWord = Application.WorksheetFunction.VLookup(PassWord, Sheets("User_List").Range("B3:C1000"), 2, True) Then 
     Sheets("Home_Page").Activate 
     Unload Me 
    End If 
End If 
MsgBox "Sorry, Incorrect Login Details" 
End Sub 

Пробовал выяснять это, но это снимает возраст! Цените любую помощь!

ответ

3

Вы должны использовать ложные в качестве необязательного [range_lookup] параметра WorksheetFunction objectVLOOKUP function для точного совпадения по неупорядоченным данным.

Прежде всего, проверьте, существует ли указанное имя пользователя в столбце B с помощью быстрого MATCH function. Если он существует, проверьте, соответствует ли связанный пароль в столбце C тем же, что и указанный.

With Worksheets("User_List") 
    If Not IsError(Application.Match(UserName, .Columns(2), 0)) Then 
     If Password = Application.VLookup(UserName, .Range("B:C"), 2, False) Then 
      Worksheets("Home_Page").Activate 
      Unload Me 
     End If 
    End If 
End With 
MsgBox "Sorry, Incorrect Login Details" 

VBA является (по умолчанию) чувствительным к регистру, поэтому, если поиск имени пользователя не чувствителен к регистру, проверка пароля чувствительна к регистру. Скорее всего, это то, что вы хотите.

+0

Это дало мне ошибку - Ошибка времени выполнения «438» (объект не поддерживает это свойство или метод), и он выделил код ниже. Если Not IsError (Application.Match (UserName, .Column (2), 0)) Затем – Stu

+0

Мои извинения. Это должно быть '.Columns (2)', а не '.Column (2)'. – Jeeped

+0

Он отлично работает! Спасибо!! – Stu

Смежные вопросы