Чтобы уточнить, скажем, у меня есть два именованных диапазона в моей книге. Оба именованных диапазона имеют одно и то же имя (скажем, «myName»), но один относится к Sheet1, а другой - к Workbook.
Учитывая имя (строку) именованного диапазона, я хочу получить именованный диапазон уровня рабочей книги.
Если я использую собственный вызов: wb.Names.Item("myName")
, он возвращает именованный диапазон в области видимости листа.
Если вместо этого я сделаю: wb.Names.Item("Sheet1!myName")
, это, очевидно, вернет диапазон имен листа. Я обнаружил, что могу использовать это, чтобы указать конкретные листы, но не книгу.
Есть ли способ указать, что я хочу, чтобы рабочая книга была ограничена областью?
В настоящее время я перебираю список всех имен и сравниваю свойство .Name, чтобы получить именованный диапазон области книги. Это работает, потому что свойство .Name добавляет "Sheet1!" в именованный диапазон с ограниченной областью листа. Однако это очень затратно, и я хочу избежать этого.
Set rng1 = Range("myName")
вернет диапазон из имени локального листа, если лист1 активен, иначе он вернет диапазон из имени книги. Я думаю, что это самый простой обходной путь - то есть проверьте, что активный лист отличается от листа, на котором размещено локальное имя, прежде чем использовать это имя в качестве области книги. Есть смысл? :) - person brettdj   schedule 10.10.2012