Excel vba удалить имя диапазона

 

art013

Пользователь

Сообщений: 166
Регистрация: 20.08.2014

Всем доброго дня! В моей книге очень много именованных диапазонов, которые при копировании с нее листа остаются в нем и приходится их удалять вручную (выделяю все, delete и за секунду их нет). В случае если это делать макросом, который циклом перебирает все имена и удаляет их, приходится ждать в районе минуты =(
Может кто знает как это можно сделать быстрее?

Изменено: art01307.12.2016 11:27:28

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Соберите диапазоны в Union и удаляйте одним махом.

Я сам — дурнее всякого примера! …

 

art013

Пользователь

Сообщений: 166
Регистрация: 20.08.2014

Ага, отличная идея  :) мне нравится, если не сложно строчку кода подкиньте)

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

#4

07.12.2016 11:35:26

Может быть отключение пересчета формул ускорит удаление имен:

Код
Sub Удалить_имена()
    Dim i As Long
    Application.Calculation = xlCalculationManual
    For i = ActiveSheet.Names.Count To 1 Step -1
        ActiveSheet.Names(i).Delete
    Next i
    Application.Calculation = xlCalculationAutomatic
End Sub
 

art013

Пользователь

Сообщений: 166
Регистрация: 20.08.2014

Karataev, не может быть а ускорит =), Спасибо!

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

#6

07.12.2016 14:16:57

Ну, вообще-то тупое удаление всех имён с листа, включая и невидимые, может привести к неприятностям. Автофильтр работать перестанет. Области печати тоже удалятся.
А если в именах ещё и вычисления идут?
Поэтому, наверное, лучше уж применить макросы такого типа:
Для чистки всей книги

EraseWbkNames

Для чистки только активного листа

EraseSheetNames

Хоть и помедленнее будет, зато меньше вероятность неприятностей

Изменено: Alex_ST07.12.2016 14:17:47
(опечатки)

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#7

07.12.2016 14:28:33

Цитата
В моей книге [одной]… макросом…приходится ждать в районе минуты

Уж-ж-жасное неудобство! Целую минуту ждать, пока удалятся имена из одной книги! Заметьте — всего одна книга, которую нужно почистить. И такая проблема!

Managing and removing named ranges in Excel can be a challenging task as you would have to do this one by one for each field. We’re going to show you how to delete named range Excel using VBA with one click.

How to delete named range Excel

Each named range is an object in the Names collection of a workbook. We can access these names using a For Each…Next loop and checking their references with the RefersToRange method. The RefersToRange method returns the reference as a Range object that we can use to find its parent worksheet.

The worksheet name a named range belongs to can be found with Name property under the Parent method. Then, using an If statement you can find the parent worksheet name.

    For Each nm In ActiveWorkbook.Names

        If nm.RefersToRange.Parent.Name = «Sheet1» Then nm.Delete

    Next nm

 

You can use codes in two ways:

  • Module
  • Immediate Window

In the Module method, you need to add the module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.

The Immediate Window method, on the other hand, is essentially a quick and dirty method where you can simply copy and paste the code into the Immediate Window and press the Enter key to run it. Unfortunately, any code you use in the Immediate Window will not be saved. Also note that icons and keyboard shortcuts will not be available.

Delete named ranges in a worksheet

Module method:

Sub DeleteNamedRangesInWorksheet()

    Dim nm As Name

    For Each nm In ActiveWorkbook.Names

        If nm.RefersToRange.Parent.Name = «Sheet1» Then nm.Delete

    Next nm

End Sub

 

Immediate Window method:

For Each nm In ActiveWorkbook.Names: If nm.RefersToRange.Parent.Name = "Sheet1" Then nm.Delete: Next nm

Удаление именованных диапазонов.

gling

Дата: Пятница, 07.03.2014, 20:28 |
Сообщение № 1

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

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


2010

Здравствуйте уважаемые Форумчане! Девушек поздравляю с наступающим праздником.
Хочу заполнить пустоту в понятии Ecxel. При копировании листа в другую книгу, именованные диапазоны тоже копируются. При разрыве связей, связи почему то, не разрываются. Вышел из положения копированием и вставкой значений в лист. Связи в формулах отсутствуют, но они остаются в именованных диапазонах. Возможно ли эти все именованные диапазоны, разом удалить. Своими попытками я определил, что необходимо для удаления, в макросе прописать имя диапазона. Вопрос 1- можно ли не обозначая имя диапазона (т.к. их несколько и все неизвестны) удалить все имена из книги или с листа.
Вопрос 2- Влияют ли именованные диапазоны на скорость обработки или объем файла.
Думаю что файл в этом случае не нужен.
Спасибо за любую информацию и помощь.
Извиняюсь. Наверно это тема скорей всего должна быть в вопросах по VBA. Просьба к Модераторам перенести.


ЯД-41001506838083

Сообщение отредактировал glingПятница, 07.03.2014, 21:21

 

Ответить

ikki

Дата: Пятница, 07.03.2014, 22:08 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

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


Excel 2003, 2010

1. [vba]

Код

For Each n In ThisWorkbook.Names: n.Delete: Next

[/vba]
2. да


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

gling

Дата: Пятница, 07.03.2014, 22:26 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

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


2010

ikki Спасибо за ответ сейчас попробую Ваше решение.


ЯД-41001506838083

Сообщение отредактировал glingПятница, 07.03.2014, 22:26

 

Ответить

ikki

Дата: Пятница, 07.03.2014, 22:38 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

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


Excel 2003, 2010

для удаления имён уровня листа чуть иначе, хотя принцип тот же
[vba]

Код

for each s in thisworkbook.sheets
     for each n in s.names: n.delete: next
next

[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

gling

Дата: Пятница, 07.03.2014, 23:47 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

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


2010

ikki Посмотрите пожалуйста, что не так. Я в макросах не спец. Ругается на n.Delete:. При открытых обоих книгах из Отчета хочу убрать связь (точнее именные диапазоны) в книге Февраль, Макросом1.

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

1934008.rar
(69.0 Kb)


ЯД-41001506838083

 

Ответить

Serge_007

Дата: Суббота, 08.03.2014, 01:03 |
Сообщение № 6

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

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

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

Возможно ли эти все именованные диапазоны, разом удалить?

Без макросов:
1. Ctrl+F3
2. Shift+End
3. Delete
4. Enter

[p.s.]В версиях Excel ниже 2007 этот способ работать не будет[/p.s.]


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

gling

Дата: Суббота, 08.03.2014, 02:28 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

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


2010

Serge_007 Спасибо. Как руками это сделать я знаю. Хотел эту процедуру завязать в цикл. Готовится отчет, копия его сохраняется в другой книге, далее этот отчет распечатывается, готовится следующий отчет. Особо эти диапазоны не напрягают. Не получится не страшно. Думал может всё же есть способ стереть их с листа.


ЯД-41001506838083

 

Ответить

Michael_S

Дата: Суббота, 08.03.2014, 03:58 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

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


Excel2016

[vba]

Код

Sub Макрос1()
Dim n As Variant
     Windows(«Февраль.xlsx»).Activate
For Each n In ActiveWorkbook.Names:
On Error Resume Next
n.Delete:
Next
     Windows(«Отчет.xlsm»).Activate
End Sub

[/vba]

 

Ответить

gling

Дата: Суббота, 08.03.2014, 08:39 |
Сообщение № 9

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

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


2010

Michael_S Спасибо! Всё сработало как надо.
Всем спасибо принявшим участие.


ЯД-41001506838083

Сообщение отредактировал glingСуббота, 08.03.2014, 08:41

 

Ответить

Предполагая, что вы создали много именованных диапазонов в своей книге, но теперь вам больше не нужны эти именованные диапазоны, как вы могли бы удалить все именованные диапазоны сразу в Excel?

  • Удалите все именованные диапазоны, перейдя в Диспетчер имен
  • Удалить все именованные диапазоны с кодом VBA

Удалите все именованные диапазоны, перейдя в Диспетчер имен

В диалоговом окне «Диспетчер имен» вы можете создавать, редактировать и удалять именованные диапазоны по своему усмотрению. Пожалуйста, сделайте так:

1, Перейти к Менеджер имен кликнув Формула > Менеджер имен, см. снимок экрана:
doc-delete-named-range1

2. В Менеджер имен диалог, нажмите Shift клавишу, чтобы выбрать все названные диапазоны, или удерживайте Ctrl нажмите клавишу, чтобы выбрать те, которые вам не нужны, см. снимок экрана:
doc-delete-named-range1

3, Затем нажмите Удалить в верхней части диалогового окна, и появится окно с напоминанием о том, что вы обязательно удалите имена.
doc-delete-named-range1

4. Затем нажмите OK, все названные диапазоны были удалены сразу.

Найти и заменить все именованные диапазоны соответствующими ссылками на ячейки в формулах

Kutools for ExcelАвтора Заменить имена диапазонов Утилита может легко найти все формулы, применяющие именованные диапазоны в выбранном диапазоне, на указанном листе или на всех листах. И основная роль этой утилиты — заменить все именованные диапазоны соответствующими ссылками на ячейки в этих формулах.

объявление заменить именованный диапазон 1

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now

Удалить все именованные диапазоны с кодом VBA

Следующий короткий код VBA также может помочь вам удалить все именованные диапазоны в книге.

1. Удерживайте ALT + F11 ключи, и он открывает Окно Microsoft Visual Basic для приложений.

2. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.

Код VBA: удалить все именованные диапазоны в Excel

Sub DeleteNames()
'Update 20140314
Dim xName As Name
For Each xName In Application.ActiveWorkbook.Names
    xName.Delete
Next
End Sub

3, Затем нажмите F5 ключ для запуска этого кода, все имена в книге будут немедленно удалены.


Статьи по теме:


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (6)


Оценок пока нет. Оцените первым!

I have searched for an answer for hours, and can’t search anymore. Have Seen lots of discussions about deleting all range names from a workbook or a worksheet. However, I need to delete multiple Range Names from a single Range while leaving other Range Names for other ranges on the same sheet and/or within the same workbook alone. Might the code look something like this?:

Sub Delete_My_Named_Ranges()
   Dim nName As Name
   Dim wbk As Workbook
   Dim Sht As Worksheet
   Dim rgNm As Range, aCell As Range

   Set wbk = Workbooks("testRgNmDelete.xlsm")
   Set Sht = wbk.Worksheets("Sheet1")

   Set rgNm = Sht.Range("$A$1")

        For Each nName In ThisWorkbook.Names
            Set aCell = Range(nName)
            If Not Intersect(aCell, rgNm) Is Nothing Then
                nName.Delete
            End If
         Next
  End Sub

OK, the above code works for a fixed range («$A:$1»). But I need to be able to set rgNm as a variable instead of as a fixed range. here is an example, the error now is on the statement «Set aCell = Range(nName).»

Private Sub cboProductType_Change()


Dim wbSKUM As Workbook
Dim ws As Worksheet, wsLUL As Worksheet, wsLU As Worksheet
Dim rgPTL As Range, rgTable1 As Range, rgA1 As Range, rgA1LU As Range
Dim rgNm As Range, rgFormula As Range, aCell As Range
Dim sFormula As String
Dim nName As Name

Set wbSKUM = Workbooks("XBS_SKU_Master.xlsm")
Set ws = wbSKUM.Worksheets("SKUMaster")
Set wsLUL = wbSKUM.Worksheets("LookupLists")
Set wsLU = wbSKUM.Worksheets("Lookup")
Set rgPTL = wsLUL.Range("ProdTypeLookUp")
Set rgTable1 = ws.Range("Table1")
    sFormula = "=SUBSTITUTE(SUBSTITUTE(F2,"" "",""_""),""-"","""")"


 'clear Product Type Lookup List (Column D) to be sure no data remains
 wsLUL.Activate
 Range(Range("F2"), Range("F2").End(xlDown)).Select
 Selection.Cells.Value = vbNullString
    Set rgNm = Selection

    For Each nName In ThisWorkbook.Names
            Set aCell = Range(nName)
            If Not Intersect(aCell, rgNm) Is Nothing Then
                nName.Delete
            End If
    Next

Thanks again!

Вступление

Тема должна включать информацию, конкретно связанную с именованными диапазонами в Excel, включая методы создания, изменения, удаления и доступа к определенным именованным диапазонам.

Определить именованный диапазон

Использование именованных диапазонов позволяет описать значение содержимого ячейки (я) и использовать это определенное имя вместо фактического адреса ячейки.

Например, формулу =A5*B5 можно заменить на =Width*Height чтобы упростить чтение и понимание формулы.

Чтобы определить новый именованный диапазон, выберите ячейку или ячейки для имени, а затем введите новое имя в поле «Имя» рядом с панелью формул.

введите описание изображения здесь


Примечание. Именованные диапазоны по умолчанию относятся к глобальной области, что означает, что к ним можно получить доступ из любой точки книги. Старые версии Excel позволяют дублировать имена, поэтому необходимо избегать дублирования имен глобальной области, иначе результаты будут непредсказуемыми. Используйте вкладку «Диспетчер имен» на вкладке «Формулы», чтобы изменить область действия.

Создайте новый именованный диапазон под названием «MyRange», назначенный ячейке A1

ThisWorkbook.Names.Add Name:="MyRange", _
    RefersTo:=Worksheets("Sheet1").Range("A1")

Удалить определенный именованный диапазон по имени

ThisWorkbook.Names("MyRange").Delete

Доступ к именованному диапазону по имени

Dim rng As Range
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("MyRange")
Call MsgBox("Width = " & rng.Value)

Доступ к названию диапазона с ярлыком

Как и любой другой диапазон , именованные диапазоны могут быть доступны напрямую с помощью ярлыка, который не требует создания объекта Range . Три строки из выдержки из вышеприведенного кода могут быть заменены одной строкой:

Call MsgBox("Width = " & [MyRange])

Примечание. Свойством по умолчанию для диапазона является его значение, поэтому [MyRange] совпадает с [MyRange].Value

Вы также можете вызвать методы в диапазоне. Следующий выбирает MyRange :

[MyRange].Select

Примечание. Одно предостережение состоит в том, что нотация ярлыка не работает со словами, которые используются в другом месте библиотеки VBA. Например, диапазон с именем Width не будет доступен как [Width] но будет работать, как ожидалось, при доступе через ThisWorkbook.Worksheets("Sheet1").Range("Width")

Управление именованным диапазоном (диапазонами) с помощью диспетчера имен

Вкладка «Формулы»> «Определенная группа имен»> «Диспетчер имен»

Именованный менеджер позволяет:

  1. Создайте или измените имя
  2. Создать или изменить ссылку на ячейку
  3. Создать или изменить область действия
  4. Удалить существующий именованный диапазон

введите описание изображения здесь


Named Manager предоставляет полезный быстрый поиск неработающих ссылок.

введите описание изображения здесь

Именованные массивы диапазонов

Примерный лист

введите описание изображения здесь


Код

Sub Example()
    Dim wks As Worksheet
    Set wks = ThisWorkbook.Worksheets("Sheet1")
    
    Dim units As Range
    Set units = ThisWorkbook.Names("Units").RefersToRange
    
    Worksheets("Sheet1").Range("Year_Max").Value = WorksheetFunction.Max(units)
    Worksheets("Sheet1").Range("Year_Min").Value = WorksheetFunction.Min(units)
End Sub

Результат

введите описание изображения здесь

Хитрости »

1 Май 2011              195505 просмотров


Именованные диапазоны

  • Общие сведения об именованных диапазонах
  • Как обратиться к именованному диапазону(как использовать в формулах и VBA)
  • Ограничения для именованных диапазонов
  • Создание именованного диапазона
  • Изменение именованного диапазона
  • Удаление именованного диапазона

Для чего вообще нужны именованные диапазоны? Обращение к именованному диапазону гораздо удобнее, чем прописывание адреса в формулах и VBA:

  • Предположим, что в формуле мы ссылаемся на диапазон A1:C10 (возможно даже не один раз). Для примера возьмем простую функцию СУММ(суммирует значения указанных ячеек):
    =СУММ(A1:C10;F1:K10)
    Затем нам стало необходимо суммировать другие данные(скажем вместо диапазона A1:C10 в диапазоне D2:F11). В случае с обычным указанием диапазона нам придется искать все свои формулы и менять там адрес диапазона на новый. Но если назначить своему диапазону A1:C10 имя(к примеру ДиапазонСумм), то в формуле ничего менять не придется — достаточно будет просто изменить ссылку на ячейки в самом имени один раз. Я привел пример с одной формулой — а что, если таких формул 10? 30?
    Примерно такая же ситуация и с использованием в кодах: указав имя диапазона один раз не придется каждый раз при изменении и перемещении этого диапазона прописывать его заново в коде.
  • Именованный диапазон не просто так называется именованным. Если взять пример выше — то отображение в формуле названия ДиапазонСумм куда нагляднее, чем A1:C10. В сложных формулах куда проще будет ориентироваться по именам, чем по адресам. Почему удобнее: если сменить стиль отображения ссылок (подробнее про стиль), то диапазон A1:C10 будет выглядеть как-то вроде этого: R1C1:R10C3. А если назначить имя — то оно как было ДиапазонСумм, так им и останется.
  • При вводе формулы/функции в ячейку, можно не искать нужный диапазон, а начать вводить лишь первые буквы его имени и Excel предложит его ко вводу:
    Вставка имени в функцию
    Данный метод доступен лишь в версиях Excel 2007 и выше

Как обратиться к именованному диапазону
Обращение к именованному диапазону из VBA

	MsgBox Range("ДиапазонСумм").Address
	MsgBox [ДиапазонСумм].Address

Читать подробнее про обращение к диапазонам из VBA

Обращение к именованному диапазону в формулах/функциях

  1. =СУММ(ДиапазонСумм)
  2. =ВПР(«Критерий»;ДиапазонСумм;2;0)
    Читать подробнее про функцию ВПР

Если при указании диапазона в формуле выделить именованный диапазон, то его имя автоматически подставится в формулу вместо фактического адреса ячеек:
Выделение в формуле


Ограничения, накладываемые на создание имен

  • В качестве имени диапазона не могут быть использованы словосочетания, содержащие пробел. Вместо него лучше использовать нижнее подчеркивание _ или точку: Name_1, Name.1
  • Первым символом имени должна быть буква, знак подчеркивания (_) или обратная косая черта (). Остальные символы имени могут быть буквами, цифрами, точками и знаками подчеркивания
  • Нельзя в качестве имени использовать зарезервированные в Excel константы — R, C и RC(как прописные, так и строчные). Связано с тем, что данные буквы используются самим Excel для адресации ячеек при использовании стиля ссылок R1C1 (читать подробнее про стили ссылок)
  • Нельзя давать именам названия, совпадающие с адресацией ячеек: B$100, D2(для стиля ссылок А1) или R1C1, R7(для стиля R1C1). И хотя при включенном стиле ссылок R1C1 допускается дать имени название вроде A1 или D130 — это не рекомендуется делать, т.к. если впоследствии стиль отображения ссылок для книги будет изменен — то Excel не примет такие имена и предложит их изменить. И придется изменять названия всех подобных имен. Если очень хочется — можно просто добавить нижнее подчеркивание к имени: _A1
  • Длина имени не может превышать 255 символов

Создание именованного диапазона
Способ первый
обычно при создании простого именованного диапазона я использую именно его. Выделяем ячейку или группу ячеек, имя которым хотим присвоить -щелкаем левой кнопкой мыши в окне адреса и вписываем имя, которое хотим присвоить. Жмем Enter:
Создание через поле имен

Способ второй
Выделяем ячейку или группу ячеек. Жмем правую кнопку мыши для вызова контекстного меню ячеек. Выбираем пункт:

  • Excel 2007: Имя диапазона (Range Name)
  • Excel 2010: Присвоить имя (Define Name)

Меню ячеек
либо:
Жмем Ctrl+F3
либо:

  • 2007-2016 Excel: вкладка Формулы (Formulas)Диспетчер имен (Name Manager)Создать (New)(либо на той же вкладке сразу — Присвоить имя (Define Name))
  • 2003 Excel: ВставкаИмяПрисвоить

Появляется окно создания имени
Окно создания имени
Имя (Name) — указывается имя диапазона. Необходимо учитывать ограничения для имен, которые я описывал в начале статьи.
Область (Scope) — указывается область действия создаваемого диапазона — Книга, либо Лист1:

  • Лист1 (Sheet1) — созданный именованный диапазон будет доступен только из указанного листа. Это позволяет указать разные диапазоны для разных листов, но указав одно и тоже имя диапазона
  • Книга (Workbook) — созданный диапазон можно будет использовать из любого листа данной книги

Примечание (Comment) — здесь можно записать пометку о созданном диапазоне, например для каких целей планируется его использовать. Позже эту информацию можно будет увидеть из диспетчера имен (Ctrl+F3)
Диапазон (Refers to) — при данном способе создания в этом поле автоматически проставляется адрес выделенного ранее диапазона. Его можно при необходимости тут же изменить.


Изменение диапазона
Чтобы изменить имя Именованного диапазона, либо ссылку на него необходимо всего лишь вызывать диспетчер имен(Ctrl+F3), выбрать нужное имя и нажать кнопку Изменить(Edit…).
Изменить можно имя диапазона(Name), ссылку(RefersTo) и Примечание(Comment). Область действия(Scope) изменить нельзя, для этого придется удалить текущее имя и создать новое, с новой областью действия.


Удаление диапазона
Чтобы удалить Именованный диапазон необходимо вызывать диспетчер имен(Ctrl+F3), выбрать нужное имя и нажать кнопку Удалить(Delete…).

Так же можно создавать списки с автоматическим определением его размера. Например, если значения в списке периодически пополняются или удаляются и чтобы каждый раз не переопределять границы таких диапазонов. Такие диапазоны называют динамическими.

Так же см.:
Как обратиться к диапазону из VBA
Динамические именованные диапазоны


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Как макросом удалить лишние имена диапазонов в книге

Franck
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.04.2004 (Пт) 12:21

Как макросом удалить лишние имена диапазонов в книге

Такая ситуация. В рабочей книге присутстует много имен ячеек уровня Workbook (видны, если выбрать Вставка-Имя-Присвоить), которые ссылаются на внешние файлы типа

=’C:My Download FilesExcel[fin_analis_3_0.xls]Balance’!$C$172

или вообще выдают ошибку типа

=#REF!$7:$7

Как макросом можно их удалить? :?:

Конечно, можно просто удалить все вот так:

Код: Выделить всё
Sub DeleteExternalNames()

Dim n As Name

Dim count As Integer

For Each n In ActiveWorkbook.Names

n.Delete

count = count + 1

Next n

MsgBox "Все имена в количестве " & count & " удалены"

End Sub

Но имена, которые ссылаются на ячейки в моей рабочей книге хочется оставить. Помогите, плиз!


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2006 (Чт) 14:22

Если n.referestorange существует, и если n.referstorange.worksheet.parent is thisworkbook, то не удалять.

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Franck
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.04.2004 (Пт) 12:21

Сообщение Franck » 02.02.2006 (Чт) 15:12

Не получается. :( Ошибку выдает.


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2006 (Чт) 15:33

Я мог бы спросить «где и какую». Но не буду. Видимо, человек имеет чёткое намерение помочь себе сам. Не вопрос.

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Franck
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.04.2004 (Пт) 12:21

Сообщение Franck » 02.02.2006 (Чт) 15:42

Извините, плиз.

У меня с синтаксисом проблемы

на строку Set r = n.RefersToRange ругается, выдает ошибку с кодом 91. Я не профессиональный программист, поэтому даже такой макрос для меня труден, с утра уже бьюсь. :(


Franck
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.04.2004 (Пт) 12:21

Сообщение Franck » 02.02.2006 (Чт) 18:34

GSerg

Спасибо за совет! Разобрался, все просто оказалось. Проверку на ошибку забыл вставить.

Код: Выделить всё
Set r = Nothing
      On Error Resume Next
      Set r = n.RefersToRange
If r Is Nothing Then
n.Delete

и т.д.



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: PetalBot и гости: 3

Понравилась статья? Поделить с друзьями:
  • Excel vba удалить значения в ячейках
  • Excel vba удалить дубликаты в столбце
  • Excel vba удалить диапазон столбцов
  • Excel vba удалить все картинки с листа
  • Excel vba удалить все имена