【发布时间】:2023-03-11 06:09:01
【问题描述】:
我正在尝试设置一个用户定义的函数,该函数从单元格中获取值,然后验证该值是否也在不同工作表上的值范围内。它可能在两个不同的工作表上,查看哪个工作表取决于另一个单元格的值,即“范围”。
到目前为止,我已经设置了以下内容:
Function reviewFun(input As Range, scope As Range)
If scope.Value = "AAA" Then
If IsError(Application.WorksheetFunction.VLookup(input.Value, Sheet3.Range("B:B"), 1, 0)) Then
reviewFun = "PLEASE CHECK"
Else
reviewFun = "FINE"
End If
Else
If IsError(Application.WorksheetFunction.VLookup(input.Value, Sheet4.Range("B:B"), 1, 0)) Then
reviewFun = "PLEASE CHECK"
Else
reviewFun = "ALSO FINE"
End If
End If
End Function
但是,如果输入值在其他工作表上,它只会返回 #VALUE!而不是“请检查”。我该如何解决?我可以不使用 VLOOKUP 吗?
非常感谢!
编辑:
删除.WorksheetFunction 解决了问题,谢谢!
但是,我也有一个问题,如果input 或查找范围中的值之一是数字,它也会返回错误。
VBA 中有没有办法将某些内容作为字符串传递?我尝试了以下方法,但它不起作用。
IsError(Application.Match(input.Text, Sheet3.Range("B:B").Text, 0))
【问题讨论】:
-
使用
Application.VLookup,放弃WorksheetFunction。请注意,您也可以在这里使用Match或CountIf。 -
@BigBen - 如果我理解正确,您的建议会因为晚/早绑定而有效吗?你能提供参考或解释吗?我想了解为什么一个有效而另一个无效 - 谢谢
-
@JohnnieL- 查看来自 Mathieu Guindon 的 this recent article。或this answer.
-
Match或VLookup应该与数字一起使用。什么是无效的样本编号? -
在这种情况下是 168926103,但我认为问题在于,在一张纸上它被格式化为数字,而在另一张纸上却不是。
标签: excel vba user-defined-functions vlookup