使用VBA在Excel中删除损坏的命名范围

时间:2016-12-05 21:59:16

标签: excel vba excel-vba macros

更大宏的一部分涉及检测和删除命名范围,这些命名范围在将工作表移动/复制到主工作簿时无意中重复。这些“损坏的”命名范围由名称管理器中显示“#REF!”的“值”列指示。

我尝试使用以下宏删除这些命名范围:

Sub DeleteBrokenNamedRanges()
Dim NR As Name
Dim numberDeleted As Variant

numberDeleted = 0
For Each NR In ActiveWorkbook.Names
    If InStr(NR.Value, "#REF!") > 0 Then
        NR.Delete
        numberDeleted = numberDeleted + 1
    End If
Next

MsgBox ("A total of " & numberDeleted & " broken Named Ranges deleted!")

End Sub

不幸的是,返回值为0并且没有删除命名范围。我使用了protect / unprotect和InStr的一些参数,但没有任何效果。

旁注 - NR.Value的回报不是#REF!或者类似的错误代码,但实际上是=C:\Blahblah\blarg.xls路径。

非常感谢任何有关这方面的帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

我不认为错误代码作为范围值存在(而不是我对此的任何权限)。如果有效范围有错误而不是#REF!这可能是一个问题,但我认为像

IsError(NR.RefersToRange)

可能是检查命名范围是否破损的好方法吗?