清理有错误的命名范围地址(例如#REF!)
Clean up Named Range Addresses with Errors (e.g. #REF!)
我设置了一个命名范围,我们就叫他RngIn吧。
他有3个cell,他的地址是指A1:A3
接下来,我删除第 2 行。
我的 RngIn 现在显示 #REF! RefersTo 属性 中的错误(正确):
"=A1,Sheet1!#REF!,A2"
这意味着我无法使用 VBA 操作该命名范围的其余部分,因为全局对象的方法 'Range' 错误。
范围是在一个过程中创建的,如果用户随后出于任何原因需要删除一行,我未来的代码将失败,因为它需要知道其余命名范围数据在哪里...
我已经尝试了很多方法来访问这个范围的剩余地址信息,在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的数据所在的位置。
在这种情况下,我将命名范围的起点和终点设置为用户可以删除的范围上方的单元格和下方的单元格,然后使用 OFFSET 或 INDEX 函数调整该范围的大小排除我的书签。或者我使用 Excel 表,它可以处理行删除而不返回 #REF 错误。
不确定我是否理解得很好:您的示例代码没有使用定义名称(也称为命名范围)。
假设您创建了一个名为 RangeIn 的名称,它引用 A1、A3、A5,然后您删除了第 3 行。
RangeIn 的 RefersTo 现在是 =Sheet1!$A,Sheet1!#REF!,Sheet1!$A
此代码删除了 Sheet1!#REF!,留下引用 =Sheet1!$A,Sheet1!$A
的 Name RangeIn
Option Explicit
Option Compare Text
Sub ChangeRef()
Dim strAd As String
strAd = ThisWorkbook.Names("RangeIn").RefersTo
strAd = Replace(strAd, "Sheet1!#REF!,", "")
ThisWorkbook.Names("RangeIn").RefersTo = strAd
End Sub
我设置了一个命名范围,我们就叫他RngIn吧。 他有3个cell,他的地址是指A1:A3
接下来,我删除第 2 行。
我的 RngIn 现在显示 #REF! RefersTo 属性 中的错误(正确): "=A1,Sheet1!#REF!,A2"
这意味着我无法使用 VBA 操作该命名范围的其余部分,因为全局对象的方法 'Range' 错误。
范围是在一个过程中创建的,如果用户随后出于任何原因需要删除一行,我未来的代码将失败,因为它需要知道其余命名范围数据在哪里...
我已经尝试了很多方法来访问这个范围的剩余地址信息,在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的数据所在的位置。
在这种情况下,我将命名范围的起点和终点设置为用户可以删除的范围上方的单元格和下方的单元格,然后使用 OFFSET 或 INDEX 函数调整该范围的大小排除我的书签。或者我使用 Excel 表,它可以处理行删除而不返回 #REF 错误。
不确定我是否理解得很好:您的示例代码没有使用定义名称(也称为命名范围)。 假设您创建了一个名为 RangeIn 的名称,它引用 A1、A3、A5,然后您删除了第 3 行。
RangeIn 的 RefersTo 现在是 =Sheet1!$A,Sheet1!#REF!,Sheet1!$A
此代码删除了 Sheet1!#REF!,留下引用 =Sheet1!$A,Sheet1!$A
Option Explicit
Option Compare Text
Sub ChangeRef()
Dim strAd As String
strAd = ThisWorkbook.Names("RangeIn").RefersTo
strAd = Replace(strAd, "Sheet1!#REF!,", "")
ThisWorkbook.Names("RangeIn").RefersTo = strAd
End Sub