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