Я пытаюсь выполнить то, что, как мне казалось, было бы довольно простым оператором 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
? Кто-нибудь может заставить это работать успешно?