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

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

我试图使用下面的macros删除这些命名的范围:

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,没有命名范围被删除。 我玩过保护/解除保护和InStr一些参数,但没有任何工作。

附注 – NR.Value的退货不是#REF! 或类似的错误代码,但实际上是=C:\Blahblah\blarg.xlspath。

任何帮助,将不胜感激,谢谢!

我不认为错误代码作为范围值存在(不是我在这方面的权威)。 如果有效范围的错误不是#REF! 这可能是一个问题,但我觉得像

 IsError(NR.RefersToRange) 

可能是一个好方法来检查命名的范围是否有缺陷?