"Не удалось получить свойство VLookup класса WorksheetFunction"

Я пытаюсь разработать форму для отслеживания счетов-фактур по мере их поступления. Форма будет иметь combobox, где я могу щелкнуть и выбрать номер поставщика. Я хочу, чтобы текстовое поле автоматически заполнялось на основе номера поставщика, выбранного из выпадающего списка. Вот что я до сих пор:

Private Sub ComboBox1_Change()    
    'Vlookup when ComboBox1 is filled
    Me.TextBox1.Value = Application.WorksheetFunction.VLookup( _
        Me.ComboBox1.Value, Worksheets("Sheet3").Range("Names"), 2, False)    
End Sub

Рабочий лист 3, из которого выводится информация (номер и имя поставщика).

Когда я вернусь к форме для проверки кода, я получаю следующую ошибку:

Ошибка времени выполнения "1004": невозможно получить свойство VLookup класса WorksheetFunction

Как это исправить?

Ответ 1

Попробуйте ввести код

Я буду рекомендовать использовать обработчик ошибок при использовании vlookup, поскольку ошибка может возникнуть, если lookup_value не найден.

Private Sub ComboBox1_Change()


    On Error Resume Next
    Ret = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Worksheets("Sheet3").Range("Names"), 2, False)
    On Error GoTo 0

    If Ret <> "" Then MsgBox Ret


End Sub

ИЛИ

 On Error Resume Next

    Result = Application.VLookup(Me.ComboBox1.Value, Worksheets("Sheet3").Range("Names"), 2, False)

    If Result = "Error 2042" Then
        'nothing found
    ElseIf cell <> Result Then
        MsgBox cell.Value
    End If

    On Error GoTo 0

Ответ 2

У меня была такая же проблема. Кажется, что передача Me.ComboBox1.Value в качестве аргумента для функции Vlookup вызывает проблему. То, что я сделал, присваивало этому значению значение double, а затем помещало его в функцию Vlookup.

Dim x As Double
x = Me.ComboBox1.Value
Me.TextBox1.Value = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet3").Range("Names"), 2, False) 

Или, для более короткого метода, вы можете просто преобразовать тип в функцию Vlookup с помощью Cdbl(<Value>).

Итак, это будет

Me.TextBox1.Value = Application.WorksheetFunction.VLookup(Cdbl(Me.ComboBox1.Value), Worksheets("Sheet3").Range("Names"), 2, False) 

Как ни странно, это работает для меня.

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

Ответ 3

У меня была эта проблема с моей собственной программой. Я выяснил, что ценность, которую я искал, не была в моей справочной таблице. Я установил справочную таблицу, а затем ошибка исчезла.