2012-10-23 18 views
5

में कोशिकाओं के माध्यम से लूप मैं कोड लिखने की कोशिश कर रहा हूं जो एक श्रृंखला में सभी कोशिकाओं के माध्यम से लूप होगा। आखिर में मैं कुछ और जटिल करना चाहता हूं, लेकिन जब मुझे परेशानी हो रही थी तो मैंने कुछ छोटे परीक्षण कार्यक्रम बनाने का फैसला किया। पहला उदाहरण ठीक काम करता है लेकिन दूसरा (नामित श्रेणी के साथ) नहीं करता है ("ऑब्जेक्ट_ग्लोबल असफल" त्रुटि संदेश की विधि रेंज देता है)। क्या मैं गलत क्या कर रहा हूँ के बारे में कोई विचार? मैं वास्तव में एक नामित सीमा के साथ ऐसा करना चाहता हूं ... धन्यवाद!नामित श्रेणी

काम करता है:

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

यह स्पष्ट नहीं है कि आप उस दूसरे उदाहरण में क्या करने की कोशिश कर रहे हैं। क्या आपके पास वास्तव में "आरएनजी" नामक एक श्रेणी है? –

उत्तर

6

है जैसे कि यह पाश समायोजित करने के लिए अपने दूसरा कोड, आपको यह पहचानने की आवश्यकता है कि आपकी रेंज आरएनजी अब एक चर का प्रतिनिधित्व करने वाला एक चर है और इसे इस प्रकार मानता है:

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

@ क्रिस्टीफ्रेंच ग्रेट - खुशी है कि यह काम किया! कृपया मेरी प्रतिक्रिया को "उत्तर" के रूप में चिह्नित करना न भूलें। धन्यवाद। – David

6

सेट RNG = रेंज ("A1: ए 3") पैदा कर रही है एक श्रेणी वस्तु, नामित सीमा नहीं। यह काम करना चाहिए

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 
संबंधित मुद्दे