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