2

我正在尝试使用 ListObject 中的一行中的值来验证单元格(列表类型验证)。当我在验证代码中使用命名范围时,它可以工作;但如果我将命名范围引用替换为ListObject引用,则会引发错误。

您可以使用 ListObject 来验证单元格吗?

这就是我正在做的使用命名范围的工作:

With Range("Table1[COL1]").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
    Formula1:="=DEPT_NAMES" ' where DEPT_NAMES is a manually created named range
    '[...] more stuff goes here
End With

但是,如果我替换 的值Formula1:=并让它指向一个有效的列表对象,如下所示:

Formula1:="=Table2[COL2]"

...我收到一个错误。我也尝试过通过 UI 执行此操作,但它不起作用。

您真的不能使用 ListObject 验证单元格吗?

4

2 回答 2

4

好问题。我认为两步过程对您有用:

  1. 创建一个命名范围定义为"=Table2[ROW2]"
  2. 将您的数据验证列表指向该命名范围。

这在 Excel 2010 中对我有用。数据验证列表随着表行的插入和删除而缩小和增长。

我对“Table2[ROW2]”这个名字有点困惑。就表格/列表对象和数据验证而言,列会更有意义。

于 2012-09-18T19:44:01.767 回答
1

在其他地方找到(https://blackatlascreative.com/blog/create-an-excel-data-validation-list-using-a-table/):

Formula1:="=INDIRECT(""Table2[COL2]"")"

添加INDIRECT是关键的区别。

于 2017-11-03T11:25:15.407 回答