使用VBA在Excel中删除损坏的命名范围
问题描述:
更大宏的一部分涉及检测和删除在将工作表移动/复制到主工作簿时无意中复制的命名范围。这些“损坏的”命名范围由名称管理器中的“值”列表示,显示“#REF!”。使用VBA在Excel中删除损坏的命名范围
我已经尝试使用下面的宏这些命名范围的缺失:
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.xls
路径。
任何帮助,将不胜感激,谢谢!
答
我不认为错误代码作为范围值存在(不是我对此有任何权威)。如果有效范围的错误不是#REF!这可能是一个问题,但我认为像
IsError(NR.RefersToRange)
可能是一个很好的方法来检查命名的范围?
它对我来说工作得很好,说从测试文件中删除了7个破损范围。也许检查'#REF'的单元格值可能会起作用。 – ballsy26
Whhaaatt。我正在运行Excel 2013,这可能是一个问题吗?我看到InStr已经有过去的变化,但不知道这是否与此有关。裁判!是由于包含名为范围错误的主题的文件的路径,因为该文件不存在。 –
我正在运行Excel 2010,作为一个测试尝试创建一个新的范围,然后删除整个行,所以创建一个'#REF'错误,然后运行您的代码。如果它有效,那么你会知道它与文件路径错误有关。 – ballsy26