2012-10-23 14 views
5

Sto provando a scrivere il codice che eseguirà il ciclo di tutte le celle in un intervallo. Alla fine voglio fare qualcosa di più complicato, ma da quando ho avuto problemi ho deciso di creare alcuni brevi programmi di test. Il primo esempio funziona bene, ma il secondo (con un intervallo denominato) non lo fa (fornisce un messaggio di errore "Metodo intervallo di Object_Global Failed"). Qualche idea su cosa sto facendo male? Mi piacerebbe davvero farlo con un intervallo chiamato ... Grazie!loop through celle nell'intervallo denominato

Works:

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

non funziona:

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

Non è chiaro esattamente cosa si sta tentando di fare in quel secondo esempio. Avete in realtà un intervallo chiamato "Rng"? –

risposta

6

Per regolare la vostra secondo codice, è necessario riconoscere che l'intervallo rng è ora una variabile che rappresenta un intervallo e trattarlo come tale:

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 

Attenzione: la maggior parte delle volte, il codice sarà più veloce se è possibile evitare di scorrere l'intervallo.

4

Prova questo, invece:

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

Che ha funzionato perfettamente, grazie mille! –

+0

@ChristiFrench Great - felice ha funzionato! Per favore, non dimenticare di contrassegnare la mia risposta come "risposta". Grazie. – David

6

Set Rng = Range ("A1: A3") è la creazione di un oggetto intervallo, non un intervallo denominato. Questo dovrebbe funzionare

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 

Se si desidera creare un intervallo denominato chiamato Rng poi

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

creerà esso o è possibile creare e loop come thsi

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