作为一个新手,我真的很坚持这一点,很乐意任何人都能提供的帮助。
我正在尝试在IF语句中使用VLookup,但是由于VLookup返回#N / A以获得否定结果,因此If语句无法识别出该错误并且会出错,而不是继续进行操作。
Public Const ParametersAssembly = "TabDocumentPath|strFrameworkPath|FrameworkFullPath|FrameworkAllFile|AssembliesPath|FrameworkTabs|SaveAsExtension|CopyTabsBefore"
Public Const ElementSeparator = "|"
vList = Split(ParameterList, ElementSeparator, -1, vbTextCompare)
For Each vParameter In vList
If Application.WorksheetFunction.VLookup(vParameter, Worksheets("Configuration").Range("A:E"), 1, False) <> vParameter Then
MsgBox vParameter " does not exist in range"
End If
Next vParameter
我目前正在搜索范围A:E中的第一列。这可能就足够了。是否可以在没有单独的VLookup的情况下检查A:E范围内的每一列?
再次感谢您对此的任何帮助。
谢谢!
答案 0 :(得分:4)
如果您打算评估结果,请不要使用工作表功能。使用Application.Vlookup返回一个变体,并在检查该值之前使用IsError进行测试。
这只是测试存在性,因此Application.Match会更高效,并且您只需要测试是否没有匹配项即可。
' ...
For Each vParameter In vList
If IsError(Application.Match(vParameter, Worksheets("Configuration").Range("A:A"), 0)) Then
MsgBox vParameter " does not exist in range"
End If
Next vParameter
' ...
答案 1 :(得分:1)
这是使用查找的一种方法。如果需要,您可以遍历各个列,但是在不了解要达到的目标的情况下,不确定是否有用。
Sub x()
Dim r As Range, vList
Public Const ParametersAssembly = "TabDocumentPath|strFrameworkPath|FrameworkFullPath|FrameworkAllFile|AssembliesPath|FrameworkTabs|SaveAsExtension|CopyTabsBefore"
Public Const ElementSeparator = "|"
vList = Split(ParameterList, ElementSeparator, -1, vbTextCompare)
For Each vParameter In vList
Set r = Worksheets("Configuration").Range("A:E").Find(What:=vParameter, LookAt:=xlWhole, _
MatchCase:=False, SearchFormat:=False)
If r Is Nothing Then
MsgBox vParameter & " does not exist in range"
End If
Next vParameter
End Sub