Ранее работающий именованный диапазон Excel выдает сообщение «Ссылка недействительна» и возвращает ошибку 1004 в простом макросе

У меня есть пара файлов, в которых ранее хорошие именованные диапазоны перестали работать. Запуск Office 365 для бизнеса, 64-разрядная версия, Win 11.

Именованные диапазоны отображаются в диспетчере имен с правильной ссылкой на ячейку и значением. Однако команда «Перейти» возвращает сообщение «Ссылка недействительна», а простой макрос для отображения значения именованного диапазона возвращает ошибку 1004.

Изображение диспетчера имен, перехода и ошибки кода

Sub Test_Range()
   MsgBox(ThisWorkbook.Worksheets("Dashboard").Range("Input_QB").Value)
End Sub

Проблема началась после 15 июля. Другой пользователь заметил аналогичную проблему на сайте microsoft.com и решил, что это ошибка выпуска версии (версия 2406, сборка 16.0.17726.20078). Модератор перенаправил пользователя на сайт обратной связи MS (остановил устранение неполадок). https://answers.microsoft.com/en-us/msoffice/forum/all/i-have-found-a-run-time-bug-error-1004-in/ab6f100a-8c89-4489-9c43- b08a5416f5c9

Вещи, которые я пробовал безуспешно:

  • Удаление именованного диапазона и использование того же имени для настройки нового именованного диапазона привело к тем же ошибкам.
  • Сохранение, закрытие и повторное открытие приводили к тем же ошибкам.
  • "Sheets("Dashboard").Range("Input_QB").Value" привел к той же ошибке
  • «Диапазон(»Input_QB»).Значение» привело к той же ошибке.
  • Восстановление листа и всех именованных диапазонов привело к той же ошибке.

Странный результат:

  • Переименование именованного диапазона под другим именем работает («Input_QBr»), однако восстановление старого имени («Input_QB») приводит к той же ошибке 1004.

Отзыв в Microsoft: Сообщено о проблеме через справку внутри Excel.

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

Frank Ball 03.08.2024 16:07

Объем — «Рабочая тетрадь», но мне нужно изучить то, что вы высказали.

cc1995 03.08.2024 16:10

Я перестроил именованный диапазон с областью действия в виде рабочего листа «Панель мониторинга». Он все еще выдавал ту же ошибку 1004.

cc1995 03.08.2024 16:14

Каково значение в указанном диапазоне? Это строка?

bugdrown 03.08.2024 16:39

Да, это строка «Тестовый именованный диапазон».

cc1995 03.08.2024 16:41

Пожалуйста, предоставьте ссылку на имя.

rotabor 03.08.2024 20:12

Относится к: =Панель мониторинга!$E$13

cc1995 03.08.2024 20:13

Вы можете попробовать распаковать файл Excel и напрямую отредактировать его XML. Это довольно радикальная мера, но однажды у меня возникла такая же проблема, и она решила ее. Это предполагает изменение расширения файла Excel на .ZIP, а затем открытие ZIP-файла, поиск именованного диапазона в файлах XML и удаление кода, создающего именованный диапазон. Затем сохраните изменения и сбросьте расширение файла на .xlsm. Просто имейте в виду, что если вы допустите ошибку при удалении кода, вы можете повредить файл, поэтому убедитесь, что у вас есть резервная копия.

Frank Ball 05.08.2024 15:50
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
8
97
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Нет решения – только первый шаг для проверки Почему бы сначала не получить все имена, принадлежащие рабочим листам, и проверить, существуют ли они?

Option Explicit

Sub ShowNames()
    Dim ws As Worksheet
    Dim na As Name
    For Each ws In ThisWorkbook.Worksheets
        Debug.Print "Worksheet: "; ws.Name
        For Each na In ws.Names
            Debug.Print na.Name
        Next na
    Next ws
End Sub

Запустил код, но он не вернул ни один из именованных диапазонов на информационной панели. Ищем способ заменить «ws.Name» диапазонами.

cc1995 03.08.2024 16:48

Я запустил этот код, и он отобразил именованные диапазоны, как и ожидалось. thesmallman.com/blog/2016/9/16/list-all-named-ranges-with-vb‌​a

cc1995 03.08.2024 16:56

Даже при отображении именованных диапазонов простой макрос возвращает ошибку 1004.

cc1995 03.08.2024 17:00

что происходит с: MsgBox(ThisWorkbook.Worksheets("Dashboard").Range("Input_QB"‌​).refersto)

Red Hare 03.08.2024 17:39

Привет, Красный Заяц. Та же ошибка 1004

cc1995 03.08.2024 18:28

Я только сейчас понимаю, что вы используете имя для адреса диапазона. Гораздо лучше использовать ссылку на диапазон: MsgBox(ThisWorkbook.Worksheets("Dashboard").names("foo").Ref‌​ersToRange.Value замените foo своим именем.

Red Hare 04.08.2024 13:24

Спасибо, Красный Заяц... к сожалению, это тоже не сработало. Я даже перестроил весь лист и все именованные диапазоны. Что-то не так под поверхностью.

cc1995 04.08.2024 16:54

Изменен макрос для отображения имен во всех областях:

Option Explicit

Sub ShowNames()
  Dim ws As Worksheet
  Dim na As Name
  Debug.Print "Workbook's names:"
  For Each na In ThisWorkbook.Names
    Debug.Print na.Name
  Next
  For Each ws In ThisWorkbook.Worksheets
    Debug.Print "Worksheet '"; ws.Name; "' names:"
    For Each na In ws.Names
      Debug.Print na.Name
    Next
  Next
End Sub

Также попробуйте выполнить простые тесты в окне Immediate (Debug):

?Names("Input_QB").Name
?Sheets("Dashboard").Names("Input_QB").Name

Надеюсь, это поможет получить объем. Альтернативно, чтобы вызвать имена в области книги:

   MsgBox Range("Input_QB").Value

То же самое можно применить к именам в области рабочего листа, если активным листом является лист, для которого определено имя, в противном случае

   MsgBox Sheets("Dashboard").Range("Input_E13").Value

Спасибо!!! Первый сработал, а второй выдал то же сообщение об ошибке. Я собираюсь попробовать имена в коде.

cc1995 03.08.2024 20:15

Компания Rotabor предложила решение этой проблемы. MsgBox (Names("Input_QB").Name) И все же, почему это перестало работать с кучей файлов после 15 июля?

cc1995 03.08.2024 20:22

@cc1995 cc1995 Я не Microsoft, не путайте нас, пожалуйста.

rotabor 03.08.2024 20:29

Мои извинения, ротобор. Я надеюсь, что мое редактирование ниже прояснит.

cc1995 03.08.2024 20:59

@cc1995 Никаких извинений не требуется. К сожалению, обращение в Microsoft похоже на обращение к Богу,

rotabor 03.08.2024 21:08

Я ценю правки Ротобора. Ни Рейндж, ни Шитс не работали. Это необычная проблема, которая изменилась в одном из выпусков Office 365.

cc1995 04.08.2024 02:44
Ответ принят как подходящий

Самый эффективный способ (обходной путь) решить эту проблему — переименовать все именованные диапазоны в книге, а затем обновить ссылки в коде vba.

  • XML-ответ Фрэнка Болла указывает на проблему внутри Excel (изменения XML выходят за рамки моих возможностей)
  • Ответ ротабора — еще один обходной путь проблемы Microsoft (много работы по использованию обходного пути). MsgBox Names("Input_QB").Значение

Если MS ответит на мой отзыв, я обновлю это.

Другие вопросы по теме