使用间接引用时,动态命名范围不起作用

Posted

技术标签:

【中文标题】使用间接引用时,动态命名范围不起作用【英文标题】:Dynamic named range not working when referred with indirect 【发布时间】:2012-05-08 04:11:54 【问题描述】:

我的工作表中有一些动态命名范围。我使用以下公式使它们动态化:

=$A$1:rowend($A$1)

其中 row end 是一个自定义函数,它返回到达“A”行中的空单元格之前的最后一个单元格

命名范围命名如下:“iec_air” 还有另一个命名范围:“iec_ground”

现在的问题是,当我在单元格上应用数据验证并直接选择引用“iec_air”的列表时,它可以工作,但是当尝试使用间接(“iec_”&“air”)实现相同的事情时,它不起作用

当我的命名范围是静态的时它正在工作,而不是它不是。知道如何修复它吗?

【问题讨论】:

您能否创建一个引用=indirect("iec_"&"air") 的新名称并将新名称用作您的验证列表? 要使用动态范围,请参阅 :) contextures.com/xldataval02.html @SiddharthRout 我正在使用相同的技术。问题是如果我的验证列表是公式而不是静态引用,那么间接将不起作用 【参考方案1】:

你知道如何使用 VBA 吗? 您可以做的一件事是在工作表模块中创建一个事件,并根据空白单元格动态调整命名范围的大小。

例子

Sub setRangeDynamically()

dim oRange     as range

'Set range from cell(1,1) until the first blank cell downwards
set oRange = thisworkbook.sheets("blabla").range(cells(1,1),cells(1,1).end(xldown))
thisworkbook.Names.Add Name:="MyRange", RefersTo:=oRange 
end sub

创建数据验证:

With thisworkbook.sheets("BlaBla").range("B2").Validation 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="=MyRange" 
End With

【讨论】:

这将是正确的方法。动态命名范围和 INDIRECT() 公式不能很好地发挥作用,因此命名范围需要是静态的。通过这样的 VBA,您以不同的方式保留“动态”。 我知道这种方法,但是有大约 100 个命名范围,我对于为每个范围编写代码感到非常犹豫。 设置一个范围,使用 >.Cells.SpecialCells(xlCellTypeLastCell).row (和列),以确保你不会错过任何东西,设置数组的大小和根据关键词动态操作数据?我不知道用户将复制粘贴或您的实际意思......

以上是关于使用间接引用时,动态命名范围不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jquery验证动态表单输入的插件不起作用

在 COUNTIFS 中使用命名范围

当内部作用域不起作用时,为啥编译器不采用命名空间名称?

如果 AddField 引用“相同”列,则带有“--fake-initial”的 Django 迁移不起作用

Vue cli 3项目,图像路径中的动态src不起作用

Spring Boot/JPA:引用的保留字列名不起作用