6

Я работал над электронной таблицей Microsoft Excel 2007 в течение нескольких дней. Я работаю с основным шаблоном, таким как лист, и постоянно копирую его на новый лист. До сегодняшнего дня это происходило без проблем. Однако в середине сегодняшнего дня это внезапно изменилось, и я не знаю почему. Теперь, когда я пытаюсь скопировать лист, я получаю около десяти диалогов, каждый из которых имеет свой объект диапазона имен (показан ниже как «XXXX»), и я нажимаю «да» для каждого:

Формула или лист, который вы хотите переместить или скопировать, содержит имя «XXXX», которое уже существует на конечном листе. Вы хотите использовать эту версию названия?

  • Чтобы использовать имя, указанное в листе назначения, нажмите кнопку «Да».
  • Чтобы переименовать диапазон, указанный в формуле или на листе, нажмите «Нет» и введите новое имя в диалоговом окне «Конфликт имен».

Объекты диапазона имен относятся к ячейкам на листе. Например, E6 называется диапазоном имен PRE на нескольких листах (и так было всегда), а некоторые формулы ссылаются на PRE вместо $E$6 . Один из «XXXX» выше - это PRE . Эти диапазоны имен должны разрешаться только в пределах листа, на котором они появляются. Это не было проблемой раньше, несмотря на то, что один и тот же диапазон имен существовал ранее на нескольких листах Я хочу сохранить свои диапазоны имен.

Что могло измениться в моей электронной таблице, чтобы вызвать это изменение в поведении? Я вернулся к предыдущим листам, созданным таким образом, и теперь они также дают сообщение при копировании. Я пробовал другой компьютер и другого пользователя, и везде такое же поведение. Я могу только заключить, что что-то в электронной таблице изменилось. Что это может быть и как я могу вернуть прежнее поведение, при котором я могу копировать листы с диапазонами имен и не получать никаких предупреждений?

Глядя в Name Manager я вижу, что диапазоны имен, на которые жалуются, отображаются дважды, один раз как область действия Template а затем снова как область действия Workbook . Если я удаляю область действия Template , предупреждение исчезает при копировании, однако я получаю кучу ошибок #REF. Если я удаляю из области « Workbook » все, кажется, все в порядке, и предупреждения на копии тоже исчезают, так что, возможно, это ответ, но я волнуюсь по поводу того, какой эффект окажет это удаление, и задаюсь вопросом, как эти « Workbook » появились в первое место.

Будет ли это безопасно просто удалить менеджер имени Workbook области видимости записи и как могли бы они пришли в существование без моего ведома , чтобы начать?

6 ответов6

5

Откройте Диспетчер имен, найдите именованные элементы, на которые жалуются, и удалите все элементы с Workbook областью, и проблема с копированием листов исчезнет, а формулы останутся без изменений.

3
Sub TOOLS_DELETENAMEDRANGE()

  Dim nm As name
  On Error Resume Next

  For Each nm In ActiveWorkbook.Names
    If (MsgBox("Delete name- " & nm.name, vbYesNo) = vbYes) Then  
      nm.Delete
    End If
  Next

  On Error GoTo 0

End Sub
2

Это не ошибка, но предупреждение о конфликте существует и предлагает выбор того, что делать

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

Что касается того, что изменилось, я предлагаю вам просмотреть все имена в вашей рабочей тетради, особенно на предмет охвата.
Имя менеджера - Ctrl-F3

0

Эти имена в основном являются результатом загрузки данных через сторонний API. API обычно используют эти имена в качестве заполнителей для ссылок на ячейки.

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

Один из способов сделать это - запрограммировать его с помощью сценария VBA. Образец ниже

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

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

Если у кого-то есть более эффективное решение, пожалуйста, дайте мне знать.

0

Та же проблема здесь с 27 загадочными именованными диапазонами. Я использовал Ctrl+F3 (как рекомендовано в другом ответе), чтобы просмотреть список именованных диапазонов (который я никогда не настраивал!). С тех пор я много раз копировал вкладку листа и просто нажимал "да", чтобы обойти сообщение. Я выделил и удалил все названные диапазоны (по одному маленькому экрану за раз, не мог выбрать все). В следующий раз, когда я попытался скопировать лист, копирование прошло успешно без предупреждения.

Обязательно скопируйте исходный файл, прежде чем пытаться это сделать.

0

У меня была та же проблема, и я попробовал каждое из предложенных решений с переменным успехом:

1) Я открыл Менеджер Имен и, конечно же, там было множество Имен, которые я никогда не создавал; однако, они НЕ были именами, о которых меня предупреждали. Я все равно удалил их, чтобы избавиться от беспорядка, но это не было решением.

2) Я попробовал код, предоставленный Viquar (запустите "Sub do_loops_names"). Я думаю, что часть кода была пропущена, потому что я не вижу, как он на самом деле что-то делает, и, конечно же, ничего не произошло.

3) Я попробовал код, предоставленный user345338 (начинается с «Sub TOOLS _...») - ИДЕАЛЬНО. Он провел меня через все скрытые имена, которые каким-то образом застряли в книге, и удалил их. Большое спасибо, user345338 (кем бы вы ни были!).

Кстати, "коде" - код user345338 не является "бесполезным", поскольку это решило мою проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .