限制在Range方法中的“命名范围”的数量

我正在使用下面的代码:

Dim rng As Range Set rng = Workbooks("import sheet.xls").Sheets("import").Range("project_name,project_author,project_code,project_breaker,default_fault_ac_mcb,default_fault_ac_mccb,default_fault_dc,default_fault_acb,default_rvdrop,default_svdrop,default_eff,default_pfactor,default_ratio,default_freq,default_sfactor_ac,default_spfactor") For Each cell In rng.Cells MsgBox cell Next cell 

现在project_nameproject_author等是工作表中不同的命名范围。 问题是当我添加另一个命名范围到上面的列表(已定义),我得到一个运行时错误1004(“select范围类失败的方法”)。

可以添加到范围对象的命名范围的数量是否有限制?

我找不到为什么发生这种情况,但我仍在寻找。

然而,这工作。 您可以使用UNION组合范围

 Sub Sample() Dim rng As Range, cell As Range, newRng As Range Set rng = Sheets("import").Range("project_name,project_author,project_code,project_breaker,default_fault_ac_mcb,default_fault_ac_mccb,default_fault_dc,default_fault_acb,default_rvdrop,default_svdrop,default_eff,default_pfactor,default_ratio,default_freq,default_sfactor_ac,default_spfactor") Set newRng = Union(rng, Sheets("import").Range("default_sid")) For Each cell In newRng.Cells MsgBox cell Next cell End Sub 

更新 :我找不到任何描述此行为的Microsoft文档,但经过一些实验,我可以确认可以添加到范围对象的最大命名范围数为16个。此行为可以在Excel 2003,2007 ,2010年。

奇怪的是,这个行为在Excel 2011 (MAC)中没有被复制。 我testing了19个名字,它的工作。

更新

经过更多的testing后,我发现如果你将范围命名为Name1Name3Name3等,那么我可以在Excel 2003-2007-2010中添加更多的命名范围。 所以它必须做一些名字的命名。

我已经向微软提交了一个错误。

样本文件进行testing

https://skydrive.live.com/redir.aspx?cid=cdd3f8abe20bbe3b&resid=CDD3F8ABE20BBE3B!157&parid=CDD3F8ABE20BBE3B!150&authkey=!ADP_QVBopsqenBA

我没有调查你的问题,但下面的几点可能会给你和Sid一些可能的解决scheme提示。

如果您访问Rng.Address ,则string的大小有限制。 我在互联网上发现声称的限制是253的意见,但我不相信这一点。 Rng.Address总是被截断在一个完整的子范围的末尾,所以你得到的string在语法上是正确的,只是不完整的。 所以限制取决于子范围的确切string大小。

我有相反的问题。 我有一张有数千行的工作表。 我使用AutoFilter来select感兴趣的行并保存范围。 但是, Rng.Address只给了我19个左右的兴趣范围。 我不得不使用For Each Cell In Rng并组合范围string来获得完整的string。

您的string长度为255个字符。 联盟中的子范围数目显然是没有限制的。 你可以尝试单独添加联合的子范围。

祝你好运。

PS如果你想我的汇编范围string例程,欢迎您。