我有一个单元格,其列表验证具有命名范围。我想要做的是:检查单元格的当前内容是否违反其验证,如果是,则将单元格设置为命名范围列表中的第一个值。这是我到目前为止所尝试的内容:
Private Sub defaultIfInvalid(rng As Range)
Dim formula As String
formula = rng.Validation.Formula1
formula = Mid(formula, 2) 'remove the equal sign on the front
If Range(formula).Find(rng.value) Is Nothing Then
rng.value = Range(formula)(1).value
End If
End Sub
但这一行:
If Range(formula).Find(rng.value) Is Nothing
给出以下错误:
Method 'Range' of object '_Worksheet' failed
如何执行此检查/设置为默认值?
编辑:如果它有用,则验证是一个动态公式,它根据其中一个单元格的内容从几个不同的命名范围中进行选择。为清晰起见,在此处格式化:
=IF('On-Call Search Form'!$C$6="On-Call Contact",OnCallGroup,
IF(OR('On-Call Search Form'!$C$6="district",
'On-Call Search Form'!$C$6="division"),
RegionalGroup,FunctionGroup))
OnCallGroup
,RegionalGroup
和FunctionGroup
都是静态范围,例如OnCallGroup
是:
=Selections!$S$2:$S$7
答案 0 :(得分:1)
作为评论的后续内容,这个有效:
Dim formula As String
Dim rngNew As Range
formula = rng.Validation.Formula1
Set rngNew=Evaluate(formula)
If rngNew.Find(rng.value) Is Nothing Then
'do something
End If