无法让vlookup工作

时间:2015-04-29 09:36:19

标签: vba excel-vba excel

我运行这组代码并返回错误:

运行时错误'1004'无法获取WorksheetFunction类的Vlookup属性。

我已经在另一个子例程中有一个vlookup。 这段代码有什么问题吗?我调试,错误出现在那里的策略框。

Sub LinkPolicyNum()
Dim r As Integer
Dim policynum As Variant
Dim lookup_num As Range
Dim policybox As Variant


    r = ActiveCell.Row
    'Row number of the Selected Cell

    policynum = ActiveSheet.Cells(r, 3).Value

    Set lookup_num = ThisWorkbook.Sheets("PolicyDetails").Range("a1:z5000")

    policybox = Application.WorksheetFunction.VLookup(policynum, lookup_num, 3, False)
    'to match the policy number to the policy details

    MsgBox policynum
    MsgBox policybox



End Sub

1 个答案:

答案 0 :(得分:1)

您的代码似乎没有任何问题。您正在查看使用WorksheetFunction版本的函数时发生的结果,但未返回任何结果。具体来说,它们会抛出错误并中断VBA的执行。在这种情况下,如果您在工作簿中而不是在VBA中尝试了相同的公式,则会出现某种形式的错误(可能是#N/A#VALUE!)。

如果您想阻止这种情况发生,最简单的方法是更改​​为使用Application.VLookup而不是Application.WorksheetFunction.VLookup。虽然没有Intellisense来帮助这个功能,但除了错误处理之外,它的行为与其他功能相同。如果函数的非WorksheetFunction版本有错误,它将返回错误而不是抛出错误。这允许您检查错误,然后继续使用您的代码。

如果您认为应该在VLOOKUP找到值,那么您可以开始检查文本/数字与其他类似内容之间的不匹配。我会检查公式而不是VBA。

以下是使用其他功能形式并捕获错误的示例。

Sub LinkPolicyNum()
    Dim r As Integer
    Dim policynum As Variant
    Dim lookup_num As Range
    Dim policybox As Variant

    r = ActiveCell.Row
    'Row number of the Selected Cell

    policynum = ActiveSheet.Cells(r, 3).Value

    Set lookup_num = ThisWorkbook.Sheets("PolicyDetails").Range("a1:z5000")

    policybox = Application.VLookup(policynum, lookup_num, 3, False)
    'to match the policy number to the policy details

    If IsError(policybox) Then
        'possibly do something with the "not found" case
    Else
        MsgBox policynum
        MsgBox policybox
    End If

End Sub

此问题的参考:http://dailydoseofexcel.com/archives/2004/09/24/the-worksheetfunction-method/