2016-12-05 110 views
1

更大宏的一部分涉及检测和删除在将工作表移动/复制到主工作簿时无意中复制的命名范围。这些“损坏的”命名范围由名称管理器中的“值”列表示,显示“#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路径。

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

+1

它对我来说工作得很好,说从测试文件中删除了7个破损范围。也许检查'#REF'的单元格值可能会起作用。 – ballsy26

+0

Whhaaatt。我正在运行Excel 2013,这可能是一个问题吗?我看到InStr已经有过去的变化,但不知道这是否与此有关。裁判!是由于包含名为范围错误的主题的文件的路径,因为该文件不存在。 –

+0

我正在运行Excel 2010,作为一个测试尝试创建一个新的范围,然后删除整个行,所以创建一个'#REF'错误,然后运行您的代码。如果它有效,那么你会知道它与文件路径错误有关。 – ballsy26

回答

1

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

IsError(NR.RefersToRange) 

可能是一个很好的方法来检查命名的范围?