“无法获取WorksheetFunction类的VLookup属性”错误

时间:2013-10-09 19:05:58

标签: excel vba excel-vba vlookup

我正在尝试开发一个表单来跟踪发票进来。表单将有一个组合框,我可以点击并选择供应商编号。我希望文本框根据从组合框中选择的供应商编号自动填写。这是我到目前为止所做的:

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':无法获取WorksheetFunction类的VLookup属性

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:14)

尝试以下代码

我建议在使用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

OR

 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

答案 1 :(得分:3)

我遇到了同样的问题。似乎将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) 

或者,对于更短的方法,您只需使用Cdbl(<Value>)转换Vlookup函数中的类型。

所以最终会成为

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

听起来很奇怪,它适合我。

希望这有帮助。

答案 2 :(得分:2)

我刚用自己的程序遇到这个问题。我发现我搜索的值不在我的参考表中。我修复了我的参考表,然后错误就消失了。