تتفاعل إجراءات الفيجوال بيسك مع المستخدم عن طريق نوعين من النوافذ، وهما: الرسائل الصندوقية MsgBox
، وصناديق الإدخال InputBox
.
التعامل مع الرسائل النصية MsgBox
تُستخدَم للتواصل والتفاعل مع المستخدِم، ومن خلالها يمكننا عرض المعلومات وطرح الأسئلة وحفظ الإجابات، كما يمكننا توجيهه لإجراء عمل ما في بعض الأحيان مثل (التأكد من الإغلاق، حفظ الملف قبل الإغلاق).
الشكل العام للصيغة
MsgBox(prompt,[buttons],[title],[help,context])
حيث أن:
- prompt: هو نص الرسالة التي ستظهر للمستخدِم، وهو مُعطى مطلوب.
- buttons: هي الأزرار التي سنضيفها للرسالة، وهو مُعطى اختياري، حيث أن القيمة الافتراضيّة له هي زر موافق.
- title: هو النص الذي سيظهر في شريط العنوان للرسالة، وهو مُعطى اختياري، حيث أن القيمة الافتراضيّة له هي Microsoft Excel.
- help,context: إرفاق ملف مساعد بمثابة دليل للمستخدم، وهو مُعطى اختياري ولا يُستخدم مع إكسل غالبًا.
أشكال الرسائل المستخدمة في MsgBox
يوجد خمس أجزاء تعمل على تشكيل الرسائل، أربعة منها أساسية وواحدة نادرة الاستخدام، بحيث نُدخلها كاملةً ضمن المُعطى button
وهي:
- نوع الأزرار الظاهرة.
- نوع الأيقونات ضمن الرسالة.
- تعيين الزر الافتراضي.
- تعيين نوع الاستجابة.
- إضافة بعض الخصائص للرسالة.
تحديد نوع الأزرار الظاهرة
لدينا الأنواع التالية التي تُحدد عمل الرسائل عن طريق الأزرار المستخدَمة وهي:
- vbOKOnly: تعمل على إظهار الزر OK فقط، رقم التعريف الخاص به 0، وهو الإفتراضي عند عدم تحديد نوع الزر المستخدَم. +vbOKCancel: تعمل على إظهار الزر OK مع زر Cancel، ورقم التعريف الخاص به 1.
- vbAbortRetryIgnore: تعمل على إظهار الأزرار Abort بمعنى فشل العملية، وRetry لإعادة المحاولة، وIgnore بعنى تجاهل الخطأ؛ أما رقم التعريف الخاص به 2.
- vbYesNoCancel: تعمل على إظهار الأزرار Yes، وNo، وCancel التي تفيد هنا إلغاء العملية؛ أما رقم التعريف الخاص به فهو 3.
- vbYesNo: تعمل على إظهار الأزرار Yes، وNo ، ورقم التعريف الخاص به هو 4.
- vbRetryCancel: تعمل على إظهار الأزرار Cancel، وRetry، رقم التعريف الخاص به هو 5.
نستطيع استخدام أحد هذه الأزرار ببساطة، ولكن نحتاج إلى تعريف متغيّر نوعه MsgBoxResult
لتخزين نتيجة اختيار المستخدِم فيه لاستعمالها لاحقًا في تنفيذ الأوامر. ولا نُعرّف هذا المتغيّر في حال استخدامنا للزرvbOKOnly
فقط.
آلية حفظ نتيجة اختيار المستخدم
على فرض أننا نستعمل الزر من النوع vbYesNoCancel
، فسيكون له ثلاثة احتمالات لاختيار المستخدم، ولتكن لدينا الصيغة التالية:
Sub test1() Dim result As VbMsgBoxResult result = MsgBox("هل أنت متأكد من الإغلاق", vbYesNoCancel) End Sub
هنا تكون النتيجة إحدى الاحتمالات التالية vbYes
، وvbNo
، وvbCancel
. وعند الضغط على أحد هذه الأزرار، فستُحفظ قيمته في المتغيّر بحيث يمكننا الاستفادة منها لاحقًا في تنفيذ بعض التعليمات اعتمادًا عليها، وبنفس الطريقة تعمل باقي الأزرار. كما يمكننا استخدام رقم التعريف عوضًا عن الاسم، أي لاستعمال الزر vbYesNoCancel
نضع في المُعطى الخاص به الرقم المُعرِّف له بدل اسم الزر وهو 3، والذي يعطي نفس النتيجة.
Sub test1() Dim result As VbMsgBoxResult result = MsgBox("هل أنت متأكد من الإغلاق", 3) End Sub
تحديد نوع الأيقونات الظاهرة
- vbCritical: إظهار علامة X، ورقم التعريف الخاص به 16.
- vbQuestion: إظهار علامة الاستفهام، ورقم التعريف الخاص به 32.
- vbExclamation: إظهار علامة التعجب الصفراء المثلثة، ورقم التعريف الخاص به 48.
- vbInformation: إظهار علامة التعجب الزرقاء الدائرية، ورقم التعريف الخاص به 64.
يمكننا إضافة الأيقونة للرسالة عن طريق الوسيطة buttons
، وذلك بإضافة اسم الأيقونة إلى اسم الزر، لنفصل بينهما بإشارة +، وبالعودة للمثال السابق وإضافة الأيقونة سنحصل على الصيغة التالية:
Sub test1() Dim result As VbMsgBoxResult result = MsgBox("هل أنت متأكد من الإغلاق", vbYesNoCancel+ vbInformation) End Sub
أو بالصيغة المرجعية لرقم الخاصية:
Sub test1() Dim result As VbMsgBoxResult result = MsgBox("هل أنت متأكد من الإغلاق", 3 + 64) End Sub
تحديد الزر الافتراضي
يمكننا تحديد أي الأزرار يكون هو الافتراضي عند الضغط على زر Enter
من لوحة المفاتيح.
- vbDefaultButton1: الزر الأول هو الافتراضي، ورقم التعريف الخاص به 0.
- vbDefaultButton2: الزر الثاني هو الافتراضي، ورقم التعريف الخاص به 256.
- vbDefaultButton3: الزر الثالث هو الافتراضي، ورقم التعريف الخاص به 512.
- vbDefaultButton4: الزر الرابع هو الافتراضي، ورقم التعريف الخاص به 768.
تحديد نوع الاستجابة
- vbApplicationModal: عند استخدامها تُجبر المستخدِم على الاستجابة للرسالة قبل المتابعة، ورقم التعريف الخاص به 0.
- vbSystemModal: عند استخدامها فإن جميع برامج النظام تتوقف حتى يستجيب المستخدم للرسالة، ورقم التعريف الخاص به 4096.
إضافة بعض الخصائص للرسالة
- vbMsgBoxHelpButton: إظهار زرّ Help على الرسالة، ورقم التعريف الخاص به 16384.
- vbMsgBoxSetForeground: جعل نافذة الرسالة في مقدمة النوافذ المفتوحة، ورقم التعريف الخاص به 65536.
- vbMsgBoxRight: محاذاة نص الرسالة للجهة اليُمنى، ورقم التعريف الخاص به 524288.
- vbMsgBoxRtlReading: اتجاه الكتابة من اليمين لليسار للغة العربية، ورقم التعريف الخاص به 1048576.
اقتباسهام جدًا: يمكننا استعمال خاصية واحدة من كل مجموعة من المجموعات السابقة في الرسالة الواحدة، ولا يمكننا استخدام خاصيتين من نفس المجموعة في نفس الرسالة.
مثال تطبيقي
ليكن لدينا جدول البيانات التالية ونريد كتابة إجراء يحذف البيانات ضمن الجدول، ولكن قبل الحذف نريد من المستخدم تأكيد العملية عن طريق MsgBox
وفي حال لم يوافق على الحذف تظهر له رسالة أخرى تُعلمه أن البيانات لم تُحذف:
لكتابة الإجراء الخاص بالعمليات السابقة، نُعرّف الإجراء ونضع له الاسم "clear"، ثم نُعرّف متغيّر من النوع VbMsgBoxREsult
ونُسند إليه الرسالة التي ستظهر للمستخدِم، والتي تحتوي على رسالة تأكيد عملية الحذف. بحيث يكون الزر فيها من النوع vbYesNo
، والأيقونة من النوع vbQuestion
، بالإضافة لعنوان الرسالة الذي يُعبّر عن تحذير تصبح الصيغة كالتالي:
result = MsgBox("هل أنت واثق من حذف البيانات", vbYesNo + vbQuestion, "تحذير")
لاستخدام نتيجة اختيار المستخدم نضع شرطًا، بحيث إذا ضغط المستخدِم على الزر yes، فسيُنفِّذ عملية حذف البيانات؛ أما إذا ضغط على الزر No، فينتقل للشق الثاني من الشرط وهو إظهار رسالة بأن البيانات لم تُحذف، نكتب الشرط بالصيغة التالية:
If result = vbYes Then ActiveSheet.Range("D12:H29").ClearContents Else MsgBox ("البيانات لم تُحذف") End If
هكذا نكون قد حصلنا على الإجراء المطلوب ويصبح الإجراء كاملًا كالتالي:
Sub Clear() Dim result As VbMsgBoxResult result = MsgBox("هل أنت واثق من حذف البيانات", vbYesNo + vbQuestion, "تحذير") If result = vbYes Then ActiveSheet.Range("A2:H12").ClearContents Else MsgBox ("البيانات لم تُحذف") End If End Sub
التفاعل مع المستخدم عبر صندوق الإدخال عن طريق InputBox
مثل سابقتها، تعمل على إظهار رسالة للمستخدِم، ولكن عن طريقها يستطيع المستخدِم إدخال قيمة ما عبر صندوق إدخال القيم، ولدينا نوعان منها.
الشكل العام للصيغة
InputBox(prompt, [ title ], [ default ], [ xpos ], [ ypos ], [ helpfile, context ])
هذه التعليمة خاصّة بلغة فيجوال بيسك عمومًا، حيث أن:
- prompt: هو نص الرسالة التي ستظهر للمستخدِم، وهو مُعطى مطلوب.
- title: هو النص الذي سيظهر في شريط العنوان للرسالة، وهو مُعطى اختياري، حيث أن القيمة الافتراضيّة له هي *Microsoft Excel*.
- default: هي القيمة الافتراضيّة في صندوق الإدخال، وهو مُعطى اختياري.
-
xpos: هي الموقع الأفقي لظهور الرسالة في الصندوق، وهو مُعطى اختياري، تكون القيمة الافتراضيّة له
Left
. -
ypos: هي الموقع الشاقولي لظهور الرسالة في الصندوق وهو مُعطى اختياري، وتكون القيمة الافتراضيّة له
Top
. - help,context: إرفاق ملف مساعد بمثابة دليل للمستخدم، وهو مُعطى اختياري ولا يُستخدم مع إكسل غالبًا.
expression.InputBox (Prompt, [ title ], [ default ], [ xpos ], [ ypos ], [ helpfile, context ], [Type])
هذه التعليمة خاصة بتطبيقات أوفيس مع الفيجوال بيسك، حيث أن المعطيات هي نفسها ولكن مع بعض الزيادات:
-
expression: عن طريقها نُحدد كائن من كائنات الإكسل الذي سنطبق التعليمات عليه مثل الكائن
Application
. - type: تحدد نوع البيانات التي سيُدخلها المستخدِم، ولدينا عدة أنواع كما هو موضح في الصورة.
آلية العمل والفرق بين الصيغتين
نُعرِّف متغيّرات تعمل على حفظ القيمة التي سيُدخلها المستخدِم، ثم نُسند التعليمة إلى هذا المتغيّر، ولكن يوجد فرق جوهري وهو في الصيغة الأولى، فعند وجود خطأ في إدخال قيمة بغير الصيغة التي عرّفنا فيها المتغيّر، فسيوقف المحرّر الإجراء بدون معرفة ما هو نوع الخطأ، حيث سيُحدد السطر الذي يحتوي على هذا الخطأ باللون الأصفر فقط؛ أما في الصيغة الثانية، فسيُحدد المحرّر نوع الخطأ ويُظهر رسالة تُعلِم المستخدم أنه أدخل صيغة خاطئة.
مثال
لدينا الملف التالي الذي يحتوي على صفحتين، الأولى تسمح لنا بتسجيل الدخول عن طريق صندوقي إدخال الأول لاسم المستخدم، والثاني لكلمة المرور، وإظهار الصفحة الثانية التي تحتوي على بيانات الشركة. حيث أنّ الصفحة الثانية مخفية عن طريق تغيير قيمة الخاصية visible
لها إلى القيمة xlSheetVeryHidden
، وهي خاصية لا تسمح لنا بإظهار الصفحة من ملف الإكسل بالطريقة التقليدية، إنما فقط عن طريق الإجراءات أو عن طريق القائمة Property
التي تحدثنا عنها في درس التعريف عن الواجهة الرئيسية للمحرّر:
نبدأ الإجراء بتعريف المتغيّرات التي سنُخزن فيها القيم التي سيُدخلها المستخدِم لموازنتها فيما بعد مع القيم الصحيحة لتسجيل الدخول، وتكون لدينا الصيغة التالية:
Dim UserName As String Dim Password As Double UserName = InputBox("Enter your user name", "Username", "Your Name") Password = Application.InputBox("Enter your password", "Password", Type:=1)
كتبنا المُعطى Type:=1
بهذا الشكل وهو طريقة ثانية لكتابة قيم المُعطيات عندما نريد تجاوز المُعطيات التي تسبق المُعطى الذي نريده، ولو أردنا كتابتها بالصيغة الأساسية فستكون كالتالي:
Application.InputBox("Enter your password", "Password", , , , ,1)
بعد تعريف المتغيّرات إسناد القيم من صناديق الإدخال لها بقي لنا أن نضع شرطًا يتحقّق من أن ما أدخله المستخدِم يطابق شروط الدخول إلى صفحة البيانات أم لا ويكون الشرط بالصيغة التالية:
If UserName = "Maher" And Password = 123 Then Sheets("data").Visible = xlSheetVisible Else MsgBox "Incorrect Username or Password" End If
يُصبح الإجراء بالكامل كالتالي:
Sub check_user() Dim UserName As String Dim Password As Double UserName = InputBox("Enter your user name", "Username", "Your Name") Password = Application.InputBox("Enter your password", "Password", Type:=1) If UserName = "Maher" And Password = 123 Then Sheets("data").Visible = xlSheetVisible Else MsgBox "Incorrect Username or Password" End If End Sub
عند إدخال اسم مستخدم أو كلمة مرور غير صحيحة، سيُنفِّذ الإجراء الشق الثاني من الشرط، وهي رسالة تفيد بأن اسم المستخدِم أو كلمة المرور خاطئة؛ أما عند إدخال بيانات صحيحة، فسيُنفِّذ الشق الأول من الشرط عندها تظهر الصفحة Data
.
خاتمة
نلاحظ أن صندوق الرسائل وصندوق الإدخال يسمح لنا بزيادة ضبط التحكم بالعمليات وتوجيه المستخدم بطريقة منظمة ودقيقة، وكلما كانت العمليات دقيقةً ومنظمةً أكثر، حصلنا على بيانات صحيحة ومنظمة ومحميّة أكثر. وبدمج صناديق الإدخال وصناديق الرسائل مع الشروط، فسنحصل على إجراءات تُنجز الكثير من الأعمال بتنظيم وسرعة في آن واحد، وبنتائج تُحقّق لنا الكثير من الفائدة.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.