Excel 基于多个标准的验证

Excel 基于多个标准的验证,excel,vba,validation,Excel,Vba,Validation,我正在尝试使用Excel.Validation根据两个标准验证字段: 1) 值在一个范围内或2)值为整数 我尝试执行2.Add调用时遇到编译错误 我开始觉得我可能不得不使用一个自定义公式 有人能帮我用一个自定义公式来检查值是在strRange范围内还是在1到256之间 ElseIf Target.Column >= BaseColIndex And Target.Column Mod 2 > 0 And Cells(10, Target.Column).Value <>

我正在尝试使用Excel.Validation根据两个标准验证字段:

1) 值在一个范围内或2)值为整数

我尝试执行2.Add调用时遇到编译错误 我开始觉得我可能不得不使用一个自定义公式

有人能帮我用一个自定义公式来检查值是在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
ElseIf Target.Column>=BaseColIndex和Target.Column Mod 2>0和单元格(10,Target.Column).Value“”然后
strNormOper=单元格(10,Target.Column).Value
strRange=IIf(strNormOper=“open”、“$AC2:$AC5”、“$AE2:$AE5”)
strValidation=“=”&工作表(“查找”)。名称&“!”&安排
使用Target.Validation
.删除
.Add类型:=xlValidateList,AlertStyle:=xlValidAlertStop,Formula1:=strValidation
.Add类型:=xlValidateWholeNumber,AlertStyle:=xlValidAlertStop,运算符:=xlBetween,公式1:=“1”,公式2:=“256”
.IgnoreBlank=True
.ErrorTitle=“验证错误”
.ErrorMessage=“必须与此输出的“正常操作”相反,或者是1到256范围内的数字。”
.ror=真
以

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

"=OR(NOT(ISERROR(MATCH("&Target.Address&","&strRange&",0))),IFERROR(AND(INT("&T‌​arget.Address&")="&Target.Address&","&Target.Address&">0,"&Target.Address&"<257),‌​0))"
编辑:我习惯于先编辑上面的内容,但后来想出了如何编辑你的答案以完全满足我的需要。问题在于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))"
strValidation=“=OR(非(iError(匹配(“&Target.Address&”,查找!”&strRange&“,0))),IFERROR(和(INT(“&Cells(Target.row,Target.Column)。Address&”)0,INT(“&Cells(Target.row,Target.Column)。Address&”<257),FALSE))”

我不得不同意-可能需要自定义公式。我的想法是这样的:
“=OR(不)(iError(匹配)(&Target.Address&“,&strRange&“,”&strRange&“,0)))、IFERROR(和(INT(&Target.Address&”)=“&Target.Address&”、“&Target.Address&>”、&Target.Address&>0),&Target.Address&“谢谢你,这个想法确实有帮助,由于我遗漏了几个细节,我不得不对它进行一些自定义。
strValidation=“=OR(iError(匹配)”(“&Target.Address&”,Lookups!”&strRange&“,0))),IFERROR(ISNUMBER(INT(&Cells(Target.row,Target.Column.Address&)”,FALSE))“
@Demetri您能添加您的建议作为答案吗?这样Michaela就可以将这篇文章标记为已回答了吗
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))"