Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выборочное удаление именованных диапазонов. - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Выборочное удаление именованных диапазонов.
Rioran Дата: Среда, 14.10.2015, 10:34 | Сообщение № 1
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Всем привет и хорошего настроения!

Какие можно придумать способы массового удаления именованных диапазонов по условию?

Появилась необходимость почистить один файл. Через Thisworkbook.Names посчитал количество именованных диапазонов - 24 тысячи. Из них, если верить Thisworkbook.Names(Х).RefersTo, с битыми ссылками 19 тысяч - их и надо удалить, сохранив корректные. Отличаются по наличию "#REF!" в тексте (оно же "#ССЫЛКА").

Файл оказался забит некорректными именами, так как исторически в него добавлялись листы из других файлов. При использовании "перенести в другую книгу" переносится не только лист, но и все имена исходного файла. При этом, если заголовок исходного файла менялся, а из него в будущем снова добавляли листы (что и произошло) - в целевом файле появлялось множество имён с одинаковым названием.

Пробовал удалять имена по-одной с помощью VBA или из диспетчера именованных диапазонов с фильтром по некорректным ссылкам - работает критически долго, приходится прерывать. Пробовал открыть файл как архив, но внутри не нашёл, где лежат ссылки. Может, кто-то уже решал похожую проблему?


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Среда, 14.10.2015, 10:34
 
Ответить
СообщениеВсем привет и хорошего настроения!

Какие можно придумать способы массового удаления именованных диапазонов по условию?

Появилась необходимость почистить один файл. Через Thisworkbook.Names посчитал количество именованных диапазонов - 24 тысячи. Из них, если верить Thisworkbook.Names(Х).RefersTo, с битыми ссылками 19 тысяч - их и надо удалить, сохранив корректные. Отличаются по наличию "#REF!" в тексте (оно же "#ССЫЛКА").

Файл оказался забит некорректными именами, так как исторически в него добавлялись листы из других файлов. При использовании "перенести в другую книгу" переносится не только лист, но и все имена исходного файла. При этом, если заголовок исходного файла менялся, а из него в будущем снова добавляли листы (что и произошло) - в целевом файле появлялось множество имён с одинаковым названием.

Пробовал удалять имена по-одной с помощью VBA или из диспетчера именованных диапазонов с фильтром по некорректным ссылкам - работает критически долго, приходится прерывать. Пробовал открыть файл как архив, но внутри не нашёл, где лежат ссылки. Может, кто-то уже решал похожую проблему?

Автор - Rioran
Дата добавления - 14.10.2015 в 10:34
SLAVICK Дата: Среда, 14.10.2015, 10:57 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Я удаляю простым перебором:
[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]
Но столько ошибочных имен никогда не было :o - поэтому отрабатывал довольно быстро.

работает критически долго

Это сколько? долго - понятие растяжимое yes


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 14.10.2015, 11:24
 
Ответить
СообщениеЯ удаляю простым перебором:
[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]
Но столько ошибочных имен никогда не было :o - поэтому отрабатывал довольно быстро.

работает критически долго

Это сколько? долго - понятие растяжимое yes

Автор - SLAVICK
Дата добавления - 14.10.2015 в 10:57
Rioran Дата: Среда, 14.10.2015, 11:21 | Сообщение № 3
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
SLAVICK, привет)

Это сколько? долго - понятие растяжимое

Коллега ставил компьютер на ночь и говорит, что не отработало. Сам проверить не могу. Я как раз твоим способом в начале попробовал, только через итератор.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеSLAVICK, привет)

Это сколько? долго - понятие растяжимое

Коллега ставил компьютер на ночь и говорит, что не отработало. Сам проверить не могу. Я как раз твоим способом в начале попробовал, только через итератор.

Автор - Rioran
Дата добавления - 14.10.2015 в 11:21
SLAVICK Дата: Среда, 14.10.2015, 11:25 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
еще можно расковырять книгу:
xl\workbook.xml

[vba]
Код
- <definedNames>
  <definedName name="new">#REF!</definedName>
   </definedNames>
[/vba]

Такие имена можно например через VBA удалить как с текстового файла. ;)

ЗЫ
книга должна быть в формате xlsx, xlsm


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 14.10.2015, 11:29
 
Ответить
Сообщениееще можно расковырять книгу:
xl\workbook.xml

[vba]
Код
- <definedNames>
  <definedName name="new">#REF!</definedName>
   </definedNames>
[/vba]

Такие имена можно например через VBA удалить как с текстового файла. ;)

ЗЫ
книга должна быть в формате xlsx, xlsm

Автор - SLAVICK
Дата добавления - 14.10.2015 в 11:25
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!