我使用以下代码:
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(“范围类的选择方法失败”)。
可以添加到范围对象的命名范围数量是否有限制?
答案 0 :(得分:0)
我找不到任何关于为什么会发生这种事情的事情,但我仍在寻找。
然而这有效。您可以使用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)中 重复。我用19个名字测试过它。
更新
经过更多测试后,我发现如果您将范围命名为Name1
,Name2
,Name3
等,那么我可以在Excel 2003-2007-2010中添加更多命名范围。所以它必须对名称的命名做些什么。
我向微软提交了一个错误。
测试样本:
答案 1 :(得分:0)
我没有调查过您的问题,但以下几点可能会给您和Sid一些关于可能解决方案的提示。
如果您访问Rng.Address
,则字符串的大小有限制。我在互联网上发现评论声称限制是253但我不相信这一点。 Rng.Address
总是在完整的子范围的末尾被截断,因此你得到的字符串在语法上是正确的,只是不完整。因此,限制取决于子范围的确切字符串大小。
我遇到了相反的问题。我有一张包含数千行的表格。我使用AutoFilter选择感兴趣的行并保存了范围。但是Rng.Address
只给了我大约19个左右的兴趣范围。我不得不使用For Each Cell In Rng
并组装范围字符串以获取完整的字符串。
您的字符串长度为255个字符。联盟中的子范围数量显然没有限制。您可以尝试单独将子范围添加到联合中。
祝你好运。
PS如果你想要我的汇编范围字符串例程,欢迎你。