我正在尝试使用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
答案 0 :(得分:0)
原始建议的解决方案是以下自定义公式:
"=OR(NOT(ISERROR(MATCH("&Target.Address&","&strRange&",0))),IFERROR(AND(INT("&Target.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))"