如何检查单元格是否无效,如果单元格无效则设置默认值?

时间:2014-04-08 01:20:28

标签: vba excel-vba excel

我有一个单元格,其列表验证具有命名范围。我想要做的是:检查单元格的当前内容是否违反其验证,如果是,则将单元格设置为命名范围列表中的第一个值。这是我到目前为止所尝试的内容:

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))

OnCallGroupRegionalGroupFunctionGroup都是静态范围,例如OnCallGroup是:

=Selections!$S$2:$S$7

1 个答案:

答案 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