Какие можно придумать способы массового удаления именованных диапазонов по условию?
Появилась необходимость почистить один файл. Через Thisworkbook.Names посчитал количество именованных диапазонов - 24 тысячи. Из них, если верить Thisworkbook.Names(Х).RefersTo, с битыми ссылками 19 тысяч - их и надо удалить, сохранив корректные. Отличаются по наличию "#REF!" в тексте (оно же "#ССЫЛКА").
Файл оказался забит некорректными именами, так как исторически в него добавлялись листы из других файлов. При использовании "перенести в другую книгу" переносится не только лист, но и все имена исходного файла. При этом, если заголовок исходного файла менялся, а из него в будущем снова добавляли листы (что и произошло) - в целевом файле появлялось множество имён с одинаковым названием.
Пробовал удалять имена по-одной с помощью VBA или из диспетчера именованных диапазонов с фильтром по некорректным ссылкам - работает критически долго, приходится прерывать. Пробовал открыть файл как архив, но внутри не нашёл, где лежат ссылки. Может, кто-то уже решал похожую проблему?
Всем привет и хорошего настроения!
Какие можно придумать способы массового удаления именованных диапазонов по условию?
Появилась необходимость почистить один файл. Через Thisworkbook.Names посчитал количество именованных диапазонов - 24 тысячи. Из них, если верить Thisworkbook.Names(Х).RefersTo, с битыми ссылками 19 тысяч - их и надо удалить, сохранив корректные. Отличаются по наличию "#REF!" в тексте (оно же "#ССЫЛКА").
Файл оказался забит некорректными именами, так как исторически в него добавлялись листы из других файлов. При использовании "перенести в другую книгу" переносится не только лист, но и все имена исходного файла. При этом, если заголовок исходного файла менялся, а из него в будущем снова добавляли листы (что и произошло) - в целевом файле появлялось множество имён с одинаковым названием.
Пробовал удалять имена по-одной с помощью VBA или из диспетчера именованных диапазонов с фильтром по некорректным ссылкам - работает критически долго, приходится прерывать. Пробовал открыть файл как архив, но внутри не нашёл, где лежат ссылки. Может, кто-то уже решал похожую проблему?Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Среда, 14.10.2015, 10:34
Sub УдалениеИмёнС_ошибками() For Each iName In ActiveWorkbook.Names If iName.RefersTo Like "*REF!*" Then ' MsgBox "Найдено ошибочное имя : " & IName.Name iName.Delete 'удаление имени End If Next End Sub
[/vba] Но столько ошибочных имен никогда не было - поэтому отрабатывал довольно быстро.
Sub УдалениеИмёнС_ошибками() For Each iName In ActiveWorkbook.Names If iName.RefersTo Like "*REF!*" Then ' MsgBox "Найдено ошибочное имя : " & IName.Name iName.Delete 'удаление имени End If Next End Sub
[/vba] Но столько ошибочных имен никогда не было - поэтому отрабатывал довольно быстро.
Коллега ставил компьютер на ночь и говорит, что не отработало. Сам проверить не могу. Я как раз твоим способом в начале попробовал, только через итератор.
Коллега ставил компьютер на ночь и говорит, что не отработало. Сам проверить не могу. Я как раз твоим способом в начале попробовал, только через итератор.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279