VBA Vlookup找不到匹配项,错误2042



我已经试着做了一两天了。通过一些基本的调试,我发现它没有找到引用的值,但我不知道为什么。我唯一能想到的是,我没有正确引用查找表,但每次我尝试引用它时,它都会返回相同的值。

我有两张工作表;数据库";以及";细节";。数据库有一个名为";Client_ Function;Details有一个数据透视表,其中包含所有原始数据(名称和类别(。我想在选择具有名称vlookup的数据透视表中的单元格时,显示详细信息工作表中单个项目的扩展数据。由于透视表由直接从表中提取的数据组成,我知道查找值是存在的。这是我的密码。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 4 Then
On Error Resume Next
Range("C2") = Application.WorksheetFunction.VLookup(Target.Text, Worksheets("Database").Range("Client_Function"), 2, 0)

If Err.Number <> 0 Then
MsgBox Err.Number & " " & Err.Description
End If
Else
Range("C2") = ""
End If
End Sub

我尝试过Target.Text和Target.Value(在调试时似乎都返回了正确的值(。我以前尝试过将查找值(Target.Text&Target.value(存储到一个变量中,然后使用该变量作为查找值。我还尝试了不同的方法来引用数据库工作表中的表,但似乎都不起作用。我还尝试将函数的返回值存储到变量中,而不是直接存储到单元格中。

我想知道数据透视表是否会导致一些问题,尽管我不这么认为,因为查找值是正确的。

2042是#N/A错误,这意味着找不到值。请注意,查找是在查找表的第一列中执行的!!

解决此问题的策略:

  • 使用VBA将target.Text写入工作表单元格
  • 然后手动构建以该单元作为查找的Vlookup
  • 对工作簿中的公式进行故障排除,直到得到预期结果

#N/A错误的唯一原因是找不到查找值。最常见的原因是前导/尾随空格和文本而不是数字。

如果target.Text来自数据透视表,您可能需要检查它是否包含前导或尾随空格,这些空格由数据透视表用来缩进内容。

还要检查查找值和查找表的第一列是否为相同的数据类型。如果数据表在Client_Function范围的第一列中包含数字,则数据透视表可能已将其转换为文本。target.Text肯定会返回文本,而不是数字,因此您可能需要在执行查找之前将值转换回数字。

最后,如果查找表的查找值在第一列以外的其他列中,则可能需要使用Xlookup而不是Vlookup,并指定查找列。

由于我的数据将在另一列中,我实际上只是切换到了INDEX MATCH调用。

类似于:

Range("C2") = WorksheetFunction.Index(Worksheets("Database").Range("Client_Function[Version]"), WorksheetFunction.Match(Target.Text, Worksheets("Database").Range("Client_Function[Predefined Call]"), 0))

它现在工作正常。

最新更新