Vba 限制“的数量”;命名范围“;范围内法

Vba 限制“的数量”;命名范围“;范围内法,vba,excel,Vba,Excel,我正在使用以下代码: 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

我正在使用以下代码:

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\u name
project\u author
等在工作表中是不同的命名范围。问题是,当我将另一个命名范围添加到上面的列表(已定义)时,我得到一个运行时错误1004(“范围类的选择方法失败”)


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

我找不到发生这种情况的原因,但我仍在查找

然而,这是可行的。您可以使用
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中添加更多的命名范围。所以它必须和名字的命名有关

我向微软提交了一个bug

用于测试的示例文件


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

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

我有相反的问题。我有一张上千行的床单。我使用AutoFilter选择感兴趣的行并保存范围。但是
Rng.Address
只给了我前19个左右的兴趣范围。我必须对Rng中的每个单元格使用
,并组装范围字符串以获得完整字符串

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

祝你好运


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

如果我添加了超过16个命名范围,则会出现不同的错误。它表示
应用程序定义的
对象定义的错误
。Le tme看看这个……我理解你想表达的观点,但让我困惑的是,同样的代码在Excel 2011中运行得很好。可能PC版本中有字符串限制,而Mac版本没有。PC和Mac版本之间似乎存在着奇怪的差异。这是陌生人吗?祝你调查顺利。
这是陌生人吗?
不是:)我发现最糟糕的区别是,如果你在WinPC中保护你的VBA,你就不能使用相同的密码在MAC中打开VBA!!!我可以忍受MAC没有WinPC的东西。但反过来呢?太多了,我消化不了LOL@TonyDallimore很抱歉回复晚了。我不在办公室。但我无法得到你的答案…为什么子范围的数量有限制???@siddarth Rout我做了同样的事情,但没有在代码中完成。我在excel中创建了范围…你指的是代码的哪一部分?你有没有试着给
命名范围起个小名字呢
?实际上,我在excel中创建了一个新的命名范围,它包含了我想检查的所有范围。是的,现在它工作了,但现在只有一个范围(问题仍然是,微软正在限制可以在range方法中输入的命名范围的数量,不是吗?)不,微软没有限制命名范围的
数量
,而是限制名称中的
字符数
。请参阅上面帖子中我的评论
更多更新