2012-09-06 16 views
5

मैं एक VBA आवेदन बनाने रहा हूँ, और मैं निम्नलिखित कोड है: Object required error at getEffort(previousCell):वस्तु आवश्यक त्रुटि एक्सेल VBA


Dim previousCell As range 


Private Sub Worksheet_SelectionChange(ByVal target As range) 

Application.EnableEvents = False 
On Error GoTo ws_exit: 


Set previousCell = target 
getEffort (previousCell) '**Here i get object required** 

ws_exit: 
    Application.EnableEvents = True 
    MsgBox Err.Description 

End Sub 

Private Function getEffort(ByVal cell As range) 

' do soemthing 

End Sub 

मैं क्यों मैं त्रुटि संदेश मिलता है यकीन नहीं है। अगर मैं Target में जाता हूं, तो यह काम करता है।

धन्यवाद

+0

क्या _Private Function_ _Private Sub_ होना चाहिए क्योंकि आप मान वापस लौटने से संबंधित नहीं हैं और निजी फ़ंक्शन "अंत SUB" के साथ समाप्त होता है? – ray

+2

getEffort को कॉल करते समय ब्रांड्स का उपयोग न करें। यदि आप कोष्ठक का उपयोग करते हैं तो आपका कोड वापसी मूल्य की अपेक्षा करेगा (क्या कुछ भी वापस लौटाता है?) –

+0

नोट: यदि आप उपनाम से पहले 'कॉल' टाइप करते हैं तो आप पैराथेस का उपयोग कर सकते हैं - 'कॉल getEffort (पिछलासेल) ' –

उत्तर

0

यह लक्ष्य की तरह दिखता है एक वस्तु जो आप त्रुटि दे रहा है का एक उदाहरण के लिए सेट नहीं है। जब आप लक्ष्य में गुजरते हैं तो फ़ंक्शन फ़ंक्शन (तर्क) के लिए तर्क किसी ऑब्जेक्ट के उदाहरण पर सेट होता है। जब आप पिछलीसेल = लक्ष्य लक्ष्य को सेट करते हैं तो वास्तव में कुछ होना आवश्यक है या अन्यथा आपको निष्पादन त्रुटि मिल जाएगी।

कोशिश की स्थापना previouscell = ActiveCell

0

दो बातें: पहले, आप () का उपयोग करें या जब एक समारोह के रूप getEffort बुला वापसी मान के कुछ प्रकार शामिल नहीं की जरूरत है। आपको यह निर्धारित करने की भी आवश्यकता है कि क्या आप चाहते हैं कि यह सब/फ़ंक्शन हो, अभी आप दोनों का उपयोग कर रहे हैं। संभवतः आप इसे उप बना रहे हैं?

Dim previousCell As range 


Private Sub Worksheet_SelectionChange(ByVal target As range) 

Application.EnableEvents = False 
On Error GoTo ws_exit: 


Set previousCell = target 
getEffort previousCell '**Here i get object required** 
'or... 
call getEffort(previousCell) 

'add this too.. 
'exit sub 
ws_exit: 
    Application.EnableEvents = True 
    MsgBox Err.Description 

End Sub 

Private sub getEffort(ByVal cell As range) 

' do soemthing 

End sub 

इसके अलावा, अपने मुख्य कार्यक्रम कभी नहीं अपने त्रुटि बयान से पहले बाहर निकल जाता है, तो यह हमेशा कि संदेश बॉक्स पॉप अप होगा। एक खाली संदेश बॉक्स से हमेशा आने के लिए त्रुटि लेबल से पहले Exit Sub जोड़ने का प्रयास करें।

18

जैसा कि अन्य ने सुझाव दिया है, समस्या कोष्ठक है। किसी ने पर्याप्त रूप से समझाया नहीं है कि यह ब्रांड्स क्यों है।

जब आप कहते हैं कि यह:

getEffort previousCell 

तो फिर तुम getEffort प्रक्रिया में previousCellरेंज वस्तु गुजर रहे हैं। प्रक्रिया की अपेक्षा यही है और इसलिए यह खुश है।

जब आप कहते हैं कि यह: के लिए चारों ओर previousCell कारण VBA

getEffort (previousCell) 

कोष्ठकों का मूल्यांकनpreviousCell वस्तु। जब वीबीए का मूल्यांकन करता है तो वह ऑब्जेक्ट उस ऑब्जेक्ट की डिफ़ॉल्ट प्रॉपर्टी देता है। रेंज ऑब्जेक्ट की डिफ़ॉल्ट प्रॉपर्टी .Value है, जो एक स्ट्रिंग है।

तो पिछलीसेल का मूल्यांकन किया गया है और स्ट्रिंग प्राप्त करने के लिए पास हो जाता है। बेशक GetAffort एक रेंज ऑब्जेक्ट की अपेक्षा कर रहा है, इसलिए आपको त्रुटि संदेश प्राप्त होता है।

तथ्य यह है कि आप TargetpreviousCell पर एक लाल हेरिंग असाइन कर रहे हैं। जब आप previousCell पर स्विच करते हैं तो संभवतः आपने ब्रांड्स को पेश किया था। यदि आप मुझ पर विश्वास नहीं करते हैं, तो इसे आजमाएं:

getEffort (Target) 

आपको एक ही त्रुटि संदेश मिलेगा।

+3

+1 भयानक के लिए स्पष्टीकरण। –

+2

अतिरिक्त जानकारी के लिए, मेरे उत्तर को एक अलग प्रश्न के लिए देखें: [ByRef को मान प्राप्त होता है और वीबीए 6.0 में संदर्भ नहीं है] (http://stackoverflow.com/a/4877030/154439) – mwolfe02

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