VBA
CreateObject बनाम GetObject
खोज…
टिप्पणियों
अपने सरलतम पर, CreateObject
एक वस्तु का एक उदाहरण बनाता है जबकि GetObject
को किसी वस्तु का मौजूदा उदाहरण मिलता है। यह निर्धारित करना कि कोई वस्तु बनाई जा सकती है या नहीं, यह निर्भर करने वाली संपत्ति है । कुछ ऑब्जेक्ट्स सिंगलयूएस (उदाहरण के लिए, WMI) हैं और यदि वे पहले से मौजूद हैं तो नहीं बनाए जा सकते हैं। अन्य ऑब्जेक्ट्स (जैसे, एक्सेल) मल्टीयूज़ हैं और एक ही बार में कई इंस्टेंस चलाने की अनुमति देते हैं। यदि किसी ऑब्जेक्ट का इंस्टेंस पहले से मौजूद नहीं है और आप GetObject
प्रयास करते हैं, तो आपको निम्न ट्रेस करने योग्य संदेश प्राप्त होगा: Run-time error '429': ActiveX component can't create object
।
GetObject को उपस्थित होने के लिए इन दो वैकल्पिक मापदंडों में से कम से कम एक की आवश्यकता होती है:
- Pathname - वेरिएंट (स्ट्रिंग): फ़ाइल का पूर्ण पथ, जिसमें ऑब्जेक्ट युक्त फ़ाइल है। यह पैरामीटर वैकल्पिक है, लेकिन यदि Pathname को छोड़ दिया गया है तो क्लास की आवश्यकता है।
- वर्ग - वेरिएंट (स्ट्रिंग): ऑब्जेक्ट की औपचारिक परिभाषा (अनुप्रयोग और ऑब्जेक्ट टाइप) का प्रतिनिधित्व करने वाला एक स्ट्रिंग। पाथनेम को छोड़ दिया गया तो क्लास की आवश्यकता है।
CreateObject में एक आवश्यक पैरामीटर और एक वैकल्पिक पैरामीटर है:
- वर्ग - वेरिएंट (स्ट्रिंग): ऑब्जेक्ट की औपचारिक परिभाषा (अनुप्रयोग और ऑब्जेक्ट टाइप) का प्रतिनिधित्व करने वाला एक स्ट्रिंग। कक्षा एक आवश्यक पैरामीटर है।
- Servername - वेरिएंट (स्ट्रिंग): दूरस्थ कंप्यूटर का नाम जिस पर ऑब्जेक्ट बनाया जाएगा। यदि छोड़ा गया है, तो ऑब्जेक्ट को स्थानीय मशीन पर बनाया जाएगा।
क्लास हमेशा Application.ObjectType
के रूप में दो भागों से मिलकर बनता है।
- एप्लिकेशन - उस एप्लिकेशन का नाम जो ऑब्जेक्ट का हिस्सा है। |
- ऑब्जेक्ट प्रकार - ऑब्जेक्ट का प्रकार बनाया जा रहा है। |
कुछ उदाहरण वर्ग हैं:
- Word.Application
- एक्सेल पत्रक
- Scripting.FileSystemObject
GetObject और CreateObject का प्रदर्शन
ActiveX घटक द्वारा प्रदान की गई वस्तु का संदर्भ देता है।
जब ऑब्जेक्ट की वर्तमान आवृत्ति है या यदि आप पहले से लोड की गई फ़ाइल के साथ ऑब्जेक्ट बनाना चाहते हैं, तो GetObject फ़ंक्शन का उपयोग करें। यदि कोई वर्तमान उदाहरण नहीं है, और आप नहीं चाहते हैं कि ऑब्जेक्ट लोड की गई फ़ाइल से शुरू हो, तो CreateObject फ़ंक्शन का उपयोग करें।
Sub CreateVSGet()
Dim ThisXLApp As Excel.Application 'An example of early binding
Dim AnotherXLApp As Object 'An example of late binding
Dim ThisNewWB As Workbook
Dim AnotherNewWB As Workbook
Dim wb As Workbook
'Get this instance of Excel
Set ThisXLApp = GetObject(ThisWorkbook.Name).Application
'Create another instance of Excel
Set AnotherXLApp = CreateObject("Excel.Application")
'Make the 2nd instance visible
AnotherXLApp.Visible = True
'Add a workbook to the 2nd instance
Set AnotherNewWB = AnotherXLApp.Workbooks.Add
'Add a sheet to the 2nd instance
AnotherNewWB.Sheets.Add
'You should now have 2 instances of Excel open
'The 1st instance has 1 workbook: Book1
'The 2nd instance has 1 workbook: Book2
'Lets add another workbook to our 1st instance
Set ThisNewWB = ThisXLApp.Workbooks.Add
'Now loop through the workbooks and show their names
For Each wb In ThisXLApp.Workbooks
Debug.Print wb.Name
Next
'Now the 1st instance has 2 workbooks: Book1 and Book3
'If you close the first instance of Excel,
'Book1 and Book3 will close, but book2 will still be open
End Sub