【问题标题】:loop through cells in named range循环遍历命名范围内的单元格
【发布时间】:2012-10-23 21:20:33
【问题描述】:

我正在尝试编写循环遍历范围内所有单元格的代码。最终我想做一些更复杂的事情,但由于遇到了麻烦,我决定创建一些简短的测试程序。第一个示例工作正常,但第二个(具有命名范围)没有(给出“Object_Global 的方法范围失败”错误消息)。关于我做错了什么的任何想法?我真的很想用一个命名范围来做这个......谢谢!

作品:

Sub foreachtest()
Dim c As Range
For Each c In Range("A1:A3")
    MsgBox (c.Address)
Next
End Sub

不起作用:

Sub foreachtest2()
Dim c As Range    
Dim Rng As Range
Set Rng = Range("A1:A3")
For Each c In Range("Rng")
    MsgBox (c.Address)
Next
End Sub

【问题讨论】:

  • 在第二个示例中您不清楚您要做什么。你真的有一个叫做“Rng”的范围吗?

标签: excel vba


【解决方案1】:

Set Rng =Range("A1:A3") 正在创建一个范围对象,而不是一个命名范围。这应该工作

Sub foreachtest2()
Dim c As Range    
Dim Rng As Range
Set Rng = Range("A1:A3")
For Each c In rng
    MsgBox (c.Address)
Next
End Sub

如果你想创建一个名为 Rng 的命名范围,那么

Range("A1:A3).Name="Rng"

将创建它,或者您可以像这样创建和循环它

Dim c As Range
Range("a1:a3").Name = "rng"
For Each c In Names("rng").RefersToRange
MsgBox c.Address
Next c

【讨论】:

    【解决方案2】:

    要调整您的第二个代码,您需要认识到您的范围 rng 现在是一个表示范围的变量并将其视为:

    Sub foreachtest2() 
    Dim c As Range     
    Dim Rng As Range 
    Set Rng = Range("A1:A3") 
    For Each c In rng
        MsgBox (c.Address) 
    Next 
    End Sub 
    

    警告:大多数情况下,如果您可以避免在范围内循环,您的代码会更快。

    【讨论】:

      【解决方案3】:

      试试这个吧:

      Sub foreachtest2()
      Dim c As Range
      Range("A1:A3").Name = "Rng"
      For Each c In Range("Rng")
          MsgBox (c.Address)
      Next
      End Sub
      

      【讨论】:

      • @ChristiFrench 太好了 - 很高兴它成功了!请不要忘记将我的回复标记为“已回答”。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 2018-01-18
      • 2016-04-20
      相关资源
      最近更新 更多