Excel 在VBA中使用vLookUp调用IfError将返回错误,即使单元格公式返回值也是如此

Excel 在VBA中使用vLookUp调用IfError将返回错误,即使单元格公式返回值也是如此,excel,vba,vlookup,Excel,Vba,Vlookup,我使用ifError和vLookUp在一个大表中查找值,并从一个特定列中提取一个值,将其放在另一个工作表的特定单元格中 这是我的当前代码,用于从第9列开始,从第D列开始绘制数值,并将其放入另一个工作表的单元格B14中 Sheet3.Range("B14").Value = Application.IfError(Application.VLookup(Sheet3.Range("B4"), Sheet2.Range("D5:CU530"), 9, False), "Not Found") 此代

我使用
ifError
vLookUp
在一个大表中查找值,并从一个特定列中提取一个值,将其放在另一个工作表的特定单元格中

这是我的当前代码,用于从第9列开始,从第D列开始绘制数值,并将其放入另一个工作表的单元格B14中

Sheet3.Range("B14").Value = Application.IfError(Application.VLookup(Sheet3.Range("B4"), Sheet2.Range("D5:CU530"), 9, False), "Not Found")
此代码为我返回“未找到”

使用类似的公式进行进一步测试,但直接放入随机单元格中,返回真实值。下面是使用的公式

=IFERROR(VLOOKUP(B4,'Sheet 2 Name'!D5:CU530,9,FALSE),"Not Found")
用于其他列(如第2/3/4列)的相同vba代码(如第一块引号所示)返回的是真值,而不是“未找到”,即使目标单元格是表3的B14

你知道为什么吗

编辑:更多信息 如果我在VBA中单独使用vLookUp(参见下一段代码),我可以得到真实值,但我需要IfError,因为在某些情况下找不到值

 Application.VLookup(Sheet3.Range("B4"), Sheet2.Range("D5:CU530"), 9, False)

您可以不使用
IfError
,而是在
Vlookup
之后执行
if语句

x = Application.VLookup(Sheet3.Range("B4"), Sheet2.Range("D5:CU530"), 9, False)

If IsError(x) Then
    Sheet3.Range("B14").Value = "Not found"
Else
    Sheet3.Range("B14").Value = x
End If
错误函数的使用

On Error Resume Next

ws.Range("B14").Value = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(ws.Range("B2").Value, ws.Range("E:F"), 1, False), "No error")

我相信错误可能存在于vlookup部分,vlookup是一个更老的代码部分(即旧版本的VB),如果可以的话,我真的鼓励使用索引匹配组合,因为它在您寻找的内容中更具体(更高效)

这里有一个关于索引信息的链接

和匹配


希望这有帮助

实际上,您的第一段代码是
Sheet3.Range(“B14”).Value
,因此您将其放入
B14
而不是
B4
啊,我的错,打字错误。我希望它在B14。代码对我来说很好。Maaay查看
应用程序.IfError
+
应用程序.VLookup
(就像在同一个命令中使用
应用程序
对象两次一样)导致错误,但我不知道原因。作为一种解决方法,我建议运行
VLOOKUP
,但不运行
IFERROR
,然后检查是否有错误。嗯,这很奇怪,因为在其他单元格中,我调用相同的命令,但只是从另一列而不是第9列收集数据,它正在工作。我会继续排除故障,并在这里更新帖子。不过,谢谢你的建议,谢谢。也许这与预期返回的值有关。您能告诉我们从第9列返回的值是多少吗。不知何故,
VLookup
似乎返回了正确的值,但第9列中的值被
IfError
函数视为错误。嗯,这可能是另一种选择!谢谢我还是想弄明白为什么它不起作用。。