【发布时间】:2019-01-14 16:31:38
【问题描述】:
我设置了一个命名范围,我们称他为 RngIn。 他有 3 个单元格,他的地址指的是 A1:A3
接下来,我删除第 2 行。
我的 RngIn 现在显示 #REF!其 RefersTo 属性中的错误(正确): "=A1,Sheet1!#REF!,A2"
这意味着我无法使用 VBA 操作该命名范围的其余部分,因为全局对象的方法“范围”错误。
范围是在一个过程中创建的,如果用户随后出于某种原因需要删除一行,我未来的代码将失败,因为它需要知道命名范围数据的其余部分在哪里......
我已经尝试了很多方法来访问这个范围的剩余地址信息,在 VBA 中,但到目前为止都失败了,例如
Dim RngAddress As String
Dim RngIn As Range
Set RngIn = Range("A1:A3")
RngAddress = RngIn.Address
RngAddress = RngIn.RefersToRange.Address
RngAddress = RngIn.RefersTo
RngAddress = Replace(RngIn.Address, "Sheet1!#REF!", "")
我理想地希望在文本字符串中看到 RngIn 的结果是: “=A1,A2” 因为 A2 现在是 A3 中数据的位置。
【问题讨论】:
-
A3下面的数据多行吗?您可以重新定义命名范围。我使用 worksheet_change 事件来检测更改,获取新的最后一行并重新创建名称。类似 thisworkbook.names(“my name”).referstorange = mysheet.cells(1,1).resize(lastrow,1)
-
嘿,谢谢你的建议,但这行不通。我的范围不是连续的(单元格实际上不是 A1、A2、A3,而是更像 A70、A104、A106 等)。我应该在问题中更清楚地说明这一点!
标签: excel vba named-ranges