Удалить разбитые именованные диапазоны в Excel с помощью VBA

Часть более крупного макроса включает в себя обнаружение и удаление именованных диапазонов, которые были непреднамеренно дублированы при перемещении / копировании листа в основную рабочую книгу. Эти "нарушенные" именованные диапазоны указываются в столбце "Значение" в менеджере имен, где отображается "#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, и именованные диапазоны не были удалены. Я играл с защитой / снятием защиты и некоторыми параметрами InStr, но ничего не сработало.

Примечание стороны - возвращение NR.Value это не #REF! или код ошибки, как и ожидалось, но на самом деле =C:\Blahblah\blarg.xls путь вместо

Любая помощь по этому вопросу будет принята с благодарностью, спасибо!

1 ответ

Я не думаю, что коды ошибок существуют как значения диапазона (не то, чтобы я был в этом авторитет). Если допустимые диапазоны имели ошибки, отличные от #REF! это может быть проблемой, но я думаю, что-то вроде

IsError(NR.RefersToRange)

Может быть, это хороший способ проверить, нет ли названных диапазонов?

Другие вопросы по тегам