VBA GetObject - Excel VBA में GetObject फ़ंक्शन का उपयोग कैसे करें?

एक्सेल VBA GETOBJECT फ़ंक्शन

हम एक्सेल फ़ाइल से एक ActiveX ऑब्जेक्ट को एक्सेस करने के लिए MS एक्सेल में VBA में GetObject फ़ंक्शन का उपयोग कर सकते हैं और फिर ऑब्जेक्ट को ऑब्जेक्ट वेरिएबल में असाइन कर सकते हैं। किसी भी Microsoft अनुप्रयोग जैसे MS Word, MS Outlook, MS PowerPoint, और Internet Explorer, आदि को नियंत्रित करने के लिए OLE (ऑब्जेक्ट लिंकिंग और एंबेडिंग) या COM (कम्पाउंड ऑब्जेक्ट मॉड्यूल) तकनीक का उपयोग करने के लिए, हम VBA GETOBJECT फ़ंक्शन का उपयोग कर सकते हैं।

हम ऑब्जेक्ट बनाने के लिए CreateObject फ़ंक्शन का उपयोग करते हैं, और GETOBJECT फ़ंक्शन ऑब्जेक्ट का संदर्भ देता है।

GETOBJECT फ़ंक्शन के लिए सिंटैक्स

GET OBJECT फ़ंक्शन के पास इन नामित तर्क हैं:

  1. Pathname: हमें पूर्ण पथ और फ़ाइल के नाम को निर्दिष्ट करना होगा जिसमें ऑब्जेक्ट को पुनः प्राप्त करना है। यह एक वैकल्पिक तर्क है, वास्तव में, GetObject फ़ंक्शन में दोनों तर्क वैकल्पिक हैं, लेकिन यदि 'pathname' को छोड़ दिया जाता है, तो दूसरे तर्क 'वर्ग' की आवश्यकता होती है।
  2. वर्ग : यह भी एक वैकल्पिक तर्क है जैसा कि पहले भी बताया गया है। यह ऑब्जेक्ट के वर्ग का प्रतिनिधित्व करने वाले एक स्ट्रिंग को स्वीकार करता है।

हम 'वर्ग' तर्क को निर्दिष्ट करने के लिए सिंटैक्स 'appname.objecttype' का उपयोग करते हैं।

  1. Appname: हमें एप्लिकेशन नाम निर्दिष्ट करना होगा, जो ऑब्जेक्ट प्रदान करेगा।
  2. ऑब्जेक्ट प्रकार: हम बनाने के लिए ऑब्जेक्ट के वर्ग का प्रकार निर्दिष्ट करते हैं।

एक्सेल VBA GETOBJECT फ़ंक्शन का उदाहरण

मान लीजिए हमारे पास 3 टेबल वाला एक शब्द दस्तावेज़ है।

हम एक VBA कोड लिखना चाहते हैं जो दस्तावेज़ की सभी तालिकाओं को एक्सेल शीट में आयात करेगा। ऐसा ही करने के लिए, हमें VBA में CreateObject और GetObject फ़ंक्शन का उपयोग करना होगा।

चरण होंगे:

  • एक एक्सेल फ़ाइल बनाएँ और फ़ाइल को .xlsm एक्सेल एक्सटेंशन (एक्सेल मैक्रो-इनेबल्ड वर्कबुक) के साथ सेव करें क्योंकि हमें VBA कोड (एक मैक्रो) चलाना होगा।
  • शॉर्टकट कुंजी (Alt + F11) के साथ मूल दृश्य संपादक खोलें या एक्सेल में 'डेवलपर' टैब में 'कोड' समूह में 'Visual Basic' कमांड का उपयोग करें।
  • VBA संपादक के बाईं ओर 'ThisWorkbook' पर डबल क्लिक करें और उसके बाद स्क्रीन के शीर्ष पर दिखाई गई सूची में से 'वर्कबुक' चुनें।
  • सूची से 'ओपन' चुनें।
  • अब हमें इन दो लाइनों के बीच का कोड लिखना होगा।
  • सबसे पहले, हम ऑब्जेक्ट्स (MS Word Document और MS Word Application Object) को धारण करने के लिए वैरिएबल घोषित करेंगे और डॉक्यूमेंट का नाम रखने के लिए एक hold स्ट्रिंग वेरिएबल ’जहां से हमें टेबल निकालने की जरूरत है।
  • त्रुटि से निपटने के लिए, हम एक बयान जोड़ेंगे। यह कथन VBA प्रोग्राम को त्रुटि को अनदेखा करने और कोड की अगली पंक्ति के साथ निष्पादन को फिर से शुरू करने के लिए कहता है। "त्रुटि को फिर से शुरू करें" पर बयान रनटाइम त्रुटियों को ठीक नहीं करता है, लेकिन इसका सीधा सा अर्थ है कि त्रुटि के कारण लाइन के बाद प्रोग्राम निष्पादन जारी रहेगा।
  • अब हम Word अनुप्रयोग ऑब्जेक्ट की वर्तमान आवृत्ति तक पहुँच प्राप्त करने के लिए GetObject फ़ंक्शन का उपयोग करेंगे ।
  • यदि मामले में एमएस वर्ड एप्लीकेशन का कोई वर्तमान उदाहरण नहीं है, या ActiveX घटक ऑब्जेक्ट नहीं बना सकता है या इस ऑब्जेक्ट का संदर्भ नहीं दे सकता है, तो त्रुटि 429 है। इसके लिए, हम कोड में दो लाइनें नीचे जोड़ देंगे। त्रुटि को संभालने के बाद, हमें CreateObject फ़ंक्शन का उपयोग करके MS Word एप्लिकेशन ऑब्जेक्ट का एक उदाहरण बनाने की आवश्यकता है ।
  • MS Word एप्लिकेशन को दृश्यमान बनाने के लिए, हम 'WdApp' ऑब्जेक्ट के दृश्यमान गुण को TRUE में बदल देंगे ।
  • हमें शब्द दस्तावेज़ का स्थान और फ़ाइल नाम खोजने की आवश्यकता है, जिसमें से हम एक एक्सेल शीट में तालिकाओं को आयात करना चाहते हैं और "strDocName" को उसी नाम और स्थान को निर्दिष्ट करना चाहते हैं , और हम उसके गुणों की जांच कर सकते हैं। फ़ाइल।

'गुण' संवाद बॉक्स खोलने के लिए , बस फ़ाइल का चयन करें और 'Alt + Enter ' दबाएँ

  • यदि फ़ाइल निर्दिष्ट स्थान पर मौजूद नहीं है, तो कोड संदेश को यह कहते हुए लौटाता है, "फ़ोल्डर पथ में फ़ाइल का विवरण नहीं मिला।" शीर्षक होगा "क्षमा करें, वह दस्तावेज़ नाम मौजूद नहीं है।"
  • अब हमें एमएस वर्ड एप्लिकेशन को सक्रिय करना होगा और शब्द डॉक्यूमेंट के साथ वेरिएबल 'वाडोक' को असाइन करना होगा, जिसमें फाइल नाम 'स्ट्रैडोकनाम' में संग्रहित होगा।
  • यदि फ़ाइल पहले से नहीं खोली गई है, तो हमें दस्तावेज़ को खोलने और एप्लिकेशन को सक्रिय करने की आवश्यकता है।
  • शब्द दस्तावेज़ को सक्रिय करने के बाद, हमें दस्तावेज़ में तालिकाओं तक पहुंचने की आवश्यकता है। ऐसा ही करने के लिए, हम कुछ चर बनाएंगे।

टबल पूर्णांक चर है, जो दस्तावेज़ में तालिकाओं की गिनती को संग्रहीत करेगा।

rowWd is the long variable, which will store the number of rows in a particular table.

colWd is the long variable, which will store the number of columns in a particular table.

  • We need to count the number of tables in the document, and if there is notable in the document, then we will display a message box to the user that “No Tables found in the Word document.”
  • To access tables in the document and to write the content in the excel sheet, we will run a ‘For’ VBA loop for a number of tables times, and within this VBA loop, we will run nested ‘for’ loops for accessing every row and every column in the row.
  • As we do not want to save the document and quit the application. We should also release the memory of the system. To do the same, we will write the following code.

Now, whenever we open the excel file, the fill is updated with table content from the word document.

Code:

Private Sub Workbook_Open() Rem Declaring Object variables to access object created by GETOBJECT Dim WdApp As Object, wddoc As Object Rem Declaring a string variable to access the Word document Dim strDocName As String Rem Error handling On Error Resume Next Rem Activating MS Word if it is already opened Set WdApp = GetObject(, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Creating a Word application object if MS Word is not already opened Set WdApp = CreateObject("Word.Application") End If WdApp.Visible = True strDocName = "C:UsersCBA7_01DesktopMarks Details.docx" Rem Checking relevant directory for the relevant document Rem If not found then informing the user and closing the program If Dir(strDocName) = "" Then MsgBox "The file " & strDocName & vbCrLf & "was not found in the folder path" & vbCrLf & "C:UsersCBA7_01.", _vbExclamation, "Sorry, that document name does not exist." Exit Sub End If WdApp.Activate Set wddoc = WdApp.Documents(strDocName) If wddoc Is Nothing Then Set wddoc = WdApp.Documents.Open("C:UsersCBA7_01DesktopMarks Details.docx") wddoc.Activate Rem Defining variables to access the tables in the word document Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 With wddoc Tble = wddoc.Tables.Count If Tble = 0 Then MsgBox "No Tables found in the Word document", vbExclamation, "No Tables to Import" Exit Sub End If Rem Starting the looping process to access tables and their rows, columns For i = 1 To Tble With.Tables(i) For rowWd = 1 To .Rows.Count For colWd = 1 To .Columns.Count Cells(x, y) = WorksheetFunction.Clean(.cell(rowWd, colWd).Range.Text) Rem Accessing next column y = y + 1 Next colWd Rem Going to next row and start from column 1 y = 1 x = x + 1 Next rowWd End With Next End With Rem we do not need to save the word document wddoc.Close Savechanges:=False Rem we quit MS Word application WdApp.Quit Rem We finally release system memory allocated for the 2 object variables Set wddoc = Nothing Set WdApp = Nothing End Sub

याद रखने वाली चीज़ें

  1. कुछ एकल-आवृत्ति ऑब्जेक्ट है, जिसके लिए उस ऑब्जेक्ट की केवल एक आवृत्ति उत्पन्न होती है, भले ही वह संख्या जिसके लिए CreateObject चलाया जाता है। GetObject फ़ंक्शन हर समय एक ही उदाहरण देता है जब इसे शून्य लंबाई की स्ट्रिंग के साथ कहा जाता है, और एक त्रुटि तब आती है जब 'pathname' तर्क का उल्लेख नहीं किया जाता है।
  2. VBA के साथ बनाए गए वर्ग के संदर्भ तक पहुँचने के लिए हम GetObject का उपयोग नहीं कर सकते।
  3. यदि मामले में, एमएस वर्ड एप्लिकेशन का कोई सक्रिय उदाहरण नहीं है, या हम नहीं चाहते हैं कि ऑब्जेक्ट पहले से लोड की गई फ़ाइल के साथ शुरू हो, तो हम ऑब्जेक्ट बनाने के लिए पहले CreateObject फ़ंक्शन का उपयोग करें और फिर ऑब्जेक्ट को एक्सेस करने के लिए GetObject फ़ंक्शन का उपयोग करें। ।

दिलचस्प लेख...