Определить программно, ограничен ли именованный диапазон областью действия a workbook

Я пытаюсь выполнить то, что, как мне казалось, было бы довольно простым оператором vba, чтобы проверить, привязан ли именованный диапазон к книге или конкретному листу.


В качестве теста я создал новый документ Excel и добавил 6 именованных диапазонов. Вот как они размещены в диспетчере имен :

 Name         |   Refers To          |   Scope
 -------------+----------------------+-----------
 rng_Local01  |   =Sheet1!$A$2:$A$16 |   Sheet1
 rng_Local02  |   =Sheet1!$C$2:$C$16 |   Sheet1
 rng_Local03  |   =Sheet1!$E$2:$E$16 |   Sheet1
 rng_Global01 |   =Sheet1!$B$2:$B$16 |   Workbook
 rng_Global02 |   =Sheet1!$D$2:$D$16 |   Workbook
 rng_Global03 |   =Sheet1!$F$2:$F$16 |   Workbook

Я ожидаю, что запуск:

For i = 1 To ThisWorkbook.Names.Count
    If ThisWorkbook.Names(i).WorkbookParameter Then Debug.Print ThisWorkbook.Names(i).Name
Next i

приведет к регистрации трех именованных диапазонов с областью действия Workbook , однако , Ничего не произошло. Ошибки нет. .Names (i) .WorkbookParameter оценивается как False для ВСЕХ названных диапазонов, и я не знаю почему.


Просматривая объект Name в справке VBA, я обнаружил ValidWorkbookParameter , который, однако, выглядит как двоюродный брат ReadOnly WorkbookParameter использование этого метода НЕ имеет никакого значения.

Я также пробовал явно установить ThisWorkbook.Names (i) .WorkbookParameter = True , однако это приводит к ошибке:

«Неверный вызов процедуры или аргумент»

Несмотря на то, что WorkbookParameter указан как Чтение / запись


Может ли кто-нибудь пролить свет на то, почему это не работает, как я ожидал? Я неправильно понял, как должен работать Name.WorkbookParameter ? Кто-нибудь может заставить это работать успешно?

12
задан Cœur 22 January 2019 в 10:25
поделиться