مقدمة للبرمجة باستخدام VBA في Access [الجزء الأول: الأحداث وإجراءات الأحداث]
الأحداث وإجراءات الأحداث
يتم كتابة التعليمات البرمجية لـ (Visual Basic for Applications (VBA في وحدات تسمى إجراءات. يحتوي الإجراء على سلسلة من عبارات Visual Basic التي تنفذ عملية أو تحسب قيمة. سنتعرف في الجزء الأول هذا الدرس على المصطلحات والمفاهيم العامة للإجراءات عموماً في الـAccess، وفي الجزء الثاني سنقوم سوياً عملياً ومرئياً بتنفيذ الإجراءات التي أستخدمت في شرح أمثلة الجزء الأول إن شاء الله :)
في البداية: ما هو إجراء الحدث؟
إجراء الحدث هو: إجراء يتم تشغيله استجابة لبدء تشغيل حدث من قبل المستخدم أومن قبل التعليمات البرمجية للبرنامج، أويتم تشغيله بواسطة النظام.
حسناً، وما هو الحدث؟
الحدث هو حدث محدد يقع في -أو مع- كائن معين. يمكن أن يستجيب Microsoft Access لأحداث مختلفة: نقرات الماوس وتغييرات في بيانات وفتح نماذج أو إغلاقها وأشياء أخرى كثيرة، يمكنك رؤيتها عند عرض تبويب Event من خصائص أي كائن في قاعدة البيانات، فمثلاً: عند عرض هذا التبويب في أحد نماذج Form قاعدة بياناتك، سيظهر لك كما في الصورة التالية:

نعم، من هذه القائمة الطويلة والمليئة بالأحداث يمكنك اختيار الحدث الذي تريد تنفيذ بعض الإجراءات (تعليمات برمجية) عند حدوثه. لابد من التنويه هنا إلى أن هذه القائمة تختلف من كائن إلى كائن في الـAccess.
تذكر أنك باستخدام إجراء حدث، يمكنك إضافة الاستجابة المخصصة (الأكواد البرمجية) الخاصة بك إلى حدث يقع في نموذج أو تقرير أو عنصر تحكم، عن طريق اختيار [Event Procedure] ثم الضغط على النقاط الثلاث كما توضح الصورة التالية:

هنا، قررنا إضافة إجراء وحددنا أن الحدث الذي يجرى الإجراء مصاحباً معه هو On Load. بعد الضغط على مربع النقاط الثلاث ستُفتح لك نافذة Microsoft Visual Basic يمكنك فيها كتابة التعليمات البرمجية التي تناسبك كما سنوضحها في الجزء الثاني يلي إن شاء الله.
إذن ما هو الإجراء؟
الإجراء عبارة عن وحدة من التعليمات البرمجية لـ Microsoft Visual Basic أو يمكننا القول (Visual Basic for Applications (VBA ما دمنا نتحدث عن الـAccess، فكلاهما في حديثنا وجهان لعملة واحدة :)
يحتوي الإجراء على سلسلة من العبارات التي تنجز عملية أو تحسب قيمة. على سبيل المثال، يستخدم إجراء الحدث التالي أسلوب OpenForm لفتح نموذج (الموظفين):
Private Sub Form_Load( )
DoCmd.OpenForm "بيانات الأعضاء"
End Sub
يوجد نوعان من الإجراءات: الإجراءات الفرعية وإجراءات الدالة (الإجراء دالة)، يأتي توضيحهما في ما يلي:
- الإجراءات الفرعية Sub Procedure:
الإجراءات الفرعية التي تنجز عملية أو سلاسل من العمليات لكنها لا ترجع قيمة. يمكنك إنشاء الإجراءات الفرعية الخاصة بك أو استخدام قوالب إجراء الحدث الذي ينشئه Microsoft Access. يبدأ الإجراء الفرعي بالعبارة Sub وينتهي بالعبارة End Sub.
يوجد لكل نموذج أو تقرير في قاعدة البيانات وحدة نمطية للنموذج أو وحدة نمطية للتقرير مضمنة وهي تحتوي على قوالب جاهزة لإجراء الحدث يمكنك فيها إضافة التعليمات البرمجية التي تعمل استجابة للأحداث التي تقع في النموذج أو التقرير أو عناصر التحكم (كما وضحت الصورة الأولى والصورة الثانية في هذا الدرس، وكما سيوضح الجزء الثاني من الدرس إن شاء الله).
عندما يتعرف Microsoft Access على حدث تم وضع إجراء له في نموذج أو تقرير أو عنصر تحكم، يتم تشغيل إجراء الحدث المطلوب تلقائياً للكائن فور حدوث الحدث فيه.
- إجراءات الدالة Function Procedure:
الإجراءات دالة (غالباً ما تسمى دالة) تُرجع قيمة، مثل نتيجة حساب. تتضمن Microsoft Visual Basic العديد من الدالات المضمنة يمكنك إنشاء دالة باستخدام العبارة Function وإنهاؤها بالعبارة End Function. كما يمكنك استخدام الدوال المبنية مسبقاً في اللغة، على سبيل المثال، ترجع الدالة Now التاريخ والوقت الحالي.
نتيجة لأن الدالة تقوم بإرجاع قيم، يمكنك استخدامها في أي تعبيرات برمجية في العديد من الأماكن في Microsoft Access أو في Module البرمجة لـ Visual Basic أو في العديد من إعدادات الخصائص أو في تعبير المعايير في عامل تصفية أو استعلام.
مثال:
يُرجع المثال التالي لإجراء دالة FirstOfNextMonth تاريخ اليوم الأول من الشهر التالي للتاريخ الحالي:
Function FirstOfNextMonth( )
FirstOfNextMonth = DateSerial(Year(Now), Month(Now) + 1, 1)
End Function
تحسب هذه الدالة النتيجة باستخدام الدالات DateSerial وYear وNow وMonth الـمبنية مسبقاً فيVBA.
بعد إنشاء هذه الدالة، يمكنك استخدامها في التعبير في أي مكان في Microsoft Access. على سبيل المثال، يمكنك تحديد أن يعرض مربع النص اليوم الأول من الشهر بعد التاريخ الحالي كقيمة الافتراضية للمربع بإعداد الخاصية قيمة افتراضية الخاصة بعنصر تحكم مربع نص للتعبير التالي في صفحة الخاصية:
=FirstOfNextMonth( )
ملاحظة:
لاستخدام أي دالة في الإعداد لخاصية، يجب أن تكون الدالة موجودة ومعرفة في الوحدة النمطية للنموذج Form Module أو للتقرير Report Module أو في الوحدة النمطية القياسية Standard Module.
لا يمكنك استخدام دالة عامة غير معرفة في فئة الوحدة النمطية Class Module كإعداد لخاصية نموذج أو تقرير.
هذا ما سنتعرف على طريقته إن شاء الله في الجزء الثاني من درسنا،