मुझे क्षमा करें क्योंकि मैं 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 का उदाहरण object
a 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
r
Range
युक्त सेल "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`
वास्तविक सभी संस्करण समान हैं!