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

Вход

Регистрация

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

 

= Мир MS Excel/Удалить все кроме нужных именованные диапазоны - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить все кроме нужных именованные диапазоны (Макросы/Sub)
Удалить все кроме нужных именованные диапазоны
Anis625 Дата: Четверг, 01.04.2021, 16:23 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 518
Репутация: 27 ±
Замечаний: 0% ±

Excel 2013
Добрый день, всем участникам форума!
Прошу оказать содействие в правки моего кода "Франкенштейна":
[vba]
Код
Sub DeleteExternalNames()
'отображаем скрытые имена
Dim nName As Name
For Each nName In ActiveWorkbook.Names
   nName.Visible = True
Next nName
'удаляем лишние имена
Dim n As Name
For Each n In Application.ActiveWorkbook.Names
    n.Delete
count = count + 1
Next n
MsgBox "Все имена в количестве " & count & " удалены"
End Sub
[/vba]
Этим кодом отображаю все скрытые имена и потом удаляю все именованные диапазона (т.к. при копировании листа всем известно что происходит с тысячами имен).
Но в некоторых файлах есть нужные именованные диапазоны (списки, умные таблицы, созданные в этой книге).
Попытался удалить только имена с ошибками:
[vba]
Код
For Each IName In ActiveWorkbook.Names
    If IName.RefersTo Like "*REF!*" Then
    IName.Delete 'удаление имени с ошибками
    End If
Next
[/vba]
Но остаются имена с внешними ссылками или системными (которые подтянулись из файлов 1С).
На одном из сайте нашел что можно сделать "Если n.referestorange существует, и если n.referstorange.worksheet.parent is thisworkbook, то не удалять", но не понял как это вкрутить в свой код.
Буду признателен за любой совет.
 
Ответить
СообщениеДобрый день, всем участникам форума!
Прошу оказать содействие в правки моего кода "Франкенштейна":
[vba]
Код
Sub DeleteExternalNames()
'отображаем скрытые имена
Dim nName As Name
For Each nName In ActiveWorkbook.Names
   nName.Visible = True
Next nName
'удаляем лишние имена
Dim n As Name
For Each n In Application.ActiveWorkbook.Names
    n.Delete
count = count + 1
Next n
MsgBox "Все имена в количестве " & count & " удалены"
End Sub
[/vba]
Этим кодом отображаю все скрытые имена и потом удаляю все именованные диапазона (т.к. при копировании листа всем известно что происходит с тысячами имен).
Но в некоторых файлах есть нужные именованные диапазоны (списки, умные таблицы, созданные в этой книге).
Попытался удалить только имена с ошибками:
[vba]
Код
For Each IName In ActiveWorkbook.Names
    If IName.RefersTo Like "*REF!*" Then
    IName.Delete 'удаление имени с ошибками
    End If
Next
[/vba]
Но остаются имена с внешними ссылками или системными (которые подтянулись из файлов 1С).
На одном из сайте нашел что можно сделать "Если n.referestorange существует, и если n.referstorange.worksheet.parent is thisworkbook, то не удалять", но не понял как это вкрутить в свой код.
Буду признателен за любой совет.

Автор - Anis625
Дата добавления - 01.04.2021 в 16:23
Anis625 Дата: Четверг, 01.04.2021, 16:33 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 518
Репутация: 27 ±
Замечаний: 0% ±

Excel 2013
Пустой файл с лишними именованными диапазонами весит почти метр. Сделал архив из двух файлов
К сообщению приложен файл: __--part1.rar(500.0 Kb) · __--part2.rar(363.5 Kb)
 
Ответить
СообщениеПустой файл с лишними именованными диапазонами весит почти метр. Сделал архив из двух файлов

Автор - Anis625
Дата добавления - 01.04.2021 в 16:33
Pelena Дата: Четверг, 01.04.2021, 18:49 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 17442
Репутация: 3875 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Попробуйте такой вариант, только сначала на копии файла)
[vba]
Код
Sub DeleteExternalNames()
'отображаем скрытые имена
    Dim nName As Name
    For Each nName In ThisWorkbook.Names
        nName.Visible = True
    Next nName
    'удаляем лишние имена
    Dim n As Name, count As Long
    On Error Resume Next
    For Each n In ThisWorkbook.Names
        If InStr(n.RefersTo, "#") > 0 Or InStr(n.RefersTo, "\\") > 0 Then
            n.Delete
            count = count + 1
        ElseIf Not n.RefersToRange.Worksheet.Parent Is ThisWorkbook Then
            n.Delete
            count = count + 1
        End If
    Next n
    MsgBox "Все имена в количестве " & count & " удалены"
End Sub
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеПопробуйте такой вариант, только сначала на копии файла)
[vba]
Код
Sub DeleteExternalNames()
'отображаем скрытые имена
    Dim nName As Name
    For Each nName In ThisWorkbook.Names
        nName.Visible = True
    Next nName
    'удаляем лишние имена
    Dim n As Name, count As Long
    On Error Resume Next
    For Each n In ThisWorkbook.Names
        If InStr(n.RefersTo, "#") > 0 Or InStr(n.RefersTo, "\\") > 0 Then
            n.Delete
            count = count + 1
        ElseIf Not n.RefersToRange.Worksheet.Parent Is ThisWorkbook Then
            n.Delete
            count = count + 1
        End If
    Next n
    MsgBox "Все имена в количестве " & count & " удалены"
End Sub
[/vba]

Автор - Pelena
Дата добавления - 01.04.2021 в 18:49
Anis625 Дата: Четверг, 01.04.2021, 20:16 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 518
Репутация: 27 ±
Замечаний: 0% ±

Excel 2013
Pelena,
Даже с решением. Спасибо Вам, попробую
 
Ответить
СообщениеPelena,
Даже с решением. Спасибо Вам, попробую

Автор - Anis625
Дата добавления - 01.04.2021 в 20:16
Anis625 Дата: Четверг, 01.04.2021, 21:30 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 518
Репутация: 27 ±
Замечаний: 0% ±

Excel 2013
Pelena,
Не срабатывает код. Буквально сразу после запуска выводится сообщение msgbox "Все имена в количестве 0 удалены"
Получается сразу отрабатывается строка[vba]
Код
On Error Resume Next
[/vba]


Сообщение отредактировал Anis625 - Четверг, 01.04.2021, 21:47
 
Ответить
СообщениеPelena,
Не срабатывает код. Буквально сразу после запуска выводится сообщение msgbox "Все имена в количестве 0 удалены"
Получается сразу отрабатывается строка[vba]
Код
On Error Resume Next
[/vba]

Автор - Anis625
Дата добавления - 01.04.2021 в 21:30
Pelena Дата: Четверг, 01.04.2021, 22:05 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 17442
Репутация: 3875 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Вот, что стало с Вашим файлом-примером, который
весит почти метр
после работы макроса. Как видите размер резко уменьшился
К сообщению приложен файл: __--.xlsm(27.4 Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеВот, что стало с Вашим файлом-примером, который
весит почти метр
после работы макроса. Как видите размер резко уменьшился

Автор - Pelena
Дата добавления - 01.04.2021 в 22:05
Anis625 Дата: Четверг, 01.04.2021, 22:26 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 518
Репутация: 27 ±
Замечаний: 0% ±

Excel 2013
Pelena,
Странное дело - поместил код в "Личную книгу макросов" не работает. Поместил в модуль книги - работает. Из-за чего может быть так?
На счет размера - согласен, что в этом и была причина такого веса, поэтому и пытался решить задачку.
 
Ответить
СообщениеPelena,
Странное дело - поместил код в "Личную книгу макросов" не работает. Поместил в модуль книги - работает. Из-за чего может быть так?
На счет размера - согласен, что в этом и была причина такого веса, поэтому и пытался решить задачку.

Автор - Anis625
Дата добавления - 01.04.2021 в 22:26
Pelena Дата: Четверг, 01.04.2021, 22:32 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 17442
Репутация: 3875 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Если в личной книге макросов, надо заменить ThisWorkbook на ActiveWorkbook


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЕсли в личной книге макросов, надо заменить ThisWorkbook на ActiveWorkbook

Автор - Pelena
Дата добавления - 01.04.2021 в 22:32
Anis625 Дата: Четверг, 01.04.2021, 22:40 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 518
Репутация: 27 ±
Замечаний: 0% ±

Excel 2013
Pelena,
Все отлично работает после замены. Спасибо Вам огромное.
Маленький (не критичный нюанс) только уточню. Код не отработал две ошибки (фото во вложении) из-за чего это может быть?
К сообщению приложен файл: 9304641.png(12.7 Kb)
 
Ответить
СообщениеPelena,
Все отлично работает после замены. Спасибо Вам огромное.
Маленький (не критичный нюанс) только уточню. Код не отработал две ошибки (фото во вложении) из-за чего это может быть?

Автор - Anis625
Дата добавления - 01.04.2021 в 22:40
Pelena Дата: Четверг, 01.04.2021, 22:51 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 17442
Репутация: 3875 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Удалите область печати с листа. Должно помочь.
Да и две ошибки можно и вручную удалить)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеУдалите область печати с листа. Должно помочь.
Да и две ошибки можно и вручную удалить)

Автор - Pelena
Дата добавления - 01.04.2021 в 22:51
Anis625 Дата: Четверг, 01.04.2021, 22:57 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 518
Репутация: 27 ±
Замечаний: 0% ±

Excel 2013
Pelena,
Пусто там. И при копировании листа именно на них и выводится сообщение о конфликте имен.
В них вроде есть символ # который указан в коде, по идее должен снести и его тоже код
К сообщению приложен файл: 0590472.png(20.7 Kb)
 
Ответить
СообщениеPelena,
Пусто там. И при копировании листа именно на них и выводится сообщение о конфликте имен.
В них вроде есть символ # который указан в коде, по идее должен снести и его тоже код

Автор - Anis625
Дата добавления - 01.04.2021 в 22:57
Anis625 Дата: Четверг, 01.04.2021, 23:15 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 518
Репутация: 27 ±
Замечаний: 0% ±

Excel 2013
Pelena,
Марокодером записал действие удаления например заголовков печати:[vba]
Код
ActiveWorkbook.Names("Print_Titles").Delete
[/vba]
После запуска отдельно этого кода - не удаляет. Странно
 
Ответить
СообщениеPelena,
Марокодером записал действие удаления например заголовков печати:[vba]
Код
ActiveWorkbook.Names("Print_Titles").Delete
[/vba]
После запуска отдельно этого кода - не удаляет. Странно

Автор - Anis625
Дата добавления - 01.04.2021 в 23:15
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить все кроме нужных именованные диапазоны (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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