【发布时间】:2012-01-29 05:14:12
【问题描述】:
我正在尝试使用我认为是相当简单的 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 在命名范围的 ALL 上计算为 False,我不知道为什么。
查看 VBA 帮助中的 Name 对象,我发现了 ValidWorkbookParameter,它看起来像 WorkbookParameter 的 ReadOnly 表亲,但是使用该方法没有任何区别。
我也尝试过明确设置ThisWorkbook.Names(i).WorkbookParameter = True,但这会导致错误:
“无效的过程调用或参数”
尽管WorkbookParameter 被列为读/写
任何人都可以解释为什么这不能像我预期的那样工作吗?我是否误解了 Name.WorkbookParameter 应该如何工作?有没有人能让它成功运行?
【问题讨论】:
-
感谢大家提供非常有用的解决方案...我仍然对 VBA 中
Name对象的WorkbookParameter和ValidWorkbookParameter属性的行为感到好奇。在我看来,这些属性并没有像宣传的那样工作。 -
不确定 WorkbookParameter 到底是什么,但怀疑它用于 Sharepoint 中的 Excel Services 而不是客户端 Excel
标签: vba excel-2007