6

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

3 回答 3

9

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"

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

Dim c As Range
Range("a1:a3").Name = "rng"
For Each c In Names("rng").RefersToRange
MsgBox c.Address
Next c
于 2012-10-23T21:47:16.813 回答
7

试试这个,而不是:

Sub foreachtest2()
Dim c As Range
Range("A1:A3").Name = "Rng"
For Each c In Range("Rng")
    MsgBox (c.Address)
Next
End Sub
于 2012-10-23T21:39:45.933 回答
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 

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

于 2012-10-23T21:47:47.307 回答