У Грэма есть книга, в которой определено большое количество (более 120) именованных диапазонов. Он хотел бы скопировать имена и определения диапазонов в другую книгу. Таким образом, после копирования диапазон с именем MyRange1, который относится к диапазону C7: H22 в исходной книге, будет существовать в целевой книге и относиться к тому же диапазону в целевой книге.

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

Самый простой способ сделать это — использовать макрос, который проходит через каждое из заданных вами имен и копирует определение имени в целевую книгу. Вот пример:

Sub CopyNames()

Dim Source As Workbook     Dim Target As Workbook     Dim n As Name

Set Source = ActiveWorkbook     Set Target = Workbooks("Book2.xlsx")



For Each n In Source.Names         Target.Names.Add Name:=n.Name, RefersTo:=n.Value     Next End Sub

Обратите внимание, что большая часть работы в макросе выполняется в цикле For Each, который проходит через все определенные имена. Он создает имя в целевой книге и присваивает ей то же назначение, что и в исходной книге (содержится в свойстве Value).

Следует отметить, что по умолчанию именованные диапазоны включают имя рабочего листа в свойстве Value. Если у исходной книги есть именованный диапазон, который относится, например, к Sheet4, и в целевой книге нет Sheet4, то добавить имя не удастся. Макрос не генерирует ошибку; он просто не создает новый именованный диапазон. Решение состоит в том, чтобы (а) убедиться, что целевая книга содержит те же имена листов, что и исходная книга, или (б) изменить макрос так, чтобы он распознал отсутствие листов и предпринял все необходимые действия.

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

Excel обычно копирует именованные диапазоны вместе с листами. Единственный раз, когда это не будет удовлетворительным подходом, — это если в целевой книге уже есть листы с такими же именами, что и те листы, которые вы, возможно, захотите скопировать. В этом случае лучше всего использовать подход макроса.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (8811) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Copying_Named_Ranges [Копирование именованных диапазонов].