【问题标题】:Unable to get the vlookup to work无法让 vlookup 工作
【发布时间】:2015-04-29 22:43:00
【问题描述】:

我运行这组代码,它返回一个错误:

运行时错误“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

【问题讨论】:

  • 找不到该值时会出现此错误。
  • 代码有什么问题?政策详情表中有数据。 @GSerg
  • 那么该数据的第一列不包含您当前在policynum中拥有的内容。
  • 避免该错误的最简单的错误控制(相当于工作表上的#N/A)是将这一行放在它上面if cbool(application.countif(lookup_num.columns(1), policynum)) then _如果你想做的不仅仅是跳过它,你甚至可以写一个 Else 将错误发送到即时窗口或 msgbox。
  • 我制作了一张虚拟纸,并复制了您的代码,代码运行良好。尝试将“PolicyDetails”表中的“A”列复制到“Active”表中的“C”列,然后运行代码以测试它是否有效。

标签: vba excel


【解决方案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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 2014-12-26
    • 2017-12-22
    • 2012-02-28
    • 2015-12-01
    • 2012-01-29
    • 2014-12-16
    • 2013-04-19
    相关资源
    最近更新 更多