Здравствуйте. Рад представить Вам пошаговую инструкцию по удалению скрытых имен в Экселе. Вы возможно сталкивались с ситуацией, когда при копировании листа в книге Excel возникала ошибка, которая сообщает что Имя уже существует и нужно либо выбрать новое, либо использовать тоже. Хорошо если таких ошибок 2 — 3, а если их несколько сотен или тысяч, тогда никакого терпения не хватит нажимать ОК. Используя рекомендации, представленные ниже, Вы избавитесь от ошибки навсегда! Итак, приступим:
1. Создание макроса DeleteHiddenNames.
Встроенной функции в Excel для решения этой проблемы я не нашел, зато есть замечательный макрос, с помощью которого мы от нее избавимся. Сначало надо зайти в редактор макросов, для этого запустите Excel, откройте файл с проблемой и нажмите ALT+F11. Откроется Microsoft Visual Basic for Applications, далее заходим в меню Insert и выбираем Module.
Открывается окно модуля. Туда Вы должны вставить следующий код макроса:
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
Выглядеть это должно в результате следующим образом:
Отлично. Макрос мы создали, теперь нам осталось его применить.
2. Использования макроса для удаления скрытых имен в Excel.
Переключаемся назад на нашу Эксель книгу, переходим в меню Вид, там выбираем блок Макросы и в нем нажимаем на меню Макросы.
В открывшемся меню выбираем макрос DeleteHiddenNames и нажимаем кнопку выполнить.
Макрос отработает некоторое время (чем больше скрытых имен у Вас в файле, тем дольше он будет работать) и выдаст сообщение о том, сколько имен было удалено. Поздравляю Вы избавились от проблемы и можете смело копировать листы.
Я надеюсь что эта инструкция Вам помогла, заходите на сайт почаще — здесь много еще чего полезного для Эксель найдете. Есть вопросы — смело пишите их в комментариях к статье.
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
Удалить все кроме нужных именованные диапазоны |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |