JWDStructure

دروس VBA Excel

برمجة إكسل - الدرس الثالث - التعرف على بيئة برمجة VBA

النقاط الأساسية:

مقدمة:

كنا قد تعلمنا في الدرسين السابقين كيف نقوم بتسجيل ماكرو، وقلنا أنه عند تسجيل الماكرو فإن برنامج إكسل يقوم عملياً بكتابة برنامج يقوم بتنفيذ نفس المهام التي قمنا بتسجيلها.

سنتعرّف في هذا الدرس على بيئة برمجة لغة فيجوال بيسيك للتطبيقات، وكيفية تشغيلها وإضافة وحدات برمجية إليها، وكذلك كتابة برنامج بسيط يدوياً حيث سنقوم بكتابة برنامج ليقوم بنفس مهمة الماكرو الذي تم تسجيله في الدرس السابق.

ما هي بيئة برمجة فيجوال بيسيك للتطبيقات VBA؟

إن بيئة برمجة فيجوال بيسيك للتطبيقات هي عبارة عن برنامج مستقل تقوم من خلاله بكتابة برامج فيجوال بيسيك أو لتقوم بالتعديل على الماكروات (جمع ماكرو) التي تقوم بتسجيلها في إكسل.

مع أن هذه البيئة تعتبر برنامجاً مستقلاً، إلا أنك لا تستطيع تشغيلها بشكل مستقل (على عكس بيئة برمجة لغة فيجوال بيسيك 6)، ولتشغيلها يجب أن يتم ذلك من خلال إكسل حصراً (هنا نتحدث عن البيئة المدمجة مع إكسل).

تشغيل فيجوال بيسيك للتطبيقات

لتشغيل بيئة البرمجة من إكسل، اذهب إلى شريط أدوات المطور (راجع الدرس الأول) وانقر على زر Visual Basic فتظهر النافذة المبينة بالشكل (3-1).

أو اختصاراً يمكنك الضغط على الاختصار Alt + F11 في لوحة المفاتيح.

أو يمكن من خلال نافذة الماكروات كما تم شرحه في الدرس الثاني عندما أردنا التعديل على ماكرو أو برنامج محدد.

الشكل (3-1)
الشكل (3-1): مكونات بيئة برمجة VBA

التعرف على مكونات بيئة البرمجة

تتكون بيئة برمجة VBA كما هو موضح في الشكل (3-1) من:

إضافة وحدة برمجية Module

عادة عند البدء بمشروع جديد فإن هذا المشروع لا يحوي وحدة برمجية.

ولكتابة برنامج جديد يجب أن نقوم بإضافة وحدة برمجية جديدة أو استخدام وحدة برمجية موجودة مسبقاً، ويفضل دائماً استخدام عدة وحدات برمجية، كل وحدة تحوي البرامج المتعلقة ببعضها، وهذا ليس إجبارياً ولكنه نوع من الترتيب.

عند تسجيل ماكرو يقوم إكسل بإضافة وحدة برمجية تلقائياً، كما شاهدنا في الدرس السابق.

لإضافة وحدة برمجية جديدة، من قائمة Insert اختر الأمر Module، فيتم إضافة وحدة جديدة باسم افتراضي، ويمكنك تغيير الاسم باختيارها من متصفح المشاريع، ثم تغيير الاسم من نافذة الخصائص كما هو موضح في الشكل (3-1) أعلاه.

الشكل (3-2)
الشكل (3-2): إضافة وحدة برمجية جديدة

كتابة برنامج بسيط

لكتابة برنامج نبدأ بكلمة Sub ثم اسم البرنامج (وهو اسم اختياري) ثم نضغط Enter.

ملاحظة: أنا أفترض أنك على معرفة بسيطة بلغة فيجوال بيسيك 5 أو 6، لذلك لن أتوسع في شرح الأوامر المشتركة.

سنقوم بإضافة برنامج يقوم بنفس عمل الماكرو الذي قمنا بتسجيله في الدرس السابق لكن هذه المرة سنقوم بكتابته يدوياً وسنعطيه نفس الاسم NameAndTime.

بعد أن أضفت وحدة برمجية جديدة، قم بفتح نافذتها ثم أضف الأسطر التالية:

ملاحظة: بمجرد إضافة السطر الأول ثم ضغط Enter تقوم VBA بإضافة السطر الثاني.

Sub NameAndTime()

End Sub

الشكل (3-3)
الشكل (3-3): إضافة برنامج جديد.

حتى هذه اللحظة فإن البرنامج لا يحوي أي تعليمة برمجية، لكنه يظهر في قائمة البرامج أو الماكروات كما هو مبين في الشكل (3-5).

سنقوم بإضافة الأسطر التالية بين السطرين السابقين:

01 ActiveCell.FormulaR1C1 = "سلسلة برامج جواد الإنشائية"
02 ActiveCell.Offset(1, 0).Range("A1").Select
03 ActiveCell.FormulaR1C1 = "=NOW()"
04 Selection.Copy
05 Selection.PasteSpecial Paste:=xlPasteValues
06 ActiveCell.Offset(-1, 0).Range("A1:A2").Select
07 Selection.Font.Bold = True
08 Selection.Font.Size = 16

ملاحظة: الأرقام في بداية الأسطر غير ضرورية، ويفضل عدم كتابتها، لكن قمت بكتابتها لشرح البرنامج لاحقاً.

يصبح البرنامج كما في الشكل (3-4)

الشكل (3-4)
الشكل (3-4): البرنامج بصيغته النهائية

شرح البرنامج السابق

سأشرح البرنامج بشكل مبسط وستتوضح معانيه أكثر في الدروس القادمة إن شاء الله، لكن فهم البرنامج بشكل عام يساعدك على فهم الأوامر، وعلى فهم طبيعة البرمجة.

نستخدم الكلمة ActiveCell للدلالة على الخلية الحالية، فإذا أردنا تعديل لون الخلية الحالية أو قيمتها أو المعادلة التي فيها أو أي شيء يخصها، نستخدم الكائن ActiveCell ثم نغير الخاصية التي نريد، أو ننفذ الأمر المتعلق.

في السطر الأول قمنا بإسناد القيمة "سلسلة برامج جواد الإنشائية" للخاصية (FormulaR1C1) وهكذا قمنا بتعديل محتويات الخلية.

ملاحظة: من تقنيات التدريب الجيدة أن تقوم بكتابة بعض أسطر البرنامج ثم تنفيذها والتأكد من صحتها ثم إضافة الأسطر المتممة، لذلك جرب إضافة السطر الأول فقط (طبعاً بعد إضافة اسم البرنامج) ثم قم بتنفيذ البرنامج كما هو موضح لاحقاً، وسيتم تغيير محتوى الخلية الحالية فقط.

في السطر الثاني استخدمنا الخاصية Offset للخلية الحالية والتي تعيد لنا مجالاً جديداً للخلايا يبعد عن الخلية الحالية بمقدار سطر واحد للأسفل، وقد حددنا ذلك بالأرقام 1 لعدد الأسطر و 0 لعدد الأعمدة بعد الخاصية Offset.

ثم استخدمنا الخاصية Range("A1") للمجال الجديد وهذا يعني أننا نريد الخلية الأولى من هذا المجال، ثم أعطيناها أمر Select لاختيارها، أي أن السطر الثاني يقوم باختيار الخلية التي تحت الخلية الأساسية التي بدأنا برنامجنا بها.

في السطر الثالث قمنا بتغيير محتوى الخلية الحالية الجديدة إلى المعادلة Now.

في السطر الرابع قمنا بنسخ محتويات الخلية الحالية إلى الحافظة.

في السطر الخامس قمنا بلصق قيمة الخلية وليس المعادلة وقد وضحنا السبب في الدرس السابق.

في السطر السادس قمنا باختيار الخليتين السابقتين.

وفي السابع قمنا بتغيير سماكة الخط، أما في الثامن قمنا بتغيير حجم الخط.

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

يمكننا اختصار بعض الأسطر من البرنامج هذا عن طريق استبدال الأسطر 3 وحتى 5 بالسطر التالي:

ActiveCell.FormulaR1C1 = Now

حيث أن Now هنا هي تابع فيجوال بيسيك ويعطي نفس نتيجة التابع NOW الخاص بإكسل، وفي هذا السطر قمنا بتعديل محتوى الخلية إلى التاريخ والوقت الحاليين كقيمة وليس كمعادلة ولذلك لن نحتاج إلى النسخ واللصق بالطريقة السابقة.

يصبح البرنامج كما يلي:

01 ActiveCell.FormulaR1C1 = "سلسلة برامج جواد الإنشائية"
02 ActiveCell.Offset(1, 0).Range("A1").Select
03 ActiveCell.FormulaR1C1 = Now
06 ActiveCell.Offset(-1, 0).Range("A1:A2").Select
07 Selection.Font.Bold = True
08 Selection.Font.Size = 16

تنفيذ البرنامج

لتنفيذ البرنامج السابق، من إكسل اختر الخلية التي تريد إدراج الاسم فيها ثم اضغط على الاختصار Alt+F8 فتظهر نافذة الماكروات أو نافذة البرامج كما سأسميها من الآن، منها اختر البرنامج ثم انقر على الزر Run.

ملاحظة: راجع الدرس السابق لمزيد من التفصيل حول استدعاء هذه النافذة.

الشكل (3-5)
الشكل (3-5): نافذة تشغيل البرامج

خاتمة

تعلمت في هذا الدرس كيف يتم تشغيل بيئة برمجة VBA وكيف تقوم بإضافة وتشغيل برنامج جديد.

تحميل