【问题标题】:What's wrong with using this named range for List validation?使用此命名范围进行列表验证有什么问题?
【发布时间】:2012-10-03 20:59:31
【问题描述】:

我有一列数据,随着时间的推移会添加更多的值。我想将此列的值用于另一个工作表上的列表验证,以便下拉选项反映该列的当前内容。我尝试使用以下公式创建一个命名范围ListColumn

=ADDRESS(3,12,1,1,"DataSource")&":"&ADDRESS(COUNTA('DataSource'!$L:$L),12,1,1,"DataSource") 

当我尝试为单元格添加验证时,选择允许:“列表”并在公式框中输入 =ListColumn,我收到以下错误消息:

The list source must be a delimited list, or a reference to a single row or column.

我尝试将整个公式包装在 INDIRECT() 中,虽然这没有在名称管理器屏幕上生成错误,但当我尝试添加验证时,我收到了以下错误消息:

The Source currently evaluates to an error.  Do you want to continue?

我不确定这里出了什么问题。两个 ADDRESS() 调用的第二个参数是相同的,因此范围地址应该引用单个列。如何设置我正在寻找的动态列表验证?

编辑:调试它会产生一些奇怪的行为。当我尝试使用 Range("ListColumn").Select 选择 ListColumn 时,我不断收到运行时错误。消息是“对象 '_Global' 的方法 'Range' 失败。”

输入=ListColumn 返回:'DataSource'!$L$3:'DataSource'!$L$65,这是预期值。

另外,当我输入公式=COUNTA(ListColumn) 时,它返回“1”,但当我输入公式=COUNTA('DataSource'!$L$3:'DataSource'!$L$65) 时,它返回正确的值“63”。 =COUNTA(INDIRECT(ListColumn)) 也返回“1”。

【问题讨论】:

  • 愚蠢的问题...当您选择ListColumn时,它是单行还是单列?
  • @DanielCook,.Select 不起作用,请参阅上面的编辑。

标签: excel validation worksheet-function


【解决方案1】:

我认为问题可能是在第二个 ADDRESS 块中包含 DataSource 作为文本表名称。在执行上述步骤时,我得到的行为与您完全相同,但它似乎适用于此:

=INDIRECT(ADDRESS(3,12,1,1,"DataSource")&":"&ADDRESS(COUNTA(DataSource!$L:$L),12,1,1))

然后,您可以完全按照上面所做的操作,并在下拉菜单中使用它。我最好的假设是,由于您已经在地址的第一部分定义了工作表,因此您不需要在第二部分提供它(如果这样做会导致错误)。如果您从程序的角度考虑它,这是有道理的(我认为:)),因为很难/不可能引用多张纸上的范围,因此语法可能不允许第二张纸是在冒号之后指定(即使相同)。这只是猜测(可能是错误的),所以希望解决方案有效:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多