Как удалить все имена на листе excel

Здравствуйте. Рад представить Вам пошаговую инструкцию по удалению скрытых имен в Экселе. Вы возможно сталкивались с ситуацией, когда при копировании листа в книге Excel возникала ошибка, которая сообщает что Имя уже существует и нужно либо выбрать новое, либо использовать тоже. Хорошо если таких ошибок 2 — 3, а если их несколько сотен или тысяч, тогда никакого терпения не хватит нажимать ОК. Используя рекомендации, представленные ниже, Вы избавитесь от ошибки навсегда! Итак, приступим:

1. Создание макроса DeleteHiddenNames.

Встроенной функции в Excel для решения этой проблемы я не нашел, зато есть замечательный макрос, с помощью которого мы от нее избавимся. Сначало надо зайти в редактор макросов, для этого запустите Excel, откройте файл с проблемой и нажмите ALT+F11. Откроется Microsoft Visual Basic for Applications, далее заходим в меню Insert и выбираем Module.

Как удалить скрытые имена в Excel

Открывается окно модуля. Туда Вы должны вставить следующий код макроса:

Sub DeleteHiddenNames()
Dim n As Name
Dim Count As Integer
On Error Resume Next
For Each n In ActiveWorkbook.Names
    If Not n.Visible Then
    n.Delete
    Count = Count + 1
    End If
Next n
MsgBox «Скрытые имена в количестве » & Count & » удалены»
End Sub

Выглядеть это должно в результате следующим образом:

Как удалить скрытые имена в Excel

Отлично. Макрос мы создали, теперь нам осталось его применить.

2. Использования макроса для удаления скрытых имен в Excel.

Переключаемся назад на нашу Эксель книгу, переходим в меню Вид, там выбираем блок Макросы и в нем нажимаем на меню Макросы.

Как удалить скрытые имена в Excel

 В открывшемся меню выбираем макрос DeleteHiddenNames и нажимаем кнопку выполнить.

Как удалить скрытые имена в Excel

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

Как удалить скрытые имена в Excel

Я надеюсь что эта инструкция Вам помогла, заходите на сайт почаще — здесь много еще чего полезного для Эксель найдете. Есть вопросы — смело пишите их в комментариях к статье.

Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Еще…Меньше

Инспектор документов обнаружил в книге скрытые имена. Под этими именами может храниться скрытая информация о сценариях надстройки «Поиск решения». Например, если вы используете надстройку «Поиск решения» для выполнения сценария, в ней может храниться информация о параметрах расчета и других конфиденциальных данных, например скрытые имена в книге.

Важно: Корпорация Майкрософт предоставляет примеры программирования только для иллюстрации без гарантии, выраженной или подразумеваемой. Это относится и не только к подразумеваемой гарантии пригодности и пригодности для определенной цели. В этой статье предполагается, что вы знакомы с языком программирования, который демонстрируется, и средствами, используемыми для создания и от debug procedures. Специалисты службы поддержки Майкрософт могут объяснить функциональные возможности конкретной процедуры, но не будут изменять эти примеры, чтобы предоставить дополнительные функции или процедуры по построению с учетом ваших конкретных требований.

Проблема

Инспектор документов не может удалить эти имена.

Рекомендуемое решение

Чтобы удалить скрытые имена, запустите следующий макрос: В макросе отображается окно сообщения с тремя элементами: (1), видимым или скрытым, (2) определенным и (3) ссылкой на это имя (ссылка на ячейку книги). Чтобы удалить или сохранить каждое определенное имя, выберите вариант Да или Нет.

Примечание: После удаления скрытых имен с помощью этого макроса надстройки (например, «Поиск решения») и макросы могут работать неправильно, и связанные с ними скрытые данные могут быть потеряны. Этот макрос действует на все имена, которые определяются как скрытые, а не только на те, которые были добавлены надстройкой «Поиск решения».

Внимание: Если имена листов содержат пробелы, при попытке удалить определенное имя может появиться сообщение об ошибке.

Удаление скрытых имен

' Module to remove all hidden names on active workbook
   Sub Remove_Hidden_Names()

       ' Dimension variables.
       Dim xName As Variant
       Dim Result As Variant
       Dim Vis As Variant

       ' Loop once for each name in the workbook.
       For Each xName In ActiveWorkbook.Names

           'If a name is not visible (it is hidden)...
           If xName.Visible = True Then
               Vis = "Visible"
           Else
               Vis = "Hidden"
           End If

           ' ...ask whether or not to delete the name.
           Result = MsgBox(prompt:="Delete " & Vis & " Name " & _
               Chr(10) & xName.Name & "?" & Chr(10) & _
               "Which refers to: " & Chr(10) & xName.RefersTo, _
               Buttons:=vbYesNo)

           ' If the result is true, then delete the name.
           If Result = vbYes Then xName.Delete

           ' Loop to the next name.
       Next xName

   End Sub

Нужна дополнительная помощь?

Как очистить/удалить все имена в книге?

Автор Василий Алибабаевич, 11.08.2008, 12:41

« назад — далее »

Есть книга, состоящая из одного листа.
Сразу скажу — это выгрузка из ERP системы в виде xls файла.
На листе есть данные и очень многим ячейкам присвоены имена. Я так понимаю, что в некоторых столбцах каждой ячейке с данными присвоено имя  >:(
Это очень неудобно.
Есть ли способ удаления всех имен всех поименованных ячеек/диапазонов на листе?

Если это один лист, то можно скопировать, вставить в новую книгу — и все перенесется, кроме имен. А если листов несколько  ???


Навскидку: могут перестать работать формулы, макросы, условные форматы, проверка данных, слетит диапазон печати… Возможны и еще какие-то неприятности, и, что самое отвратительное, проявиться они могут не сразу.

Sub KillNames()
    Dim nm As Name
    For Each nm In ActiveWorkbook.Names
        nm.Delete
    Next
End Sub


Спасибо!
Ничего не слетит — т.к. имена будут убиваться сразу после выгрузки, где ничего этого нет, только значения.


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Как очистить/удалить все имена в книге?

Я думаю, что лучше использовать объект Range.
Я нацарапал функцию (быстренько), может быть она вам поможет.

Public Sub test()

Dim Temp As Range
Dim MyData As Range
Dim Dest As Range
Dim i As Integer
‘Пример 1
‘ копируем в другое место
i = 0
Set MyData = DataFind() ‘В MyData искомые строки
Set Dest = Worksheets(‘Лист2’).Range(‘a1’) ‘Адрес, куда будем копировать
If Not MyData Is Nothing Then ‘Если есть данные, копируем их
For Each Temp In MyData.Rows
Temp.Copy
Dest.Offset(i, 0).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
i = i + 1 ‘добавляем смещение для строк
Next
End If

‘Пример 2
‘Скрываем, что не удовлетворяет условию
Worksheets(‘Лист1’).UsedRange.EntireRow.Hidden = True
MyData.EntireRow.Hidden = False
End Sub

Public Function DataFind() As Range
Dim Temp As Range
Set DataFind = Worksheets(‘Лист1’).Range(‘iv65535’) ‘Ссылаемся на последнюю ячейку, потом ссылку убьем
For Each Temp In Worksheets(‘Лист1’).Range(‘d2:d100’) ‘Диапазон поиска в столбце
‘В условии лучше указать ячейку, чтобы не париться с форматами данных
If Temp.Value = Worksheets(‘Лист1’).Range(‘a1’).Value Then Set DataFind = Union(DataFind, Temp.EntireRow)
‘Запоминаем строки, удовлетворяющие условию
Next
Set DataFind = Intersect(DataFind, Worksheets(‘Лист1’).UsedRange) ‘Обрезаем ненужное
End Function

Удалить все кроме нужных именованные диапазоны

Anis625

Дата: Четверг, 01.04.2021, 16:23 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 670


Репутация:

31

±

Замечаний:
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, то не удалять», но не понял как это вкрутить в свой код.
Буду признателен за любой совет.

 

Ответить

Anis625

Дата: Четверг, 01.04.2021, 16:33 |
Сообщение № 2

Группа: Проверенные

Ранг: Ветеран

Сообщений: 670


Репутация:

31

±

Замечаний:
0% ±


Excel 2013

Пустой файл с лишними именованными диапазонами весит почти метр. Сделал архив из двух файлов

 

Ответить

Pelena

Дата: Четверг, 01.04.2021, 18:49 |
Сообщение № 3

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 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]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Anis625

Дата: Четверг, 01.04.2021, 20:16 |
Сообщение № 4

Группа: Проверенные

Ранг: Ветеран

Сообщений: 670


Репутация:

31

±

Замечаний:
0% ±


Excel 2013

Pelena,
Даже с решением. Спасибо Вам, попробую

 

Ответить

Anis625

Дата: Четверг, 01.04.2021, 21:30 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 670


Репутация:

31

±

Замечаний:
0% ±


Excel 2013

Pelena,
Не срабатывает код. Буквально сразу после запуска выводится сообщение msgbox «Все имена в количестве 0 удалены»
Получается сразу отрабатывается строка[vba][/vba]

Сообщение отредактировал Anis625Четверг, 01.04.2021, 21:47

 

Ответить

Pelena

Дата: Четверг, 01.04.2021, 22:05 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Вот, что стало с Вашим файлом-примером, которыйпосле работы макроса. Как видите размер резко уменьшился

К сообщению приложен файл:

__—.xlsm
(27.4 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Anis625

Дата: Четверг, 01.04.2021, 22:26 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 670


Репутация:

31

±

Замечаний:
0% ±


Excel 2013

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

 

Ответить

Pelena

Дата: Четверг, 01.04.2021, 22:32 |
Сообщение № 8

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

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


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Anis625

Дата: Четверг, 01.04.2021, 22:40 |
Сообщение № 9

Группа: Проверенные

Ранг: Ветеран

Сообщений: 670


Репутация:

31

±

Замечаний:
0% ±


Excel 2013

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

К сообщению приложен файл:

9304641.png
(12.7 Kb)

 

Ответить

Pelena

Дата: Четверг, 01.04.2021, 22:51 |
Сообщение № 10

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

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


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Anis625

Дата: Четверг, 01.04.2021, 22:57 |
Сообщение № 11

Группа: Проверенные

Ранг: Ветеран

Сообщений: 670


Репутация:

31

±

Замечаний:
0% ±


Excel 2013

Pelena,
Пусто там. И при копировании листа именно на них и выводится сообщение о конфликте имен.
В них вроде есть символ # который указан в коде, по идее должен снести и его тоже код

К сообщению приложен файл:

0590472.png
(20.7 Kb)

 

Ответить

Anis625

Дата: Четверг, 01.04.2021, 23:15 |
Сообщение № 12

Группа: Проверенные

Ранг: Ветеран

Сообщений: 670


Репутация:

31

±

Замечаний:
0% ±


Excel 2013

Pelena,
Марокодером записал действие удаления например заголовков печати:[vba]

Код

ActiveWorkbook.Names(«Print_Titles»).Delete

[/vba]
После запуска отдельно этого кода — не удаляет. Странно

 

Ответить

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как удалить все имена в книге excel
  • Как удалить все изображения с листа excel
  • Как удалить все изменения в word
  • Как удалить все значения в таблице excel
  • Как удалить все знаки после знака excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии