2016-12-05 130 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) 

可能是一個很好的方法來檢查命名的範圍?