使用间接引用时,动态命名范围不起作用
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 (和列),以确保你不会错过任何东西,设置数组的大小和根据关键词动态操作数据?我不知道用户将复制粘贴或您的实际意思......以上是关于使用间接引用时,动态命名范围不起作用的主要内容,如果未能解决你的问题,请参考以下文章