2012-02-26 13 views
6

मैं वीबीए (एक्सेल) में सेल और रेंज द्वारा थोड़ा उलझन में हूं। तार्किक रूप से, मैं आकार = 1 के साथ एक सीमा के रूप में एक सेल सोच सकता है; और मुझे लगता है कि सेल से बाहर निकलना आसान है।एक्सेल वीबीए: टाइप रेंज और सेल

यदि मैं EntireRow प्रॉपर्टी here की एपीआई पढ़ता हूं तो यह सीमा पर चल रहा है। लेकिन, नीचे दिए गए कोड काम, पाश अंदर cell'variable का संकेत 'एक सीमा

Set import = Sheets("import") 
    Set spRange = import.Range("A2") 
    Set spRange = import.Range("A2:" & spRange.End(xlDown).Address) 
    For Each cell In spRange 
     dict.Add cell.Offset(0, 2).Text, cell.EntireRow 
    Next cell 

एक ही समय में है, नीचे दिए गए कोड का संकेत प्रकार मेल नहीं खाता removecell फ़ंक्शन को कॉल करें जब एक त्रुटि देता है। फ़ंक्शन परिभाषा में लक्ष्यसेल का प्रकार क्या होना चाहिए?

Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell (cell) 
Next cell 


Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

आप ठीक कह रहे हैं। सेल 1 आइटम के साथ एक रेंज है। 'बूलियन' प्रकार का 'वैल' है? – shahkalpesh

+0

हां। यह विधि पहले काम कर रही थी जब मैंने "सेल.Text" पारित किया था, और हटाए गए विधि सेलवाल स्ट्रिंग के रूप में इसे स्वीकार कर लिया था। अब मैं सेल के बजाय सेल पास करके सेल (रेंज) को पारित करने की कोशिश कर रहा हूं। पाठ – bsr

उत्तर

4

यह संकलित करता है तथा रन:

Sub Tester() 
Dim spRange As Excel.Range 
Dim cell As Excel.Range 
Dim mySheet As Excel.Worksheet 
Dim val As Boolean 

Set mySheet = ActiveSheet 
Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell(cell) 
Next cell 

End Sub 

Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

धन्यवाद। "डिम सेल एक्सेल। रेंज" ने मुझे एक सुराग दिया, क्योंकि मैं पहले स्पष्ट रूप से सेल घोषित नहीं कर रहा था। जैसा कि मैंने उल्लेख किया है, मैंने अभी विधि को रूपांतरित कर दिया है, और पहले मुझे स्पष्ट रूप से सेल घोषित करने की आवश्यकता नहीं थी। मुझे मिली त्रुटि थोड़ा भ्रामक था। – bsr

+2

रेंज ऑब्जेक्ट का डिफ़ॉल्ट मान वैल्यू है, इसलिए सेल को रेंज के रूप में घोषित नहीं किया गया है, इसलिए सेल को वैल्यू माना जाता था, जो उचित है, "टाइप मिस्चैच" का कारण बनता है। सभी चर घोषित करने के लिए यह बहुत अच्छा अभ्यास है। इसे मजबूर करने के लिए, वीबीई में टूल्स> विकल्प> संपादक> वैरिएबल घोषणा की आवश्यकता है। यह सभी नए मॉड्यूल के शीर्ष पर विकल्प स्पष्ट जोड़ देगा, और आपको अविकसित चर के लिए "वैरिएबल परिभाषित नहीं किया गया" कंपाइलर त्रुटि देगा। आप मौजूदा मॉड्यूल के शीर्ष पर विकल्प स्पष्टीकरण भी टाइप कर सकते हैं। परिवर्तनीय घोषित करने के लिए अच्छी टिप पर –

+0

+1! –

संबंधित मुद्दे