限制在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_name
, project_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后,我发现如果你将范围命名为Name1
, Name3
, Name3
等,那么我可以在Excel 2003-2007-2010中添加更多的命名范围。 所以它必须做一些名字的命名。
我已经向微软提交了一个错误。
样本文件进行testing :
我没有调查你的问题,但下面的几点可能会给你和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例程,欢迎您。