कीवर्ड सेट वास्तव में VBA में क्या करता है?


150

उम्मीद है कि एक आसान सवाल है, लेकिन मैं इस के लिए एक तकनीकी जवाब काफी पसंद करेंगे!

के बीच क्या अंतर है:

i = 4

तथा

Set i = 4

VBA में? मुझे पता है कि बाद में एक त्रुटि होगी, लेकिन मुझे पूरी तरह से समझ में नहीं आता कि क्यों।


4
यहाँ पृष्ठभूमिकर्ता: stackoverflow.com/a/9924325/17034
हंस पसंत

जवाबों:


95

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)

5
एक VB ऑब्जेक्ट संदर्भ C पॉइंटर के समान नहीं है। और VB में "& i" के बराबर नहीं है।
टॉमालक

10
नहीं, वही नहीं, नहीं। लेकिन अवधारणा को समझने के लिए मेरे काफी करीब है।
ट्रेब

@Tomalak: आप VarPtr ()
Atmocreations

यह एक अच्छी उपमा नहीं है। इसका उदाहरण लें ( 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;! भेद कहीं और होता है।
निको ओ

77

आपके मामले में, यह एक त्रुटि पैदा करेगा। :-)

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)

44

से MSDN :

सेट कीवर्ड: VBA में, सेट कीवर्ड किसी वस्तु के असाइनमेंट और ऑब्जेक्ट की डिफ़ॉल्ट संपत्ति के असाइनमेंट के बीच अंतर करने के लिए आवश्यक है। चूंकि Visual Basic .NET में डिफ़ॉल्ट गुण समर्थित नहीं हैं, इसलिए सेट कीवर्ड की आवश्यकता नहीं है और अब समर्थित नहीं है।


अच्छी तरह से पाया गया, लेकिन एमएसडीएन पर आपके द्वारा पाए गए लेख का लिंक और भी बेहतर होगा :)
नील बार्नवेल

1
@Neil - यदि आप मेरी पोस्ट में MSDN पर क्लिक करते हैं तो लिंक वहाँ है।
गैल्व डेक्

2
जब MSDN को कॉपी करते हैं, तो कम से कम सही लेख। यह एक VB.NET का जिक्र है, VBA का नहीं।
तोमलक Tom

1
ओपी वीबीए के बारे में पूछ रहा है, और हालांकि सेट पर जानकारी अब .NET में उपयोग के लिए आवश्यक नहीं है, उपयोगी है, यह एक ऑफ विषय है और Object variable or With block variable not set
वीबीए

7
MSDN से निकालने के लिए बहुत बहुत धन्यवाद। अन्य सभी उत्तर, यहां तक ​​कि स्वीकृत भी बिंदु याद आ रहे हैं। 'सेट' डीफॉल्‍ट प्रॉपर्टी के बारे में है। बस stackoverflow.com/a/9924325/717732
quetzalcoatl

10

सेट का उपयोग ऑब्जेक्ट संदर्भ सेट करने के लिए किया जाता है, जैसा कि एक मान निर्दिष्ट करने के लिए विरोध किया जाता है।


1

मेरे सिर के ऊपर, सेट का उपयोग COM ऑब्जेक्ट को वेरिएबल्स में असाइन करने के लिए किया जाता है। एक सेट करने से मुझे संदेह है कि हुड के तहत यह AddRef () कॉल पर ऑब्जेक्ट को प्रबंधित करने के लिए आजीवन कर रहा है।


1
इसका उपयोग केवल COM वस्तुओं के लिए ही नहीं, बल्कि सभी वस्तुओं के लिए किया जाता है। SET का उपयोग करने का मुख्य कारण आपको गैलीन द्वारा समझाया गया है।
Ikke

0

इसलिए जब आप एक मूल्य निर्धारित करना चाहते हैं, तो आपको "सेट" की आवश्यकता नहीं है; अन्यथा, यदि आप किसी ऑब्जेक्ट, जैसे वर्कशीट / रेंज आदि का जिक्र कर रहे हैं, तो आपको "सेट" का उपयोग करने की आवश्यकता है।


-1

सेट एक कीवर्ड है और इसका उपयोग VBA में किसी ऑब्जेक्ट के संदर्भ को निर्दिष्ट करने के लिए किया जाता है।

उदाहरण के लिए, * नीचे उदाहरण से पता चलता है कि VBA में सेट का उपयोग कैसे किया जाता है।

वर्क्स के रूप में डिम WS

WS = ActiveWorkbook.Worksheets सेट करें ("Sheet1")

WS.Name = "अमित"

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