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

Chr*_*nch 6 excel vba

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

作品:

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

不起作用:

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
Run Code Online (Sandbox Code Playgroud)

Cha*_*ams 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
Run Code Online (Sandbox Code Playgroud)

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

Range("A1:A3).Name="Rng"
Run Code Online (Sandbox Code Playgroud)

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

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


nut*_*sch 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 
Run Code Online (Sandbox Code Playgroud)

警告:大多数情况下,如果可以避免在整个范围内循环,则代码会更快.


Dav*_*vid 6

试试这个,相反:

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