VBA जाँच करें कि क्या ऑब्जेक्ट सेट है


92

मेरे पास एक वैश्विक चर है जो मेरे कस्टम वर्ग का एक उदाहरण है।

यदि ऑब्जेक्ट सेट किया गया है या मुझे इसे इनिशियलाइज़ करने की आवश्यकता है, तो मैं कैसे जांच करूँ?

जवाबों:


139
If obj Is Nothing Then
    ' need to initialize obj: '
    Set obj = ...
Else
    ' obj already set / initialized. '
End If

या, यदि आप इसे अन्य तरीके से पसंद करते हैं:

If Not obj Is Nothing Then
    ' obj already set / initialized. '
Else
    ' need to initialize obj: '
    Set obj = ...
End If

2
मुझे पता था कि जब मैंने इसे Googled और कुछ नहीं पाया तो इसे सरल होना था! आपकी सहायताके लिए धन्यवाद!
18 अगस्त को इकोडे

3
ध्यान दें कि जाँच obj Is Nothingकरना जाँच के समान नहीं है IsNothing(obj)! यह जाँचने के लिए सही वाक्यविन्यास के लिए धन्यवाद ... यह निश्चित नहीं है कि IsNothing()अलग व्यवहार क्यों किया जाता है ...
मैट ब्राउन ने

1
मुझे Not (obj Is Nothing)समझने में आसानी होती है Not obj Is Nothing। मेरा दिमाग नहीं जानता कि एक "नहीं obj" क्या है!
मार्टिन एफ

आप यह भी लिख सकते हैं: अगर obj IsNot कुछ भी नहीं है जो मुझे बाकी की तुलना में बहुत अधिक स्पष्ट लगता है। यह थोड़े C # (ojb! = Null) के समान महसूस करता है
Alexandre

4

ऐसा करने के लिए (संयुक्त राष्ट्र) सुरक्षित तरीका - यदि आप स्पष्ट विकल्प का उपयोग नहीं करने के साथ ठीक हैं - है ...

Not TypeName(myObj) = "Empty"

यदि वस्तु घोषित नहीं की गई है तो यह मामले को भी संभालती है। यह उपयोगी है यदि आप कुछ व्यवहार को बंद करने की घोषणा करना चाहते हैं ...

Dim myObj as Object
Not TypeName(myObj) = "Empty"  '/ true, the object exists - TypeName is Object

'Dim myObj as Object
Not TypeName(myObj) = "Empty"  '/ false, the object has not been declared

यह काम करता है क्योंकि VBA एक खाली वेरिएंट प्रकार के रूप में एक अघोषित चर को ऑटो-इंस्टेंट करेगा। यह व्यवहार का प्रबंधन करने के लिए एक सहायक बूलियन की आवश्यकता को समाप्त करता है।


4
किसी के पास कभी भी कोई VBA कोड नहीं होना चाहिए Option Explicit। यह समस्याओं के अलावा कुछ भी नहीं हासिल करता है। "स्विच" व्यवहार के लिए, सशर्त संकलन का उपयोग करें।
आंद्रे

@andre, हाँ, उचित बिंदु। मैं इसके बिना ठीक महसूस करता हूं क्योंकि मैं गुंजाइश के लिए आयु संकेतन का उपयोग करता हूं, लेकिन मैं इन दिनों vba से बचने की कोशिश करता हूं अगर मैं कर सकता हूं। मैं जो कुछ भी देख रहा हूं उनमें से अधिकांश स्पष्ट घोषणाओं, नाम सुरक्षा और खूंखार वेरिएंट से बचने के बारे में है। आपके प्रमुख कारण क्या हैं?
कूल ब्लू

वास्तव में मुझे टाइपमैन के परिणाम के रूप में "कुछ भी नहीं" मिलता है, और "खाली" नहीं
पैट्रिक लेपेलटियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.