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

时间:2012-04-20 05:08:41

标签: excel vba excel-vba

我使用以下代码:

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(“范围类的选择方法失败”)。

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

2 个答案:

答案 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个名字测试过它。

更新

经过更多测试后,我发现如果您将范围命名为Name1Name2Name3等,那么我可以在Excel 2003-2007-2010中添加更多命名范围。所以它必须对名称的命名做些什么。

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

测试样本

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

答案 1 :(得分:0)

我没有调查过您的问题,但以下几点可能会给您和Sid一些关于可能解决方案的提示。

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

我遇到了相反的问题。我有一张包含数千行的表格。我使用AutoFilter选择感兴趣的行并保存了范围。但是Rng.Address只给了我大约19个左右的兴趣范围。我不得不使用For Each Cell In Rng并组装范围字符串以获取完整的字符串。

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

祝你好运。

PS如果你想要我的汇编范围字符串例程,欢迎你。