воскресенье, 12 сентября 2021 г.

Конфликт имен в Excel 2016

Я думаю вы уже сталкивались с такой проблемой при работе в Excel, когда вы копируете лист Excel, то при создании копии листа вы получаете окно «Конфликт имен» (Смотрите рисунок 1). Картинка взята с сайта.

Рисунок 1. Окно "Конфликт имен"

Данная проблема связана с тем, что в окне «Диспетчер имен» (открывается при нажатии сочетания клавиш Ctrl+F3), который можно открыть на ленте во вкладке «Формулы», раздел «Определенные имена», созданы большое число именованных диапазонов, они и конфликтуют при копирование листа. Эти именованные диапазоны создаются при генерации отчета в каких-нибудь бухгалтерских приложениях.  Чтобы лист скопировать без этого окна «Конфликт имен», то вам необходимо в окне «Диспетчер имен» удалить все именованные диапазоны, которые там есть. Но, даже если вы удалите все эти именованные диапазоны, то этого будет не достаточно, так как существуют скрытые именованные диапазоны, которые не видны в окне «Диспетчер имен» и поэтому вам необходимо воспользоваться специальным VBA-макросом, который удалит все скрытые именованные диапазоны. Для того чтобы создать и запустить макрос, вам необходима для начала включить вкладку «Разработчик» на ленте. Для этого зайдите в меню параметры (смотрите рисунок 2), в окне параметров Excel в разделе «Настроить ленту» вам нужно включить вкладку «Разработчик» (смотрите рисунок 3).

Рисунок 2. Открытие окна "Параметры Excel"

Рисунок 3. Окно "Параметры Excel"

 Далее во вкладке разработчик нажмите кнопку «Visual Basic» (смотрите рисунок 4).

Рисунок 4. Вкладка "Разработчик" на ленте

В приложение “Microsoft Visual Basic for Applications” на панели проектов дважды нажмите левой кнопкой мыши по разделу «Эта книга» в проекте VBAProject (Книга1(смотрите рисунок 5 цифра 1)то откроется окно ввода VBA-кода (смотрите рисунок 5 цифра 2). Скопируйте и вставьте в это окно следующий код, который я взял с этой страницы.


Рисунок 5. Окно приложения “Microsoft Visual Basic for Applications”

Sub do_loop_names()
    Dim vJunkName As Name
    Debug.Print ThisWorkbook.Names.Count
    
    For Each vJunkName In ThisWorkbook.Names
    vJunkName.Delete
    Next vJunkName
End Sub

Запустите данный код на исполнение (смотрите рисунок 5 цифра 3). После того как код отработает, все скрытые именованные диапазоны будут удалены и вы сможете копировать листы Excel без всяких проблем, и не будите получать окно «Конфликт имен».

На этой странице https://kompsekret.ru/q/why-does-excel-now-give-me-already-existing-name-range-warning-on-copy-sheet-24247/ вы можете взять другой пример VBA-кода для очистки именованного диапазона.

Комментариев нет:

Отправить комментарий