उम्मीद है कि एक आसान सवाल है, लेकिन मैं इस के लिए एक तकनीकी जवाब काफी पसंद करेंगे!
के बीच क्या अंतर है:
i = 4
तथा
Set i = 4
VBA में? मुझे पता है कि बाद में एक त्रुटि होगी, लेकिन मुझे पूरी तरह से समझ में नहीं आता कि क्यों।
उम्मीद है कि एक आसान सवाल है, लेकिन मैं इस के लिए एक तकनीकी जवाब काफी पसंद करेंगे!
के बीच क्या अंतर है:
i = 4
तथा
Set i = 4
VBA में? मुझे पता है कि बाद में एक त्रुटि होगी, लेकिन मुझे पूरी तरह से समझ में नहीं आता कि क्यों।
जवाबों:
setकिसी ऑब्जेक्ट के संदर्भ को असाइन करने के लिए उपयोग किया जाता है। C समतुल्य होगा
int i;
int* ref_i;
i = 4; // Assigning a value (in VBA: i = 4)
ref_i = &i; //assigning a reference (in VBA: set ref_i = i)
VBA on the left | C on the right) Dim A, B As Range | Range A, B;:। अपने सादृश्य के साथ A = B | A = B;जाना , सही होगा (और यह C में होगा), लेकिन Set A = B | A = &B;वास्तव में VBA में सही है (और यह C में विफल होगा)। VBA में, A = Bऔर Set A = BB के C के बराबर हैं A = B;! भेद कहीं और होता है।
आपके मामले में, यह एक त्रुटि पैदा करेगा। :-)
Setएक वस्तु संदर्भ प्रदान करता है। अन्य सभी असाइनमेंट्स के लिए (निहित, वैकल्पिक और थोड़ा-उपयोग किया गया) Letकथन सही है:
Set object = New SomeObject
Set object = FunctionReturningAnObjectRef(SomeArgument)
Let i = 0
Let i = FunctionReturningAValue(SomeArgument)
' or, more commonly '
i = 0
i = FunctionReturningAValue(SomeArgument)
से MSDN :
सेट कीवर्ड: VBA में, सेट कीवर्ड किसी वस्तु के असाइनमेंट और ऑब्जेक्ट की डिफ़ॉल्ट संपत्ति के असाइनमेंट के बीच अंतर करने के लिए आवश्यक है। चूंकि Visual Basic .NET में डिफ़ॉल्ट गुण समर्थित नहीं हैं, इसलिए सेट कीवर्ड की आवश्यकता नहीं है और अब समर्थित नहीं है।
Object variable or With block variable not set
मेरे सिर के ऊपर, सेट का उपयोग COM ऑब्जेक्ट को वेरिएबल्स में असाइन करने के लिए किया जाता है। एक सेट करने से मुझे संदेह है कि हुड के तहत यह AddRef () कॉल पर ऑब्जेक्ट को प्रबंधित करने के लिए आजीवन कर रहा है।