The Objects
الكائنات
ان VBA "يستند بشكل فضفاض حول مفهوم البرمجة الشيئية" Object Oriented Programming
جميع مواضيع نموذج كائن VBA في Excel وبناء مراجع كائن VBA ليست بسيطة بشكل خاص. ومع ذلك…
ستتحسن معرفتك وفهم طراز كائن VBA ومراجع كائن VBA أثناء متابعة الدراسة والعمل مع Visual Basic for Applications ، لذلك ، لا تقلق إذا لم تكن الأمور واضحة تمامًا بعد قراءة هذا الدرس التعليمي لـ VBA.
يجب أن يوفر لك هذا الدليل قاعدة صلبة ، ومع بعض التدريبات والتطبيقات ، أنا متأكد من أنك ستتقن هذا الموضوع وتعرف كل ما تحتاجه حول كائنات Excel VBA.
لماذا نموذج كائن VBA في Excel مهم ؟
يتم تضمين Visual Basic for Applications في معظم المنتجات التي تعد جزءًا من Microsoft Office. بالإضافة إلى Excel ، تتضمن قائمة التطبيقات التي تتضمن VBA PowerPoint و Word و Access.
هذا يؤكد على ضرورة تعلم الـ VBA
بمجرد معرفة Visual Basic for Applications ، يمكنك بدء كتابة وحدات الماكرو على الفور للمنتجات الأخرى التي تستخدم VBA.
في الواقع ، ستتمكن من إنشاء وحدات ماكرو تعمل عبر جميع هذه التطبيقات المختلفة.
أحد الموضوعات الرئيسية التي تحتاج إلى إتقانها للوصول إلى مستويات الخبرة هذه هي الكائنات.
يكمن سر استخدام VBA مع التطبيقات الأخرى في فهم طراز الكائن لكل تطبيق.
بعد كل شيء ، ببساطة تعالج الكائنات ، ولكل منتج (Excel ، Word ، Access ، PowerPoint ، وما إلى ذلك) طراز كائن فريد خاص به.
لذا ، يعد نموذج كائن VBA من Excel مهمًا بشكل واضح.
ما هو نموذج كائن VBA في Excel ؟
طراز الكائن هو تسلسل هرمي كبير لكافة الكائنات التي يمكنك استخدامها في VBA.
من بين المزايا الأخرى ، يجعل هذا التسلسل هجائياً لـ كائنات VBA.
التسلسل الهرمي كائن VBA في Excel
التسلسل الهرمي يبدو كالتالي:
- في الأعلى ، لديك كائن واحد.
- يحتوي الكائن في أعلى التسلسل الهيكلي على بعض الكائنات.
- قد يحتوي الكائن في المستوى الثاني من التسلسل الهرمي على كائنات أخرى.
- قد تحتوي الكائنات الموجودة في المستوى 3 على كائنات أخرى.
قد تحتوي الكائنات على كائنات أخرى ، تتكرر العملية نفسها حتى تصل إلى كائنات لا تحتوي على أي كائنات أخرى.
عندما تعمل مع تطبيق برمجي معين ، يكون الكائن الأول الذي يجب أخذه بعين الاعتبار هو التطبيق نفسه (كائن التطبيق).
بشكل عام ، يكون التطبيق في أعلى التسلسل الهرمي.
في حالة Excel ، كائن التطبيق هو Excel نفسه.
نظرًا لأن Visual Basic for Applications يمكنها الاتصال بتطبيقات وبرامج أخرى خارج Excel ، فهذا لا يعني تمامًا المستوى الأعلى للتسلسل الهرمي.
ومع ذلك ، سترى عادةً معظم الأشخاص الذين يشيرون إلى كائن التطبيق نفسه على أنه أعلى التسلسل الهرمي الكائن لـ VBA الخاص بـ Excel.
يحتوي كائن التطبيق على كائنات VBA أخرى.
بعض كائنات VBA الموجودة في كائن تطبيق Excel هي التالية:
- الوظائف الإضافية (Add-Ins)، التي تحتوي على كافة الكائنات الوظيفة الإضافية.
- Windows ، والتي (على هذا المستوى) تحتوي على جميع كائنات النافذة في التطبيق.
- المصنفات (Workbooks)، التي تحتوي على جميع كائنات المصنف.
كل من هذه الكائنات VBA ، بدورها ، قادرة على احتواء كائنات أخرى.
على سبيل المثال ، فإن بعض كائنات VBA التي يمكن احتواؤها داخل كائن المصنف هي كالتالي:
- المخططات (Charts)، التي تحتوي على كائنات المخطط.
- الأسماء (Names)، التي تحتوي على كائنات الاسم.
- VBProjects ، والذي يمثل المشروعات المفتوحة.
- Windows ، الذي (على هذا المستوى) يحتوي على كائنات نافذة في مصنف Excel المحدد.
- أوراق العمل (Worksheets)، التي تحتوي على كائنات ورقة العمل.
مرة أخرى ، يمكن أن تحتوي كائنات VBA هذه على كائنات أخرى ، يمكن أن يحتوي كائن ورقة عمل على كائنات VBA التالية:
- ChartObjects ، والتي تحتوي على كائنات ChartObject.
- تعليق (Comment)، والذي يمثل تعليق خلية.
- ارتباط تشعبي (Hyperlink)، والذي يمثل ارتباطًا تشعبيًا.
- الاسم (Name)، والذي يمثل اسمًا محددًا لنطاق خلايا معين.
- PageSetup ، والذي يُستخدم لتخزين معلومات الطباعة.
- PivotTables ، التي تحتوي على كائنات PivotTable.
- نطاق (Range)، والذي يمثل الخلايا والصفوف والأعمدة ، وخيارات من الخلايا مع كتل متجاورة من الخلايا ، أو نطاقات ثلاثية الأبعاد.
تلميح هام :
إن كائن النطاق هو واحد من أهم الكائنات (وأكثرها استخدامًا).
بالشكل التخطيطي ، يظهر جزء من التسلسل الهرمي كائن VBA في Excel الموضح أعلاه تبدو كما يلي:
إذا كنت ترغب في مشاهدة الكمية الهائلة من كائنات VBA التي يحتوي عليها Excel ، فعليك إلقاء نظرة على مرجع طراز كائن Excel.
إذا كان هذا يبدو كثيرا ، فلا تقلق .
ما الذي يمكنك فعله حيال هذا الكم الهائل من الكائنات؟
ان في الممارسة العملية ، ستتعامل عادةً مع كمية محدودة من كائنات VBA.
هناك بعض الأشياء التي من غير المرجح أن تحتاج إليها (أو ستحتاج إلى ذلك).
إذا كنت توقفت عند جزئية ما أو واجهتك مشكلة عند العمل على مشكلة معينة ، فيمكنك استخدام بعض الاستراتيجيات لأغراض معرفة كائنات Excel VBA التي يتم استخدامها.
على سبيل المثال ، استخدم مسجل الماكرو لاكتشاف كائنات VBA.
بالإضافة إلى ذلك ، أثناء متابعة العمل مع Visual Basic for Applications ، ستبدأ في ملاحظة المنطق خلف بنية التسلسل الهرمي الكائن لـ VBA Excel.
مجموعات الكائن
المجموعات هي كائنات VBA المستخدمة في تجميع كائنات أخرى وإدارتها (المرتبطة).
حقيقة يمكنك تجميع وإدارة العديد من الكائنات VBA باستخدام مجموعات مفيدة للغاية في بعض الحالات.
على سبيل المثال ، فلنفترض أنك تريد القيام بشيء ما مع أو إلى مجموعة معينة من الكائنات.
إذا كانت كافة هذه الكائنات جزءًا من نفس المجموعة ، فيمكنك تكوين تعليمات برمجية لـ VBA للانتقال إلى كل عضو من أعضاء المجموعة وتنفيذ الإجراءات المطلوبة.
بمعنى آخر ، تسمح لك المجموعات بالعمل مع مجموعة كاملة من كائنات VBA في نفس الوقت ، بدلاً من العمل مع كل كائن على حدا أو بشكل منفرد.
أمثلة على المجموعات الشائعة أو الأكثر شيوعا :
- المصنفات (Workbooks)، وهي مجموعة من كافة مصنفات Excel المفتوحة حاليًا.
- أوراق العمل (Worksheets)، ومجموعة من جميع أوراق عمل Excel داخل مصنف معين.
- المخططات (Charts)، التي تقوم بتجميع كل أوراق التخطيط الموجودة داخل مصنف معين.
- الأوراق (Sheets)، وهي عبارة عن مجموعة من جميع الأوراق داخل مصنف معين ، في هذه الحالة ، لا يهم نوع الورقة ، لذلك تتضمن هذه المجموعة كلاً من أوراق العمل وأوراق المخططات.
الآن ربما لديك فكرة عامة عن الكائن ومجموعة الكائن .
لذلك دعونا ندخل في الممارسة الفعلية. دعونا ننظر في كيف يمكنك البدء في الرجوع إلى الكائنات VBA مع Visual Basic للتطبيقات:
مقدمة إلى مراجع كائن VBA
معرفة كيفية الإشارة إلى الكائنات عند كتابة التعليمات البرمجية لـ VBA ضروري.
السبب في ذلك ، بالطبع ، عندما تريد بدء العمل مع كائن VBA معين ، يجب عليك تحديد ذلك.
كيف تفعل ذلك؟ كيف تشير إلى كائن في Visual Basic للتطبيقات؟
دعونا نلقي نظرة على بعض المواقف الأكثر شيوعا والأساسية.
يجب أن تعرف أن الكائن الموجود في الجزء العلوي من التسلسل الهرمي الكائن لـ Excel VBA هو التطبيق (كما بالشكل الهرمي أعلاه).
بالإشارة إلى هذا الكائن سهل للغاية ، في محرر Visual Basic ، تشير إلى التطبيق (Application) بكتابة:
Application
من هنا ، تحتاج إلى بدء التحرك على طول التسلسل الهرمي باستخدام عامل التشغيل dot (.).
وبمعنى آخر ، يمكنك توصيل كل كائن VBA بالآخر (كائن الأصل) باستخدام نقطة (.).
فيتم استخدام هذه النقاط (.) للاتصال والمراجع أعضاء طراز كائن VBA في Excel "من الأعلى إلى الأسفل".
لرؤية هذا في الواقع ، دعنا نرجع إلى مثال التسلسل الهرمي الكائن لـ VBA Excel كما بالشكل أعلاه.
افترض أنك تريد الإشارة إلى كائن نطاق.
يقع هذا الكائن في أسفل الهرم المستخدم في المثال.
هناك 2 كائنات VBA و 3 خطوات بين التطبيق وكائن النطاق ، كما هو موضح بالسطر البرمجي التالي:
يمكنك الرجوع إلى كائن نطاق باستخدام البنية الأساسية التالية:
Application.Workbooks.Worksheets.Range
هذا ، ومع ذلك ، مجرد إطار أساسي.
ستلاحظ أن هذا البنية الأساسية لا تحدد فعليًا كائنًا VBA فرديًا.
قد تتسائل:
إذا كان هناك العديد من المصنفات أو أوراق العمل ، فكيف يمكن لـ Excel أن يعرف أي منها أشير إليه؟
كيف يعرف Excel ما هو النطاق الذي أريد العمل به؟
يمكن تلخيص هذه الأسئلة بما يلي:
كيف تشير إلى كائن معين داخل مجموعة؟
دعونا نجيب على هذا السؤال حتى تتمكن من استكمال المرجع المؤهل بالكامل أعلاه.
مراجع كائن VBA ، كائن من مجموعة
من المحتمل ، في معظم الأحيان ، أن تعمل مع كائن VBA معين من مجموعة.
هذا على النقيض من المجموعة ككل.
لاحظ أنه يمكنك أيضًا العمل مع مجموعة ككل.
في الواقع ، القدرة على القيام بذلك هي واحدة من مزايا المجموعات.
ومع ذلك ، دعنا نركز الآن على كيفية الرجوع إلى كائن من مجموعة. لهذه الأغراض ، يمكنك استخدام أي من الخيارين التاليين:
أولاً: استخدام اسم كائن VBA.
في هذه الحالة ، يكون بناء الجملة الذي يجب عليك استخدامه للإشارة إلى كائن هو :
("Collection_name("Object_name
بعبارات أخرى:
- اسم المجموعة ذات الصلة (collection_name) يذهب أولا.
- اسم Collection_name يتبعه أقواس ().
- اسم كائن VBA ضمن أقواس مزدوجة (اقتباس) ("").
- داخل الأقواس المزدوجة، يكون لديك اسم كائن (Object_name).
تلميح هام :
إذا فشلت في تضمين علامات الاقتباس ، يفهم Excel أن اسم كائن VBA هو اسم متغير.
لذلك ، لن يتمكن من تحديد الكائن الذي تريده.
وبعبارة أخرى ، لا تنسى الاقتباسات عند استخدام طريقة مرجع كائن VBA هذا.
على سبيل المثال ، إذا كنت تعمل مع مصنف Excel يحتوي على 3 أوراق عمل وترغب في العمل مع الورقة 1 ، فيمكنك استخدام أي مما يلي:
("Worksheets("Sheet1
أو
("Sheets("Sheet1
ثانياً: استخدام رقم الفهرس.
تشير إلى كائن VBA باستخدام (Collection_name (Index_number.
هذه البنية هي نفسها تمامًا مثل تلك المذكورة أعلاه مع الاختلافات التالية:
بدلاً من استخدام اسم كائن VBA ، يمكنك الرجوع إليه باستخدام رقم الفهرس الخاص به.
لا تستخدم علامات الاقتباس المزدوجة داخل الأقواس ، فقط رقم.
بالعودة إلى المثال أعلاه ، حيث تريد العمل مع ورقة 1 ، يمكنك استخدام أي من الخيارين التاليين:
(Worksheets(1
أو
(Sheets(1
الآن بعد أن عرفت كيفية الإشارة إلى كائن VBA فردي داخل مجموعة ، دعنا نعود إلى المرجع المؤهل بالكامل الذي استخدمته كمثال أعلاه:
Application.Workbooks.Worksheets.Range
Workbook Book1
إذا كنت تستخدم اسم الكائن للإشارة إلى كل من كائنات VBA الفردية (الخيار رقم 1 أعلاه) ، فإن المرجع المؤهل الكامل لهذه الخلية هو:
("Application.Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1
بالإضافة إلى ذلك ، قد يكون من الصعب قراءة هذه الأسطر الطويلة جداً من التعليمات البرمجية لـ VBA.
هناك بعض الطرق التي يمكنك بها تبسيط مراجع الكائنات ، مما يجعل رمز VBA أقصر كثيرًا.
دعونا نلقي نظرة على بعض الأساليب التي يمكنك تطبيقها لهذه الأغراض ...
تبسيط مراجع كائن مؤهل بالكامل
القدرة على تبسيط مرجع كائن VBA له العديد من المزايا.
بشكل أساسي ، يسمح لك هذا بتقصير رمز VBA وتسهيل قراءته.
السبب الرئيسي لماذا يمكنك تبسيط مراجع كائن مؤهل بشكل كامل ؟
لأن طراز كائن VBA في Excel يحتوي على بعض الكائنات الافتراضية.
يتم افتراض هذه الكائنات الافتراضية بواسطة Excel ما لم تقم بإدخال شيء مختلف.
تعتمد طريقة التبسيط الموضحة أدناه على تعريف المصنف وورقة العمل الحاليين بشكل صحيح.
إذا قمت بخطأ على سبيل المثال ، معتقدًا أن ورقة العمل النشطة الحالية هي Sheet1 عندما تكون في الواقع ورقة Sheet2 ، فسوف تواجه مشكلات.
على الأرجح أن المشكلات التي تواجهها في هذه الحالات هي:
* يقوم برنامج Excel بإرجاع خطأ.
* يقوم برنامج Excel بإرجاع نتيجة خاطئة.
* ينفذ Excel إجراءً خاطئًا لا يمكنك التراجع عنه.
والثلاثة مشاكل أعلاه يطلق عليهم أخطاء مبرمج (على الرغم من أنه يمكنك الاعتماد على ActiveWorkbook كونه مرجع
المصنف الافتراضي في وحدة نمطية قياسية ، فلا يمكنك الاعتماد على أنك تعرف أي مصنف نشط. حتى لو كنت على حق ، عند
تغيير التعليمات البرمجية الخاصة بك في وقت لاحق ، يمكنك حلها بشكل تام.)
* هناك عيب آخر محتمل في تبسيط مراجع الكائنات المؤهلة بالكامل يتعلق بسرعة التنفيذ. يحدث هذا ، على سبيل المثال ، إذا كنت
تعمل باستخدام ماكرو معين يعمل مع العديد من أوراق عمل Excel ، في هذه الحالة ، يجب أن تمر علي كل منهم لتفعيلها ،
وبالطبع هذه ليست فعالة للغاية ، (بالنسبة لأي برنامج يعمل بأكثر من ورقة واحدة ، يجب عليك تنشيط أوراق مختلفة لكي تكون
مرجع الورقة هو الافتراضي ) .
تلميح هام :
وبالنظر إلى ما سبق ، تأكد من أنك تستخدم أساليب التبسيط هذه فقط عندما يكون ذلك مناسبًا.
ربما الأهم من ذلك ، تذكر أنه يجب عليك عدم تبسيط المراجع المؤهلة بشكل كامل طوال الوقت.
فمن الأفضل غالباً تأهيل مراجع كائن VBA بشكل كامل.
داخل وحدات نمطية Modules
عندما تتعامل مع طراز كائن Excel ، فهناك دائمًا كائنات افتراضية. على سبيل المثال ، يتم افتراض كائن التطبيق دائمًا ، بغض النظر عن مكان رمزك ، يمكن كتابة المسار إلى كائن الخط
ActiveWorkbook.ActiveSheet.Range("A1").Font
عندما تكون في وحدة نمطية قياسية (مثل الوحدة النمطية1 = Module1) ، توجد بعض الكائنات الافتراضية الأخرى تحت تصرفك.
عند حذف مرجع المصنف ، يفترض Excel أنك تريد ActiveWorkbook.
السطر البرمجي التالي هو نفس السطر البرمجي أعلاه ولكنه مختصر :
ActiveSheet.Range("A1").Font
هناك المزيد من الاختصارات ، فيمكنك حذف مرجع ورقة العمل وسيتم افتراض ActiveSheet.
السطر البرمجي التالي هو نفس السطر البرمجي أعلاه وما قبله وجميعهم متكافئين :
Range("A1").Font
داخل وحدات فئة Class Modules
تتضمن الوحدات النمطية للفئة ThisWorkbook و Sheet1 (ووحدات الورقة الأخرى) و Userforms و الوحدات النمطية للفئة التي تقوم بإنشائها.
توجد هذه السجلات ووحدات الورقة في مجلد Microsoft Excel Objects الخاص بمشروع VBE’s Explorer.
تُستخدم هذه الوحدات في برمجة أحداث الحدث (التي سنتحدث عنها في درس آخر).
ما تحتاج إلى معرفته هو أن قواعد الكائنات الافتراضية التي تنطبق على الوحدات القياسية لا تنطبق في هذه الوحدات.
عند حذف مرجع المصنف في الوحدة النمطية ThisWorkbook ، يفترض المصنف الذي يحتوي على التعليمة البرمجية ، وليس ActiveWorkbook.
وبالمثل ، يُفترض أن تكون مراجع الورقة التي تم حذفها في وحدة جدولية الورقة هي الورقة التي توجد بها الوحدة البرمجية ، وليست ActiveSheet.
نعود لمعرفة كيفية الاختصارات بالشكل الصحيح
اختصارات لمراجع مؤهلة بالكامل
يوفر Excel جميع مراجع الكائنات الافتراضية هذه لراحتك .
فإذا كان رمزك (الشفرة البرمجية ) أطول بعشر مرات من التى تراها عند المحترفين ، لا تقلق ، فهناك بعض الاختصارات التي يمكنك استخدامها للحفاظ على إدارة شفرتك.
يتم استخدام الكلمة الأساسية With
فلنفترض أن لديك تلك الأسطر البرمجية التالية :
ThisWorkbook.Worksheets(1).Range("A1").Value = 10
ThisWorkbook.Worksheets(1).Range("A1:B1").Font.Bold = True
ThisWorkbook.Worksheets(1).Range("A1").Interior.ColorIndex = 3
(With ThisWorkbook.Worksheets(1
Range("A1").Value = 10.
Range("A1:B1").Font.Bold = True.
Range("A1").Interior.ColorIndex = 3.
End With
يمكنك ايضا كتابتها هكذا :
(With ThisWorkbook.Worksheets(1
("With .Range("A1
Value = 10.
Interior.ColorIndex = 3.
End With
Range("A1:B1").Font.Bold = True.
End With
أيضا يمكنك كتابتها بهذا الشكل المبدع :
("With ThisWorkbook.Worksheets(1).Range("A1
Value = 10.
Interior.ColorIndex = 3.
Resize(1,2).Font.Bold = True.
End With
طريقة أخرى للحصول على مراجع مؤهلة بشكل كامل بدون كل هذه الفوضى هي متغيرات الكائن.
(سنتطرق الى شرح المتغيرات فى درس آخر )
يمكنك استخدام تعيين الكلمة الأساسية لتعيين كائن إلى متغير واستخدام ذلك المتغير كما لو كان مرجع كائن طويل.
Dim rMyRange As Range
("Set rMyRange = ThisWorkbook.Worksheets(1).Range("A1
rMyRange.Value = 10
rMyRange.Interior.ColorIndex = 3
rMyRange.Resize(1,2).Font.Bold = True