Часть гораздо большего макроса включает обнаружение и удаление именных диапазонов, которые были непреднамеренно дублированы при перемещении/копировании листа в основную книгу. Эти «сломанные» именованные диапазоны обозначаются столбцом «Значение» в диспетчере имен, отображающим «#REF!».Удаление сломанных именных диапазонов в Excel с использованием VBA
Я попытался исключить из этих именованных диапазонов, используя следующий макрос:
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
.
Любая помощь на этом была бы весьма признательна, спасибо!
он отлично подходит для меня, говоря, что 7 сломанных диапазонов были удалены из тестового файла. Возможно, проверка значения ячейки для '# REF' может работать. – ballsy26
Whhaaatt. Я запускаю Excel 2013, может быть, это проблема? Я видел, что InStr имеет прошлые изменения, но не может сказать, связано ли это. #REF! связано с путём к файлу, содержащему тему с ошибкой диапазона, потому что файл не существует. –
Я запускаю excel 2010, в качестве теста попробуйте создать новый диапазон, а затем удалите всю строку, чтобы создать ошибку '# REF', а затем запустите свой код. Если это сработает, вы узнаете, что это связано с ошибкой пути к файлу. – ballsy26