我在工作表中有一个范围,我想检查用户输入不同工作表的不同单元格的值是否在该范围内。如果该值不在该范围内(即,用户输入的值不正确),我想标记一个测试字段以警告用户。我这样做是为了更大的验证功能的一部分。
如果值在范围内,则此方法有效,但如果不在,则该函数会抛出错误(不提示我)并退出
Public Function ValidateField(dataValue as Range) as Integer
Dim result As Variant
Dim sheet As Worksheet
Dim range As range
Set sheet = ActiveWorkbook.Sheets("Menu")
Set range = sheet.range("BC141:BD175")
result = WorksheetFunction.VLookup(CDec(dataValue), range, 1, False)
'this does not work
If InStr(CStr(result), "Error") > 0 Or result = "" Then
ValidateField = 1
Exit Function
End If
If CDec(result) <> CDec(dataValue) Then
ValidateField = 1
Exit Function
End If
End Function
答案 0 :(得分:0)
改为使用
'~~> Check if `CDec(dataValue)` exists in Column BC
If Application.WorksheetFunction.CountIf(Rng.Columns(1), CDec(dataValue)) = 0 Then
'
'~~> Not Found... Do Something
'
Exit Function
End If
这将在
之前result = WorksheetFunction.VLookup(CDec(dataValue), range, 1, False)
顺便说一下,我注意到了一些事情。您在1
中使用Vlookup
。如果您只是想检查值是否在Col BC
中,那么您不需要Vlookup
。您可以将CountIf
用于此目的。