2012-10-23 20 views
5

Bir aralıktaki tüm hücreler arasında geçiş yapacak kod yazmaya çalışıyorum. Sonunda, daha karmaşık bir şey yapmak istiyorum ama sorun yaşadığım için kısa test programlarını oluşturmaya karar verdim. İlk örnek iyi çalışıyor ancak ikincisi (adlandırılmış bir aralıkta), "Object_Global Başarısız" hata mesajının bir "Yöntem Aralığı" verir. Yanlış yaptığım şey hakkında bir fikrin var mı? Bunu adlandırılmış bir aralıkta yapmak isterim ... Teşekkürler!belirtilen aralıktaki hücreler arasında döngü

İşleri:

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

Çalışmaz:

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

Bu ikinci örnekte tam olarak ne yapmaya çalıştığınız belli değil. Aslında "Rng" denen bir menzil var mı? –

cevap

6

gibi döngü onu RNG olarak bilinenler ikinci kod, aralık aralığınızın bir aralığı temsil eden bir değişken olduğunu ve şu şekilde davrantığını bilmeniz gerekir:

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 

Uyarı: Çoğu zaman aralığınızda döngü yapmayı önlemek için kodunuz daha hızlı olacaktır.

4

yerine, bu deneyin:

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

Mükemmel çalıştı, çok teşekkürler! –

+0

@ChristiFrench Harika - işe yaradı! Cevabımı "cevaplandı" olarak işaretlemeyi lütfen unutmayın. Teşekkürler. – David

6

Seti RNG = Range ("A1: A3") yaratıyor aralıklı bir nesne değil, aralıklı bir nesne. Eğer bir adlandırılmış aralık oluşturmak isterseniz bu

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 

çalışması gerekir ardından ayarlamak için

Range("A1:A3).Name="Rng" 

olarak oluşturur veya oluşturabileceğiniz ve Thsi

Dim c As Range 
Range("a1:a3").Name = "rng" 
For Each c In Names("rng").RefersToRange 
MsgBox c.Address 
Next c 
İlgili konular