2

我正在尝试根据另一个单元格的内容为一个单元格设置列表验证,使用一个命名范围,该范围将我的数据输入表上的单元格内容与工作表上的范围相匹配Validation(请参阅此 SO question)。命名范围的公式为:

=OFFSET(validation!$B$1,MATCH(INDIRECT(ADDRESS(CELL("row"),CELL("col")-2)),validation!$A:$A,0)-1,0,COUNTIF(validation!$A:$A,INDIRECT(ADDRESS(CELL("row"),CELL("col")-2))),1)

问题是,如果引用的单元格ADDRESS(CELL("row"),CELL("col")-2)为空,则使用 VBA 设置验证Range.Validation.Add会出现错误:

Application-defined or object-defined error

然后它不会将验证添加到单元格中。我可以在Validation.Add通话中进行任何类型的错误处理以确保设置验证吗?或者一种修改命名范围公式的方法,以便即使内容ADDRESS(CELL("row"),CELL("col")-2)不返回工作validation表上的匹配项,它也会输出一个值?

4

1 回答 1

0

作为解决方法,请尝试以下操作:

  1. 修改ValList命名范围以引用简单范围。
  2. 设置验证。
  3. 将“ValList”恢复为原始参考。

有点笨拙,但它似乎工作。

Sub SetVal()
    Dim s As String

    s = ActiveWorkbook.Names("ValList").RefersTo
    ActiveWorkbook.Names("ValList").RefersTo = "=UserEntry!$A$3:$A$6"

    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=ValList"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

    ThisWorkbook.Names("ValList").RefersTo = s
End Sub
于 2012-05-19T22:05:40.830 回答