1

我正在使用以下代码:

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

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

4

2 回答 2

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、等Name2Name3那么我可以在 Excel 2003-2007-2010 中添加更多命名范围。所以它必须与名称的命名有关。

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

测试样本文件

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

于 2012-04-20T07:13:38.263 回答
0

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

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

我遇到了相反的问题。我有一张有数千行的表格。我使用 AutoFilter 来选择感兴趣的行并保存范围。但Rng.Address只给了我前 19 个左右的兴趣范围。我必须使用For Each Cell In Rng和组合范围字符串来获得完整的字符串。

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

祝你好运。

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

于 2012-04-20T09:00:57.337 回答