我已经试着做了一两天了。通过一些基本的调试,我发现它没有找到引用的值,但我不知道为什么。我唯一能想到的是,我没有正确引用查找表,但每次我尝试引用它时,它都会返回相同的值。
我有两张工作表;数据库";以及";细节";。数据库有一个名为";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))
它现在工作正常。