基于多个条件的验证

时间:2015-11-17 17:56:05

标签: excel vba validation

我正在尝试使用Excel。验证来根据两个条件验证字段:

1)值在范围内OR 2)值是整数。

当我尝试执行2.添加调用时,我收到编译错误 我开始认为我可能必须使用自定义公式。

有人可以帮助我使用自定义公式来检查该值是否在strRange范围内,还是1到256之间的数字?

ElseIf Target.Column >= BaseColIndex And Target.Column Mod 2 > 0 And Cells(10, Target.Column).Value <> "" Then
    strNormOper = Cells(10, Target.Column).Value
    strRange = IIf(strNormOper = "open", "$AC2:$AC5", "$AE2:$AE5")
    strValidation = "=" & Worksheets("Lookups").name & "!" & strRange
    With Target.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=strValidation
        .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="1", Formula2:="256"
        .IgnoreBlank = True
        .ErrorTitle = "Validation Error"
        .ErrorMessage = "Must be the opposite of 'Normal Operation' for this output Or a number in the range 1 To 256."
        .ShowError = True
    End With

1 个答案:

答案 0 :(得分:0)

原始建议的解决方案是以下自定义公式:

"=OR(NOT(ISERROR(MATCH("&Target.Address&","&strRange&",0))),IFERROR(AND(INT("&T‌​arget.Address&")="&Target.Address&","&Target.Address&">0,"&Target.Address&"<257),‌​0))"
Michaela扩展了她的解决方案:

strValidation = "=OR(NOT(ISERROR(MATCH(" & Target.Address & ", Lookups!" & strRange & ", 0))), IFERROR(ISNUMBER(INT(" & Cells(Target.row, Target.Column).Address & ")), FALSE))" 
编辑:我过去常常在上面,但后来想出了如何编辑你的答案以完全满足我的需求。问题是Target.Address是两个合并的单元格,因此值始终为空。以下使用(几乎)原始解决方案修复了它。

strValidation = "=OR(NOT(ISERROR(MATCH(" & Target.Address & ", Lookups!" & strRange & ", 0))), IFERROR(AND(INT(" & Cells(Target.row, Target.Column).Address & ") > 0, INT(" & Cells(Target.row, Target.Column).Address & ") < 257), FALSE))"