循环遍历命名范围中的单元格

时间:2012-10-23 21:20:34

标签: excel vba

我正在尝试编写将循环遍历范围内所有单元格的代码。最终我想做一些更复杂的事情,但由于我遇到了麻烦,我决定创建一些简短的测试程序。第一个示例工作正常但第二个示例(带有命名范围)没有(给出“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

3 个答案:

答案 0 :(得分:9)

设置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"

将创建它,或者您可以像thsi

一样创建和循环它
Dim c As Range
Range("a1:a3").Name = "rng"
For Each c In Names("rng").RefersToRange
MsgBox c.Address
Next c

答案 1 :(得分:7)

要调整您的第二个代码,您需要认识到您的范围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 

警告:大部分时间,如果您可以避免在整个范围内循环,您的代码会更快。

答案 2 :(得分:6)

试试这个,而不是:

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