मुझे क्षमा करें क्योंकि मैं VBA में नौसिखिया हूं।
कभी-कभी मैं उपयोग करता हूं
Dim r as Range
r = Range("A1")
अन्य बार मैं उपयोग करता हूं
Set r = Range("A1")
अंतर क्या है? और मुझे कब उपयोग करना चाहिए?
जवाबों:
setऑब्जेक्ट रेफरेंस का संदर्भ देने तक उपयोग करने का कोई कारण नहीं है । केवल उस संदर्भ में इसका उपयोग करना अच्छा है। अन्य सभी सरल डेटा प्रकारों के लिए, बस असाइनमेंट ऑपरेटर का उपयोग करें। यह dim(आयाम) सभी चर हालांकि एक अच्छा विचार है :
सरल डेटा प्रकार के उदाहरण होगा integer, long, boolean, string। ये केवल डेटा प्रकार हैं और इनके अपने तरीके और गुण नहीं हैं।
Dim i as Integer
i = 5
Dim myWord as String
myWord = "Whatever I want"
A का उदाहरण objecta Range, a Worksheet, or a होगा Workbook। इनकी अपनी विधियाँ और गुण हैं।
Dim myRange as Range
Set myRange = Sheet1.Range("A1")
यदि आप बिना अंतिम पंक्ति का उपयोग करने का प्रयास करते हैं Set, तो VB एक त्रुटि देगा। अब जब आपके पास एक objectघोषित है तो आप इसके गुणों और विधियों का उपयोग कर सकते हैं।
myString = myRange.Value
Setबिना उपयोग करने के लिए ठीक है Dim?
Dim परिवर्तनशील घोषित करता है ।
Dim r As Range
Set एक वस्तु संदर्भ के लिए चर सेट करता है ।
Set r = Range("A1")
हालाँकि, मुझे नहीं लगता कि यह वही है जो आप वास्तव में पूछ रहे हैं।
कभी-कभी मैं उपयोग करता हूं:
Dim r as Range r = Range("A1")
यह कभी काम नहीं करेगा। आपके बिना Setरनटाइम एरर # 91 ऑब्जेक्ट वेरिएबल या ब्लॉक वेरिएबल सेट नहीं होगा । ऐसा इसलिए है क्योंकि आपको ऑब्जेक्ट संदर्भ के लिए चर मान निर्दिष्ट करने के लिए उपयोग करना चाहिएSet । फिर ऊपर कोड काम करेगा ।
मुझे लगता है कि नीचे दिया गया कोड दिखाता है कि आप वास्तव में क्या पूछ रहे हैं। मान लीजिए कि हम एक प्रकार की घोषणा नहीं करते हैं और इसके बजाय rएक Variantप्रकार होने देते हैं।
Public Sub test()
Dim r
debug.print TypeName(r)
Set r = Range("A1")
debug.print TypeName(r)
r = Range("A1")
debug.print TypeName(r)
End Sub
तो, चलो, यहाँ क्या होता है।
r वेरिएंट के रूप में घोषित किया जाता है
`Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
rRangeयुक्त सेल "A1" पर सेट है
Set r = Range("A1") ' TypeName(r) returns "Range"
rकी डिफ़ॉल्ट संपत्ति के मूल्य पर सेट है ।Range("A1")
r = Range("A1") ' TypeName(r) returns "String"
इस स्थिति में, किसी श्रेणी की डिफ़ॉल्ट संपत्ति है .Value, इसलिए कोड की निम्नलिखित दो पंक्तियाँ समतुल्य हैं।
r = Range("A1")
r = Range("A1").Value
डिफ़ॉल्ट ऑब्जेक्ट गुणों के बारे में अधिक जानने के लिए, कृपया चिप पियरसन की "एक कक्षा का डिफ़ॉल्ट सदस्य" देखें ।
आपके Setउदाहरण के लिए:
अन्य बार मैं उपयोग करता हूं
Set r = Range("A1")
यह पहली बार घोषित किए बिना काम नहीं करेगा कि rएक वस्तु Rangeया Variantवस्तु है ... Dimकथन का उपयोग करते हुए - जब तक कि आपके पास Option Explicitसक्षम नहीं है , जो आपको चाहिए। हमेशा। अन्यथा, आप उन पहचानकर्ताओं का उपयोग कर रहे हैं जिन्हें आपने घोषित नहीं किया है और वे सभी स्पष्ट रूप से वेरिएंट के रूप में घोषित किए गए हैं ।
मंद: आप एक चर को परिभाषित कर रहे हैं (यहाँ: r एक प्रकार की श्रेणी है)
सेट करें: आप संपत्ति सेट कर रहे हैं (यहां: r का मान सेट करें रेंज ("A1") - यह एक प्रकार नहीं है, लेकिन एक मूल्य है)।
आपको वस्तुओं के साथ सेट का उपयोग करना होगा, अगर आर एक सरल प्रकार (जैसे इंट, स्ट्रिंग) थे, तो आप बस लिखेंगे:
Dim r As Integer
r=5
Dim बस मूल्य और प्रकार की घोषणा करता है।
Set वैरिएबल को एक मान प्रदान करता है।
यदि एक चर को एक वस्तु के रूप में परिभाषित किया जाता है, जैसे मंद myfldr As Folder, तो इसे "सेट" कीवर्ड का उपयोग करके एक मान दिया जाता है।
Dim आयाम के लिए छोटा है और स्थानीय चर घोषित करने के लिए VBA और VB6 में उपयोग किया जाता है।
दूसरी ओर सेट करें, चर घोषणाओं से कोई लेना-देना नहीं है। Setकीवर्ड के लिए प्रयोग किया जाता है आवंटित एक नई वस्तु को एक वस्तु चर।
आशा है कि आपके लिए अंतर स्पष्ट करता है।
SET स्टेटमेंट पर VBA की मदद के अनुसार, यह ऑब्जेक्ट के संदर्भ को सेट करता है। यदि आप किसी प्रॉपर्टी को बदलते हैं तो वास्तविक ऑब्जेक्ट भी बदल जाएगा।
Dim newObj as Object
Set var1=Object1(same type as Object)
Set var2=Object1(same type as Object)
Set var3=Object1(same type as Object)
Set var4=Object1(same type as Object)
Var1.property1=NewPropertyValue
अन्य वर्स गुण भी बदलते हैं, इसलिए:
Var1.property1=Var2.property1=Var3.property1=Var4.property1=Object1.Property1=NewpropertyValue`
वास्तविक सभी संस्करण समान हैं!