2012-10-23 78 views
5

我正在嘗試編寫將通過範圍中的所有單元格循環的代碼。最終我想做一些更復雜的事情,但由於我遇到了麻煩,我決定創建一些簡短的測試程序。第一個例子工作正常,但第二個例子(命名範圍)沒有(給出「Object_Global Failed的方法範圍」錯誤消​​息)。任何想法,我做錯了什麼?我真的很想用一個命名的範圍來做這個...謝謝!循環通過指定範圍中的單元格

作品:

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

目前尚不清楚你在第二個例子中想要做什麼。你真的有一個叫做「Rng」的範圍嗎? –

回答

6

要調整第二個代碼,您需要認識到您的範圍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 

警告:大多數情況下,如果您可以避免在範圍內循環,代碼會更快。

4

試試這個,而是:

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

完美運作,非常感謝! –

+0

@ChristiFrench偉大 - 很高興它解決了!請不要忘記將我的回覆標記爲「已回答」。謝謝。 – David

6

設置RNG =範圍( 「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 
相關問題