برمجة إكسل - الدرس الثالث - التعرف على بيئة برمجة VBA
النقاط الأساسية:
- مقدمة
- ما هي بيئة برمجة فيجوال بيسيك للتطبيقات VBA؟
- تشغيل فيجوال بيسيك للتطبيقات
- التعرف على مكونات بيئة البرمجة
- إضافة وحدة برمجية Module
- كتابة برنامج بسيط
- شرح البرنامج
- تنفيذ البرنامج
- خاتمة
مقدمة:
كنا قد تعلمنا في الدرسين السابقين كيف نقوم بتسجيل ماكرو، وقلنا أنه عند تسجيل الماكرو فإن برنامج إكسل يقوم عملياً بكتابة برنامج يقوم بتنفيذ نفس المهام التي قمنا بتسجيلها.
سنتعرّف في هذا الدرس على بيئة برمجة لغة فيجوال بيسيك للتطبيقات، وكيفية تشغيلها وإضافة وحدات برمجية إليها، وكذلك كتابة برنامج بسيط يدوياً حيث سنقوم بكتابة برنامج ليقوم بنفس مهمة الماكرو الذي تم تسجيله في الدرس السابق.
ما هي بيئة برمجة فيجوال بيسيك للتطبيقات VBA؟
إن بيئة برمجة فيجوال بيسيك للتطبيقات هي عبارة عن برنامج مستقل تقوم من خلاله بكتابة برامج فيجوال بيسيك أو لتقوم بالتعديل على الماكروات (جمع ماكرو) التي تقوم بتسجيلها في إكسل.
مع أن هذه البيئة تعتبر برنامجاً مستقلاً، إلا أنك لا تستطيع تشغيلها بشكل مستقل (على عكس بيئة برمجة لغة فيجوال بيسيك 6)، ولتشغيلها يجب أن يتم ذلك من خلال إكسل حصراً (هنا نتحدث عن البيئة المدمجة مع إكسل).
تشغيل فيجوال بيسيك للتطبيقات
لتشغيل بيئة البرمجة من إكسل، اذهب إلى شريط أدوات المطور (راجع الدرس الأول) وانقر على زر Visual Basic فتظهر النافذة المبينة بالشكل (3-1).
أو اختصاراً يمكنك الضغط على الاختصار Alt + F11 في لوحة المفاتيح.
أو يمكن من خلال نافذة الماكروات كما تم شرحه في الدرس الثاني عندما أردنا التعديل على ماكرو أو برنامج محدد.
التعرف على مكونات بيئة البرمجة
تتكون بيئة برمجة VBA كما هو موضح في الشكل (3-1) من:
- شريط قوائم وشريط أدوات.
- متصفح المشاريع: ويحوي قائمة بأوراق عمل إكسل المفتوحة، وكل ورقة
عمل تمثل مشروعاً، وكل مشروع يحوي قائمة بالأوراق الفرعية وكذلك قائمة
بالوحدات البرمجية.
فمثلاً في الشكل السابق يوجد مشروعان، والمشروع الأول يحوي ثلاثة أوراق عمل فرعية، ووحدة برمجية واحدة اسمها Module1. - نافذة الخصائص: في هذه النافذة نقوم بتعديل خصائص الكائنات المختارة عندما نقوم بتصميم نوافذ جديدة، وسنأتي على شرحها في درس قادم إن شاء الله.
- مكان كتابة البرامج: ويتم فتح هذه النافذة بالنقر المزدوج على أحد مكونات المشروع، وفيها نقوم بكتابة البرامج التي نريد، وفي الشكل السابق تم فتح نافذة الوحدة البرمجية Module1 التابعة للمشروع الأول.
إضافة وحدة برمجية Module
عادة عند البدء بمشروع جديد فإن هذا المشروع لا يحوي وحدة برمجية.
ولكتابة برنامج جديد يجب أن نقوم بإضافة وحدة برمجية جديدة أو استخدام وحدة برمجية موجودة مسبقاً، ويفضل دائماً استخدام عدة وحدات برمجية، كل وحدة تحوي البرامج المتعلقة ببعضها، وهذا ليس إجبارياً ولكنه نوع من الترتيب.
عند تسجيل ماكرو يقوم إكسل بإضافة وحدة برمجية تلقائياً، كما شاهدنا في الدرس السابق.
لإضافة وحدة برمجية جديدة، من قائمة Insert اختر الأمر Module، فيتم إضافة وحدة جديدة باسم افتراضي، ويمكنك تغيير الاسم باختيارها من متصفح المشاريع، ثم تغيير الاسم من نافذة الخصائص كما هو موضح في الشكل (3-1) أعلاه.
كتابة برنامج بسيط
لكتابة برنامج نبدأ بكلمة Sub ثم اسم البرنامج (وهو اسم اختياري) ثم نضغط Enter.
ملاحظة: أنا أفترض أنك على معرفة بسيطة بلغة فيجوال بيسيك 5 أو 6، لذلك لن أتوسع في شرح الأوامر المشتركة.
سنقوم بإضافة برنامج يقوم بنفس عمل الماكرو الذي قمنا بتسجيله في الدرس السابق لكن هذه المرة سنقوم بكتابته يدوياً وسنعطيه نفس الاسم NameAndTime.
بعد أن أضفت وحدة برمجية جديدة، قم بفتح نافذتها ثم أضف الأسطر التالية:
ملاحظة: بمجرد إضافة السطر الأول ثم ضغط Enter تقوم VBA بإضافة السطر الثاني.
Sub NameAndTime()
End Sub
حتى هذه اللحظة فإن البرنامج لا يحوي أي تعليمة برمجية، لكنه يظهر في قائمة البرامج أو الماكروات كما هو مبين في الشكل (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)
شرح البرنامج السابق
سأشرح البرنامج بشكل مبسط وستتوضح معانيه أكثر في الدروس القادمة إن شاء الله، لكن فهم البرنامج بشكل عام يساعدك على فهم الأوامر، وعلى فهم طبيعة البرمجة.
نستخدم الكلمة 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.
ملاحظة: راجع الدرس السابق لمزيد من التفصيل حول استدعاء هذه النافذة.
خاتمة
تعلمت في هذا الدرس كيف يتم تشغيل بيئة برمجة VBA وكيف تقوم بإضافة وتشغيل برنامج جديد.
تحميل
-
ملف الإكسل الذي يحوي البرنامج السابق: البرنامج الأول وهو باسم
NameAndTime والبرنامج المعدل وهو باسم
NameAndTime2
تذكر أن تقوم بتفعيل الماكرو عند فتح الملف كما تعلمت في الدرس الأول.
هاتف: +963-31-2220008
جوال: +963-999-824193
سوريا - حمص