VBA GetObject | كيفية استخدام دالة GetObject في Excel VBA؟

وظيفة Excel VBA GETOBJECT

يمكننا استخدام دالة GetObject في VBA في MS Excel للوصول إلى كائن ActiveX من ملف Excel ثم تعيين الكائن إلى متغير كائن. لاستخدام تقنية OLE (ربط الكائنات وتضمينها) أو COM (وحدة الكائن المركب) للتحكم في أي تطبيق من تطبيقات Microsoft مثل MS Word و MS Outlook و MS PowerPoint و Internet Explorer وما إلى ذلك ، يمكننا استخدام وظيفة VBA GETOBJECT.

نستخدم دالة CreateObject لإنشاء الكائن وتقوم دالة GETOBJECT بإرجاع المرجع إلى الكائن.

بناء الجملة لوظيفة GETOBJECT

تحتوي وظيفة GET OBJECT على هذه الوسائط المسماة:

  1. اسم المسار : نحتاج إلى تحديد المسار الكامل واسم الملف الذي يحتوي على الكائن المراد استرداده. هذه وسيطة اختيارية ، في الواقع ، كلتا الوسيطتين في دالة GetObject اختيارية ولكن إذا تم حذف "اسم المسار" ، فستكون الوسيطة الثانية "فئة" مطلوبة.
  2. الفئة : هذه أيضًا وسيطة اختيارية كما تم تحديدها سابقًا أيضًا. هذا يقبل سلسلة تمثل فئة الكائن.

نستخدم الصيغة "appname.objecttype" لتحديد وسيطة "class".

  1. اسم التطبيق : نحتاج إلى تحديد اسم التطبيق الذي سيوفر الكائن.
  2. نوع الكائن : نحدد نوع فئة الكائن المراد إنشاؤه .

مثال على وظيفة Excel VBA GETOBJECT

يمكنك تنزيل قالب VBA GetObject من هنا - قالب VBA GetObject

لنفترض أن لدينا مستند Word يحتوي على 3 جداول.

نريد كتابة كود VBA الذي سيقوم باستيراد جميع الجداول الموجودة في المستند إلى ورقة Excel. للقيام بالشيء نفسه ، سنحتاج إلى استخدام دالة CreateObject و GetObject في VBA.

ستكون الخطوات:

  • قم بإنشاء ملف excel واحفظ الملف بامتداد .xlsm excel (مصنف Excel Macro-Enabled) لأننا سنحتاج إلى تشغيل كود VBA (ماكرو).
  • افتح محرر Visual Basic باستخدام مفتاح الاختصار (Alt + F11) أو باستخدام أمر "Visual Basic" في مجموعة "Code" في علامة التبويب "Developer" في Excel.
  • انقر نقرًا مزدوجًا فوق "ThisWorkbook" على الجانب الأيسر من محرر VBA واختر "مصنف" من القائمة الموضحة بعد ذلك في الجزء العلوي من الشاشة.

  • اختر "فتح" من القائمة.

  • الآن نحن بحاجة إلى كتابة الكود بين هذين السطرين.

  • أولاً ، سنعلن عن المتغيرات التي تحتوي على الكائنات (مستند MS Word وكائن MS Word Application) و "String Variable" للاحتفاظ باسم المستند من حيث نحتاج إلى استخراج الجداول.

  • لمعالجة الأخطاء ، سنضيف عبارة واحدة ، تخبر هذه العبارة برنامج VBA بتجاهل الخطأ واستئناف التنفيذ مع السطر التالي من التعليمات البرمجية. لا تصلح عبارة "عند الخطأ ، استئناف التالي" أخطاء وقت التشغيل ولكنها تعني ببساطة أن تنفيذ البرنامج سيستمر من السطر الذي يتبع السطر الذي تسبب في حدوث الخطأ.

  • سنستخدم الآن وظيفة GetObject للوصول إلى المثيل الحالي لكائن تطبيق Word.

  • في حالة عدم وجود مثيل حالي لتطبيق MS Word أو لا يمكن لمكون ActiveX إنشاء كائن أو إرجاع مرجع إلى هذا الكائن ثم الخطأ 429. لهذا ، سنضيف أدناه سطرين في التعليمات البرمجية. بعد معالجة الخطأ ، نحتاج إلى إنشاء مثيل لكائن تطبيق MS Word باستخدام وظيفة CreateObject .

  • لجعل تطبيق MS Word مرئيًا ، سنقوم بتغيير الخاصية المرئية لكائن "WdApp" إلى TRUE .

  • نحتاج إلى العثور على موقع واسم ملف مستند Word الذي نريد استيراد الجداول منه إلى ورقة Excel وتعيين نفس الشيء إلى "strDocName" للعثور على الاسم والموقع ، يمكننا التحقق من خصائص الملف .

لفتح مربع الحوار "خصائص" ، ما عليك سوى تحديد الملف والضغط على "Alt + Enter" .

  • إذا لم يكن الملف موجودًا في الموقع المحدد ، فسيقوم الرمز بإرجاع الرسالة التي تنص على "لم يتم العثور على تفاصيل علامات الملف في مسار المجلد". سيكون العنوان هو "عذرًا ، اسم المستند هذا غير موجود".

  • نحتاج الآن إلى تنشيط تطبيق MS Word وتعيين المتغير "wddoc" مع مستند الكلمة الذي يحتوي على اسم الملف المخزن في "strDocName" .

  • إذا لم يتم فتح الملف بالفعل ، فسنحتاج إلى فتح المستند وتنشيط التطبيق.

  • بعد تنشيط مستند Word ، نحتاج إلى الوصول إلى الجداول الموجودة في المستند. لفعل الشيء نفسه ، سننشئ بعض المتغيرات.

Tble هو متغير العدد الصحيح ، والذي سيخزن عدد الجداول في المستند.

RowWd هو المتغير الطويل ، والذي سيخزن عدد الصفوف في جدول معين.

colWd هو المتغير الطويل الذي سيخزن عدد الأعمدة في جدول معين.

  • نحتاج إلى حساب عدد الجداول في المستند وإذا لم يكن هناك جدول في المستند ، فسنعرض مربع رسالة للمستخدم "لا توجد جداول في مستند Word" .

  • للوصول إلى الجداول الموجودة في المستند وكتابة المحتوى في ورقة Excel ، سنقوم بتشغيل حلقة "For" VBA لعدد من الجداول المرات وضمن حلقة VBA هذه ، سنقوم بتشغيل حلقات "for" المتداخلة للوصول إلى كل صف و كل عمود في الصف.

  • حيث أننا لا نريد حفظ المستند والخروج من التطبيق. يجب علينا أيضًا تحرير ذاكرة النظام. لفعل الشيء نفسه ، سنكتب الكود التالي.

الآن عندما نفتح ملف Excel ، يتم تحديث التعبئة بمحتوى الجدول من مستند Word.

رمز:

Private Sub Workbook_Open () Rem تعريف متغيرات الكائن للوصول إلى كائن تم إنشاؤه بواسطة GETOBJECT Dim WdApp ككائن ، wddoc ككائن Rem إعلان متغير سلسلة للوصول إلى مستند Word Dim strDocName باسم String Rem خطأ معالجة عند خطأ استئناف التالي Rem تنشيط MS Word إذا تم فتحه بالفعل Set WdApp = GetObject (، "Word.Application") إذا كان Err.Number = 429 ثم Err.Clear Rem إنشاء كائن تطبيق Word إذا لم يكن MS Word مفتوحًا بالفعل تعيين WdApp = CreateObject ("Word.Application") End إذا كان WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem التحقق من الدليل ذي الصلة للمستند ذي الصلة Rem If غير موجود ثم إبلاغ المستخدم وإغلاق البرنامج If Dir (strDocName) = " "ثم MsgBox" الملف "& strDocName & vbCrLf &"لم يتم العثور على مسار المجلد "& vbCrLf &" C: \ Users \ CBA7_01 \. "، _vbExclamation ،" عذرًا ، اسم المستند غير موجود. "قم بإنهاء Sub End إذا WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) إذا لم يكن wddoc شيئًا ، فقم بتعيين wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Activate Rem تحديد المتغيرات للوصول إلى الجداول في مستند Word Dim Tble As Integer Dimer 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 ثم MsgBox "لم يتم العثور على جداول في مستند Word" ، vbExclamation ، "لا جداول للاستيراد "Exit Sub End If Rem بدء عملية الحلقات للوصول إلى الجداول والصفوف الخاصة بها ، والأعمدة من أجل 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 الوصول إلى العمود التالي y = y + 1 Next colWd Rem الذهاب إلى الصف التالي والبدء من العمود 1 y = 1 x = x + 1 الصف التالي نهاية مع Next End مع Rem لسنا بحاجة إلى حفظ مستند Word wddoc.Close Savechanges: = False Rem تركنا تطبيق MS Word WdApp.Quit Rem أخيرًا أصدرنا ذاكرة النظام المخصصة لمتغيري الكائن تعيين wddoc = Nothing Set WdApp = Nothing End Subإنهاء Rem أخيرًا أصدرنا ذاكرة النظام المخصصة لمتغيري الكائن Set wddoc = Nothing Set WdApp = Nothing End Subإنهاء Rem أخيرًا أصدرنا ذاكرة النظام المخصصة لمتغيري الكائن Set wddoc = Nothing Set WdApp = Nothing End Sub

أشياء للذكرى

  1. هناك بعض الكائن أحادي المثيل ، حيث يتم إنشاء مثيل واحد فقط من الكائن ، بغض النظر عن الرقم الذي يتم تشغيل CreateObject من أجله. تقوم دالة GetObject في جميع الأوقات بإرجاع نفس المثيل عندما يتم استدعاؤها بسلسلة طولها صفر ويظهر خطأ إذا لم يتم ذكر وسيطة "اسم المسار".
  2. لا يمكننا استخدام GetObject للوصول إلى مرجع لفصل تم إنشاؤه باستخدام VBA.
  3. في حالة عدم وجود مثيل نشط لتطبيق MS Word ، أو لا نريد بدء تشغيل الكائن بملف تم تحميله بالفعل ، فإننا نستخدم أولاً وظيفة CreateObject لإنشاء الكائن ثم نستخدم وظيفة GetObject للوصول إلى الكائن.

$config[zx-auto] not found$config[zx-overlay] not found