У меня есть пара файлов, в которых ранее хорошие именованные диапазоны перестали работать. Запуск 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
Вещи, которые я пробовал безуспешно:
Странный результат:
Отзыв в Microsoft: Сообщено о проблеме через справку внутри Excel.
Объем — «Рабочая тетрадь», но мне нужно изучить то, что вы высказали.
Я перестроил именованный диапазон с областью действия в виде рабочего листа «Панель мониторинга». Он все еще выдавал ту же ошибку 1004.
Каково значение в указанном диапазоне? Это строка?
Да, это строка «Тестовый именованный диапазон».
Пожалуйста, предоставьте ссылку на имя.
Относится к: =Панель мониторинга!$E$13
Вы можете попробовать распаковать файл Excel и напрямую отредактировать его XML. Это довольно радикальная мера, но однажды у меня возникла такая же проблема, и она решила ее. Это предполагает изменение расширения файла Excel на .ZIP, а затем открытие ZIP-файла, поиск именованного диапазона в файлах XML и удаление кода, создающего именованный диапазон. Затем сохраните изменения и сбросьте расширение файла на .xlsm. Просто имейте в виду, что если вы допустите ошибку при удалении кода, вы можете повредить файл, поэтому убедитесь, что у вас есть резервная копия.


Нет решения – только первый шаг для проверки Почему бы сначала не получить все имена, принадлежащие рабочим листам, и проверить, существуют ли они?
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» диапазонами.
Я запустил этот код, и он отобразил именованные диапазоны, как и ожидалось. thesmallman.com/blog/2016/9/16/list-all-named-ranges-with-vba
Даже при отображении именованных диапазонов простой макрос возвращает ошибку 1004.
что происходит с: MsgBox(ThisWorkbook.Worksheets("Dashboard").Range("Input_QB").refersto)
Привет, Красный Заяц. Та же ошибка 1004
Я только сейчас понимаю, что вы используете имя для адреса диапазона. Гораздо лучше использовать ссылку на диапазон: MsgBox(ThisWorkbook.Worksheets("Dashboard").names("foo").RefersToRange.Value замените foo своим именем.
Спасибо, Красный Заяц... к сожалению, это тоже не сработало. Я даже перестроил весь лист и все именованные диапазоны. Что-то не так под поверхностью.
Изменен макрос для отображения имен во всех областях:
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
Спасибо!!! Первый сработал, а второй выдал то же сообщение об ошибке. Я собираюсь попробовать имена в коде.
Компания Rotabor предложила решение этой проблемы. MsgBox (Names("Input_QB").Name) И все же, почему это перестало работать с кучей файлов после 15 июля?
@cc1995 cc1995 Я не Microsoft, не путайте нас, пожалуйста.
Мои извинения, ротобор. Я надеюсь, что мое редактирование ниже прояснит.
@cc1995 Никаких извинений не требуется. К сожалению, обращение в Microsoft похоже на обращение к Богу,
Я ценю правки Ротобора. Ни Рейндж, ни Шитс не работали. Это необычная проблема, которая изменилась в одном из выпусков Office 365.
Самый эффективный способ (обходной путь) решить эту проблему — переименовать все именованные диапазоны в книге, а затем обновить ссылки в коде vba.
Если MS ответит на мой отзыв, я обновлю это.
Проверьте область действия именованного диапазона. Для него должно быть установлено значение «Рабочая книга», если оно уникально для рабочей книги, или имя рабочего листа, если оно специфично для рабочего листа.