2011-12-12 24 views
16

है वहाँ एक VBA आवेदन में एक If शर्त के रूप में नीचे देखा है:VBA: सशर्त - कुछ भी नहीं

If Not My_Object Is Nothing Then 
My_Object.Compute 

जब कोड डिबग मोड में चलाया जाता है, मैंने पाया कि If हालत एक सच्चे रिटर्न भी जब My_Object "कोई चर नहीं है"।

क्या कोई इसे समझा सकता है? मुझे My_Object.Compute केवल तभी निष्पादित किया जाना चाहिए जब My_Object मौजूद हो।

+2

कैसे की जाती है 'My_Object' घोषित? – GSerg

+2

क्या आप "कोई चर नहीं" से क्या मतलब समझ सकते हैं?यदि My_Object कुछ भी नहीं है, तो इसका निश्चित रूप से मतलब है कि यह किसी ऑब्जेक्ट को इंगित नहीं कर रहा है। इसके अलावा, My_Object की टाइप परिभाषा क्या है? –

+1

"मैं My_Object.Compute केवल तभी निष्पादित करना चाहता हूं जब My_Object मौजूद हो।" आपकी इच्छा इस प्रकार दी गई है। (मतलब, क्या कोई परिदृश्य है जहां यह मामला नहीं होगा ?!) –

उत्तर

16

Issun को अपनी टिप्पणी के आधार पर:

स्पष्टीकरण के लिए धन्यवाद। मेरे मामले में, वस्तु को घोषित किया गया है और यदि स्थिति से पहले बनाया गया है। तो, < कोई वैरिएबल> की जांच करने के लिए यदि मैं शर्त का उपयोग कैसे करूं? दूसरे शब्दों में, मैं नहीं चाहता कि My_Object.Compute निष्पादित करने के लिए> चाहते हैं My_Object < कोई चर है

आप ऑब्जेक्ट के गुणों में से एक की जांच करने की जरूरत है। हमें बताए बिना वस्तु क्या है, हम आपकी मदद नहीं कर सकते हैं।

मैंने कई सामान्य वस्तुओं का परीक्षण किया और पाया कि बिना किसी आइटम के Collection घड़ी विंडो में <No Variables> दिखाता है। अपने वस्तु वास्तव में एक संग्रह है, तो आप .Count संपत्ति का उपयोग कर <No Variables> हालत के लिए जाँच कर सकते हैं:

Sub TestObj() 
Dim Obj As Object 
    Set Obj = New Collection 
    If Obj Is Nothing Then 
     Debug.Print "Object not instantiated" 
    Else 
     If Obj.Count = 0 Then 
      Debug.Print "<No Variables> (ie, no items added to the collection)" 
     Else 
      Debug.Print "Object instantiated and at least one item added" 
     End If 
    End If 
End Sub 

यह भी ध्यान देने योग्य बात है कि अगर आप किसी भी वस्तु As New घोषित तो Is Nothing जांच बेकार हो जाता है लायक है। इसका कारण यह है कि जब आप किसी ऑब्जेक्ट को As New घोषित करते हैं तो इसे स्वचालित रूप से तब बनाया जाता है जब इसे पहली बार बुलाया जाता है, भले ही पहली बार जब आप इसे कॉल करते हैं तो यह देखना है कि यह मौजूद है या नहीं!

Dim MyObject As New Collection 
If MyObject Is Nothing Then ' <--- This check always returns False 

यह आपकी विशिष्ट समस्या का कारण प्रतीत नहीं होता है। लेकिन, चूंकि अन्य लोग Google खोज के माध्यम से यह प्रश्न पा सकते हैं, इसलिए मैं इसे शामिल करना चाहता था क्योंकि यह एक आम शुरुआत गलती है।

+0

के माध्यम से अच्छा उदाहरण इस तर्क से, कोई वस्तु की तुलना में किसी संपत्ति के 'वैल्यू' की जांच करेगा, निश्चित रूप से ऑब्जेक्ट तत्काल है, मौजूद है, और इसलिए 'नहीं है Nothing'। मैंने इस जवाब से निष्कर्ष निकाला और एक समस्या हल की, मैं अनुभव कर रहा था कि ओपी के रिक्त स्ट्रिंग मान का परीक्षण करने की कोशिश करने के समान था, जिसे मुझे '<>" "' '' '' ''' ''' '' ''' ''' '' ''' ''' '' '' '' '' '' के साथ करना था, न कि 'कुछ भी नहीं' परीक्षण। धन्यवाद - महान जवाब। – vapcguy

6

बस अपनी कक्षा वस्तु के कारण कोई चर नहीं है इसका मतलब यह नहीं है कि यह कुछ भी नहीं है। किसी ऑब्जेक्ट को घोषित करना और ऑब्जेक्ट करना और बनाना दो अलग-अलग चीजें हैं। देखो और देखें कि क्या आप ऑब्जेक्ट को सेट/बना रहे हैं।

उदाहरण के लिए शब्दकोश ऑब्जेक्ट ले लो - सिर्फ इसलिए कि इसमें कोई चर नहीं है इसका मतलब यह नहीं है कि यह नहीं बनाया गया है।

Sub test() 

Dim dict As Object 
Set dict = CreateObject("scripting.dictionary") 

If Not dict Is Nothing Then 
    MsgBox "Dict is something!" '<--- This shows 
Else 
    MsgBox "Dict is nothing!" 
End If 

End Sub 

हालांकि यदि आप कोई ऑब्जेक्ट घोषित करते हैं लेकिन इसे कभी नहीं बनाते हैं, तो यह कुछ भी नहीं है।

Sub test() 

Dim temp As Object 

If Not temp Is Nothing Then 
    MsgBox "Temp is something!" 
Else 
    MsgBox "Temp is nothing!" '<---- This shows 
End If 

End Sub 
+0

स्पष्टीकरण के लिए धन्यवाद। मेरे मामले में, वस्तु को घोषित किया गया है और यदि स्थिति से पहले बनाया गया है। तो, मैं की जांच करने के लिए यदि स्थिति का उपयोग कैसे करूं? दूसरे शब्दों में, मैं My_Object.Compute निष्पादित नहीं करना चाहता हूं यदि My_Object में <कोई चर नहीं है> – StarDotStar

+4

अपना कोड और वस्तु क्या है, मुझे डर है कि मुझे नहीं पता कि उस पर आपकी सहायता कैसे करें। – aevanko

+0

एक 'dict' उदाहरण! क्या आश्चर्य है :) - – JMax

0

मेरे नमूना कोड में, मैं my object को कुछ भी नहीं सेट कर रहा था, और मुझे वस्तु के साथ काम करने के लिए अगर कथन का "नहीं" भाग नहीं मिला। मैंने if My_Object is not nothing और if not My_Object is nothing की कोशिश की। यह सिर्फ एक वाक्य रचना बात मैं समझ नहीं है, लेकिन मैं चारों ओर गंदगी के लिए समय नहीं था हो सकता है, तो मैं इस तरह एक छोटे से वैकल्पिक हल किया:

if My_Object is Nothing Then 
    'do nothing 
Else 
    'Do something 
End if 
+0

आपके अनुभव ने मुझे सूचित करने में मदद की। मैं 'अगर My_Object कुछ भी नहीं' का उपयोग करने की कोशिश कर रहा था, लेकिन आपका दूसरा रूप ऐसा लगता है कि यह सही रास्ते पर है। क्या आपने कोशिश की 'अगर नहीं (My_Object कुछ भी नहीं है) तो' कुछ करें '? – mpag