代码之家  ›  专栏  ›  技术社区  ›  jfgoodhew1

清除有错误的命名范围地址(例如,REF!)

  •  0
  • jfgoodhew1  · 技术社区  · 7 年前

    我建立了一个命名范围,我们叫他RNGIN吧。 他有3个牢房,地址是A1:A3

    接下来,我删除第2行。

    我的RNGIN现在显示裁判!referesto属性错误(正确): “= A1,SeET1!当然!,“A2”

    这意味着,由于全局对象错误的“range”方法,我无法使用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中的数据的位置。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Charles Williams    7 年前

    不确定我是否理解这一点:您的示例代码不使用定义的名称(即命名范围)。 假设您创建了一个名为rangein的名称,它引用a1、a3、a5,然后删除第3行。

    兰金的裁判现在是 =Sheet1!$A$1,Sheet1!#REF!,Sheet1!$A$4

    此代码删除了工作表1!当然!,保留名称rangein引用 =Sheet1!$A$1,Sheet1!$A$4

    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
    
        2
  •  1
  •   jeffreyweir    7 年前

    在这种情况下,我将命名范围的起点和终点设置为上面的单元格和用户可以删除的范围下面的单元格,然后使用偏移或索引函数调整该范围的大小以排除书签。或者我使用Excel表,它可以处理行删除,而不返回ref错误。

    推荐文章