Текстовое поле пользовательской формы заполняется, если Vlookup находит информацию, относящуюся к вставленным номерам - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть пользовательская форма, где люди должны заполнять данные. Если данные уже существуют, когда они помещают информацию в DocumentTitleBox, другие текстовые поля должны автоматически заполняться.

Мой код работает с буквами, но не с цифрами.

Например, когда я ставлю «aaa», он возвращает значения vlookup. Но если я поставлю «123», он ничего не сделает, даже если для него есть vlookup.

Я не могу понять, почему. Это часть моего кода:

Private Sub DocumentTitleBox_Change()

On Error Resume Next
    Result = WorksheetFunction.VLookup(DocumentTitleBox.Value, Worksheets("example").Range("D:E"), 2, False)
    FIND = WorksheetFunction.VLookup(DocumentTitleBox.Value, Worksheets("example").Range("D:E"), 1, False)
On Error GoTo 0

If FIND = DocumentTitleBox.Value Then
    NameBox.Value = Result
End If

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Я всегда использую такие вещи. Можно почистить и все такое, но мне нравится гибкость, и я постоянно меняю вещи, так что это работает для меня.

Private Sub DocumentTitleBox_Change()

If IsNumeric(DocumentTitleBox.Value) Then
    ReturnRow = Application.IfError(Application.Match(DocumentTitleBox.Value + 0, Worksheets("example").Columns(4), 0), "Not Found")
    Find = Application.IfError(Application.Index(Worksheets("example").Columns(5), ReturnRow), "Not Present")
Else
    ReturnRow = Application.IfError(Application.Match(DocumentTitleBox.Value, Worksheets("example").Columns(4), 0), "Not Found")
    Find = Application.IfError(Application.Index(Worksheets("example").Columns(5), ReturnRow), "Not Present")
End If

If Not Find Like "Not Present" Then
    NameBox.Value = Find
Else
    NameBox.Value = ""
End If

End Sub

PS: я не знаю, как избежать странного поведения функций соответствия со строками / числа, так что я просто go с трюком +0 и IsNumeri c. Следует отметить чувствительность к регистру, отрегулируйте ее по мере необходимости, сейчас ее нет.

1 голос
/ 07 февраля 2020

Если DocumentTitleBox - текстовое поле, попробуйте использовать DocumentTitleBox.Text вместо DocumentTitleBox.Value.

...