اذهب إلى المحتوى

البحث في الموقع

المحتوى عن 'إكسل vba'.

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المحتوى


التصنيفات

  • الإدارة والقيادة
  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • السلوك التنظيمي في المؤسسات
  • عالم الأعمال
  • التجارة والتجارة الإلكترونية
  • نصائح وإرشادات
  • مقالات ريادة أعمال عامة

التصنيفات

  • مقالات برمجة عامة
  • مقالات برمجة متقدمة
  • PHP
    • Laravel
    • ووردبريس
  • جافاسكربت
    • لغة TypeScript
    • Node.js
    • React
    • Vue.js
    • Angular
    • jQuery
    • Cordova
  • HTML
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • لغة C#‎
    • ‎.NET
    • منصة Xamarin
  • لغة C++‎
  • لغة C
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • لغة Rust
  • برمجة أندرويد
  • لغة R
  • الذكاء الاصطناعي
  • صناعة الألعاب
  • سير العمل
    • Git
  • الأنظمة والأنظمة المدمجة

التصنيفات

  • تصميم تجربة المستخدم UX
  • تصميم واجهة المستخدم UI
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب GIMP
    • كريتا Krita
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • مقالات DevOps عامة
  • خوادم
    • الويب HTTP
    • البريد الإلكتروني
    • قواعد البيانات
    • DNS
    • Samba
  • الحوسبة السحابية
    • Docker
  • إدارة الإعدادات والنشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
    • ريدهات (Red Hat)
  • خواديم ويندوز
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • شبكات
    • سيسكو (Cisco)

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح
  • مبادئ علم التسويق

التصنيفات

  • مقالات عمل حر عامة
  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • العمل الحر المهني
    • العمل بالترجمة
    • العمل كمساعد افتراضي
    • العمل بكتابة المحتوى

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
    • بريستاشوب
    • أوبن كارت
    • دروبال
  • الترجمة بمساعدة الحاسوب
    • omegaT
    • memoQ
    • Trados
    • Memsource
  • برامج تخطيط موارد المؤسسات ERP
    • تطبيقات أودو odoo
  • أنظمة تشغيل الحواسيب والهواتف
    • ويندوز
    • لينكس
  • مقالات عامة

التصنيفات

  • آخر التحديثات

أسئلة وأجوبة

  • الأقسام
    • أسئلة البرمجة
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات

التصنيفات

  • كتب ريادة الأعمال
  • كتب العمل الحر
  • كتب تسويق ومبيعات
  • كتب برمجة
  • كتب تصميم
  • كتب DevOps

ابحث في

ابحث عن


تاريخ الإنشاء

  • بداية

    نهاية


آخر تحديث

  • بداية

    نهاية


رشح النتائج حسب

تاريخ الانضمام

  • بداية

    نهاية


المجموعة


النبذة الشخصية

تم العثور على 4 نتائج

  1. تُعَد صناعة واجهات الإدخال من أقوى المزايا في إكسل التي تجعلنا قادرين على إدخال بياناتنا من خلال عناصر وأدوات إدخال وقوائم منسدلة، وتنقلها مباشرةً إلى صفحات الإكسل، أي كأننا نُحول الإكسل لبرنامج قواعد بيانات متكامل. تصميم واجهة تفاعلية مع المستخدم User Form يمكننا تصميم واجهة تفاعلية عن طريق محرر الفيجوال بيسك في الإكسل، حيث يمكننا تصميم واجهة إدخال واستعراض بياناتنا من خلاله، وذلك بأن نفتح محرر الشيفرات، ومن القائمة Insert نختار الأمر UserForm، فتظهر لنا النافذة التالية: نلاحظ وجود مجموعة من الأدوات ضمن صندوق الأدوات ToolBox تحتوي على الأزرار وعناصر الإدخال والتحكم التي يمكننا إضافتها إلى مساحة العمل الفارغة بجانبه، والتي يمكننا التحكم بأبعادها من حيث الطول والعرض، وذلك بالسحب من الأطراف. حيث يكون لدينا في الطرف الأيسر للقائمة Properties نافذة الخصائص التي نستطيع من خلالها تعيين كل خصائص الواجهة أو خصائص عناصر الإدخال فيها، وهي قائمة بغاية الأهمية لأننا من خلالها سنُعيّن جميع خيارات العناصر. بعض الأدوات في صندوق ToolBox توجد العديد من الأدوات التي يمكننا التعامل معها لصناعة الواجهات، وتختلف هذه الأدوات بين إصدارات مايكروسوفت أوفيس اختلافًا بسيطًا، ومن أهم هذه الأدوات وأكثرها استخدامًا الأدوات التالية: CheckBox: يتيح هذا العنصر للمستخدم تحديد خيار أو أكثر. ComboBox: يتيح هذا العنصر للمستخدم تحديد عنصر من القائمة المنسدلة. CommandButton: يسمح عنصر التحكم هذا للمستخدم بتنفيذ إجراء معين، حيث يُشغِّل إجراءً فرعيًا منفصلًا. Label: يتيح هذا العنصر عرض النص للمستخدم، ويُستخدم عادةً لعرض نص وصفي بجانب العناصر. ListBox: يسمح عنصر التحكم هذا للمستخدم بالاختيار من قائمة الخيارات الممكنة. +OptionButton: يسمح عنصر التحكم هذا للمستخدم بالاختيار من قائمة الخيارات الممكنة اختيارًا واحدًا فقط. Ref Edi: يسمح عنصر التحكم هذا للمستخدم بتحديد نطاق من الخلايا. TextBox: يتيح هذا العنصر إمكانية عرض النص والسماح للمستخدم بإدخال المعلومات. Frame: يتيح هذا العنصر تجميع العناصر الأخرى معًا. Calendar: يتيح هذا العنصر تضمين تقويم دائم في ورقة عمل. Image: يتيح هذا العنصر إمكانية إضافة رسم أو صورة إلى واجهة المستخدم. SpinButton: يتيح هذا العنصر للمستخدم تحديد قيمة بالنقر فوق زرين، إما لزيادة القيمة أو تقليلها. مثال نريد تصميم واجهة إدخال تحتوي على البيانات الخاصة بموظفي إحدى المنشآت، ونريد مثلًا البيانات التالية: الاسم. الجنس. الوضع الوظيفي. رقم الهاتف. تقييم العمل. الراتب. نرسم عناصر الإدخال ضمن مساحة العمل المخصصة، ويلزمنا في البداية عنصر من النوع TextBox لإدخال الاسم، وعنصر من النوع Label، ونحدد أبعاد كل منهما، حيث يمكننا التحكم بأبعادهما من طول وعرض حسب ما نراه مناسبًا. يمكن تحرير النص الخاص بـ Label عن طريق النقر عليه مرةً واحدةً لتحريره، ثم نحدد النص ونستبدله بما نريد، أو عن طريق القائمة Properties عن طريق الخاصية Caption التي تُعبر عن الاسم الظاهر للمستخدم، ونُغيّر الاسم الذي تحتويه. الآن نرسم العنصر الخاص بالجنس، وبما أن الإجابة تكون أحد اختيارين، فنختار الأداة OptionButton، ونضع لها العنوان بجانبها. ثم نرسم العنصر الخاص بالوضع الوظيفي هنا، ويمكن أن تكون العديد من الخيارات، والإجابة هي أحد هذه الخيارات، لذا الأداة المناسبة هي ComboBox. العنصران رقم الهاتف والراتب عبارة عن TextBox، والعنصر تقييم العمل عبارة عن ComboBox، لذا ننسخ العناصر السابقة مع تغيير عناوينها Label. نُعدل من ترتيب العناصر قليلًا، ونضع كل 3 عناصر في عمود، ونلاحظ أن الأبعاد بالنسبة للعناصر غير متساوية بالكامل، لذا يجب تعديلها لتظهر بنفس الأبعاد وبمظهر أفضل، ولإجراء ذلك نحدد العناصر ذات الشكل المتقارب TextBox وComboBox، ومن القائمة Format الخاصة بتنسيق العناصر نختار الأمر Make Same Size، ومن هنا نجد الخيارات التالية: Width: لجعل العناصر بنفس العرض. Height: لجعل العناصر بنفس الطول. Both: لجعل العناصر بنفس العرض والطول. نختار منها الأمر Both. ثم نُنسق العناصر من خلال محاذاة العناصر في العمود الواحد والسطر الواحد، وذلك من القائمة نفسها Format، حيث نختار الأمر Align، فنحدد العناصر في العمود الواحد ونجعل المحاذاة في المنتصف من الأمر Center، ونحدد عناصر كل صف ونجعل المحاذاة سفليةً من الأمر Bottom، ثم نساوي بين تباعد العناصر، وذلك بتحديد عناصر العمود الواحد، ومن نفس القائمة نختار الأمر vertical Spacing الذي يأخذ القيم التالية: Make Equal: لجعل كل المسافات الأفقية والعمودية بين العناصر بنفس الحجم. Increase: لزيادة المسافة بين العناصر درجةً واحدةً من كل الجوانب. Decrease: لتقليل المسافة بين العناصر درجةً واحدةً من كل الجوانب. Remove: لإزالة المسافة بين العناصر. نختار منها الأمر Make Equal. نُسمي الآن العناصر بأسماء برمجية لاستدعائها عند كتابة الإجراءات واستخدامها فيها، ولإجراء ذلك نحدد العنصر، ومن القائمة Properties عند الخاصية المسماة Name نضع اسمًا مُعبرًا عن العنصر (الاسم اختياري، ولكن يجب ألا يحتوي على فراغات). نسمي العناصر بالأسماء التالية: الاسم = txtName. ذكر = OptMale. أنثى = OptFemale . الوضع الوظيفي = JopStatus. رقم الهاتف = PhoneNumber. تقييم العمل = Rate. الراتب = Salary. إلى الآن لا تحتوي قوائمنا المنسدلة على أية قيم، لذا نحتاج إلى تخصيص قيم مناسبة لها، وذلك باستيراد مجال من الخلايا من صفحة إكسل في ملف العمل، حيث ننشئ ورقة عمل جديدةً، ونضع فيها القيم المحتملة لجميع القوائم التي نعمل عليها ونستوردها لواجهة الإدخال عن طريق الخاصية RowSource في القائمة Properties، ونضع فيها المجال بذكر اسم الصفحة بعده إشارة تعجب (!) بعدها المجال الخاص بهذه القائمة المنسدلة. الآن أصبحت قوائمنا جاهزة، ولكن عند تشغيل الواجهة هنا نلاحظ أنه يمكننا تعبئة عنصر القائمة المنسدلة يدويًا، وذلك الأمر خاطئ، لذا يجب أن نقيد واجهة الإدخال بالمجال الذي استوردناه فقط، وذلك عن طريق الخاصية MatchRequired من القائمة Properties، حيث إن القيمة الافتراضية لها False التي تُمكن المستخدم من إدخال بيانات غير موجودة في القائمة، لذا نضع القيمة True بدلًا منها، وذلك لتقييد إدخالات المستخدم بمحتويات القائمة فقط. نجد في الصورة السابقة أننا نستطيع إدخال قيم من خارج القائمة المنسدلة ضمن العنصر الخاص بالوضع الوظيفي، لأن الإدخال غير مقيد، ولكن لم نستطع إدخال قيمة من خارجها في عنصر التقييم، لأن الإدخالات فيها مقيدة، وأظهر لنا المحرر رسالة خطأ تُفيد بأن القيمة المُدخلة غير مقبولة. لنُصمم الآن عنصر زر يعمل على ترحيل البيانات الموجودة في الوجهة إلى صفحة إكسل والإضافة تراكميًا، أي كلما أضفنا بيانات جديدة وضغطنا زر الإدخال تُرحل البيانات إلى السطر الفارغ أسفل البيانات، ونضع اسمًا برمجيًا له BtnExport. الآن نغير من الاسم البرمجي للواجهة تغييرًا كاملًا، ونضع لها الاسم UserForm، ونغير من الظاهر للمستخدم عن طريق الخاصية Caption. أصبحت واجهة الإدخال جاهزةً للبرمجة وربطها مع خلايا الصفحة التي سنُرحل إليها البيانات، وهو ما سنتعلمه لاحقًا. الخصائص العامة للعناصر في القائمة Properties تحتوي القائمة Properties على خصائص معينة لكل عنصر، حيث تُستخدم لتعيين الميزات أو تحريرها وفقًا لاحتياجات ومتطلبات المستخدم، وللتعديل نضغط على الخاصية ونُعدلها في العمود الأيمن، ومن أهم هذه الخصائص: Name: الاسم البرمجي للعنصر الذي تتعرف عليه الإجراءات عند كتابة الشيفرات البرمجية، ويتكون من 40 حرفًا بحد أقصى. Caption: تُستخدم هذه الخاصية لتحديد الاسم الظاهري للعنصر الذي يظهر في تصميم الواجهة. Height, Width: تُستخدم هذه الخاصية لتعيين ارتفاع وعرض نموذج المستخدم والعناصر الخاصة به، ويمكنك تخصيص الحجم عن طريق إدخاله يدويًا في خاصية الارتفاع والعرض في نافذة الخصائص، وتعيين القيم بالنقاط، ولا يمكن أن تُقبَل القيم السالبة. Value: يكثر استخدام هذه الخاصية مع العنصرين CheckBox وOptionButton، حيث تجعل العنصر مُفعلًا تلقائيًا، أي أنه يكون قيمةً افتراضيةً ويأخذ القيمة 1 أو القيمة True، بمعنى أن العنصر مُفعل افتراضيًا، والقيمة 0 أو القيمة False التي تعني أنه غير مفعل؛ أما في العنصرين TextBox وComboBox، فيمكننا وضع قيمة نصية أو رقمية افتراضية، ولكن يجب الانتباه أن تكون القيمة ضمن خيارات القائمة المنسدلة ومطابقةً للقيمة في صفحة الإكسل تمامًا. AutoSize: تستخدم هذه الخاصية لتحديد ما إذا كان حجم العنصر الذي يعرض المحتوى بالكامل تلقائيًا أم لا، وإذا عُيِّنت هذه الخاصية على القيمة TRUE فسيعمل تلقائيًا على تغيير حجم عنصر التحكم المحدد وفقًا لحجم المحتوى؛ أما بالنسبة للقيمة FALSE (الخيار الافتراضي)، فسيحتفظ بحجم عنصر التحكم كما هو أثناء التصميم. BackColor: تُستخدم هذه الخاصية لتعيين لون الخلفية للعناصر، ولتنفيذ خاصية BackColor يجب التأكد من ضبط نمط الخلفية لخاصية BackStyle على خلفية معتمة. BorderColor: تُستخدم هذه الخاصية لتعيين لون الحدود لـ UserForm والعناصر الخاصة به، ولتطبيق خاصية لون الحدود يجب تعيين الخاصية BorderStyle إلى قيمة غير صفرية. ControlTipText: تُستخدم هذه الخاصية لعرض النص عندما يشير المستخدم ويمرر الماوس فوق العنصر، وهذه الخاصية مفيدة في تثقيف المستخدمين من خلال تقديم نصائح أو تفسيرات حول استخدام العنصر. Font: تحدد هذه الخاصية نوع الخط المستخدم في نموذج المستخدم أو في العناصر، ويمكنك التلاعب بالخط بسهولة عن طريق تحديد اسم الخط الخاص به ونمطه وحجمه. MousePointer: تُستخدم لتحديد الطريقة التي يُعرَض مؤشر الماوس فيها عندما يتحرك فوق العنصر، حيث توجد العديد من الأشكال التي يمكن اختيارها. Visible: تحدد هذه الخاصية إمكانية الرؤية للتحكم في النموذج، فإذا عُيِّن على القيمة المنطقية TRUE (القيمة الافتراضية)، فسيكون العنصر مرئيًا آخر، وإلا بالنسبة للقيمة False فسيختفي العنصر، ويمكن استخدام هذه الخاصية لعرض عنصر مخفي فقط في حالة استيفاء أي شرط، وإلا سيظل العنصر مخفيًا. خاتمة من خلال ما طرحناه نكون استوفينا أهم آليات تصميم الواجهات التي تُعَد من الطرق التي تجعل التعامل مع عمليات إدخال البيانات أكثر متعةً ودقةً وأقل تشتيتًا للمستخدم، حيث سيكون كل تركيزه فقط في بعض الخانات التي يتعامل معها من خلال هذه الواجهة، ولا يتشتت نظره في الكم الهائل من البيانات كما في طريقة الإدخال التقليدية. اقرأ أيضًا المقال السابق: صناعة الدوال الخاصة والتعامل مع الأحداث في مايكروسوفت إكسل VBA استخدام الشيفرات لتنفيذ العمليات الأساسية في مايكروسوفت إكسل VBA استخدام أدوات مايكروسوفت إكسل لتنسيق الخلايا عن طريق الشيفرات VBA الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل
  2. تعلمنا في الدرس السابق حول تصميم واجهات إدخال البيانات باستخدام مايكروسوفت إكسل VBA كيفية تصميم واجهة إدخال البيانات وتوزيع الكائنات، وتنسيقها وتجهيزها لعملية البرمجة، وكذا ربطها بخلايا الصفحة التي ستُرحَّل إليها البيانات عند الضغط على زر الإدخال. وفي هذا المقال سنتعرف على كيفية برمجة هذه الواجهت باستخدام مايكروسوفت إكسل VBA. كتابة الإجراءات الخاصة بالكائنات لتحرير الشيفرة البرمجية الخاصة بالكائن نضغط على الكائن نقرةً مزدوجةً، لتظهر لدينا النافذة التي نكتب فيها الشيفرات والإجراءات مثل العادة. مثال لفهم آلية البرمجة بالتفصيل سنُبرمج الواجهة التي صممناها مسبقًا، ولكن في البداية يجب تجهيز صفحة استقبال البيانات في ملف الإكسل، فتصبح واجهة الإدخال وصفحة الإكسل كالتالي: والآن سنحرر واجهة كتابة الشيفرات الخاصة بزر الإدخال، ونبدأ بكتابة التعليمات الخاصة بترحيل البيانات إلى صفحة الإكسل، وهنا نلاحظ أن الإجراء الموجود فيها هو إجراء يُنفذ عند النقر على الزر. والآن نُقسّم الشيفرة إلى أجزاء صغيرة ليسهل علينا التفكير في آلية إنشائها، والعمل الفعلي للواجهة هو جمع البيانات التي نُدخلها عبر كائناتها وترحيلها إلى صفحة الإكسل، ووضعها في السطر الأخير، لذا يجب علينا في البداية معرفة كيف يمكننا معرفة رقم السطر الأخير غير الفارغ، ثم نُرحل البيانات للسطر الذي يليه، ولمعرفة رقمه نَعُدّ الأسطر غير الفارغة ضمن الصفحة كالتالي: نُعرّف متغير من النوع integer، أو من النوع long، ونُخزن فيه عدد الأسطر غير الفارغة كما يلي: Private Sub btnAdd_Click() Dim LastRow As Long End Sub نكتب الدالة المسؤولة عن عدّ الخلايا غير الفارغة، وهي الدالة CountA، ولكن لاستدعائها ضمن الإجراء نكتبها بالشكل التالي: LastRow = WorksheetFunction.CountA(Sheets("الموظفون").Range("A:A")) كما نلاحظ تُستدعى الدوال الأساسية في إكسل عن طريق الفيجوال بيسك بأن نضع قبلها التعليمة WorksheetFunction، لكن هنا عند تحديد المجال يجب أن نُعرّف مساره كاملًا ابتداءً من اسم الصفحة كما في التعليمة السابقة، حيث نضع: Sheets("الموظفون").Range("A:A") أي أن المحرر يستدعي الدالة CountA، ويحدد لها المجال الذي ستحصي الخلايا منه، ويُخزن النتيجة في المتغير LastRow. الآن نربط كل كائن في الواجهة مع الخلية المقابلة له في صفحة الإكسل، وذلك كالتالي: Sheets("الموظفون").Cells(LastRow + 1, 1).Value = UserForm.txtName.Value هنا عرّفّنا المسار الذي سنُسند إليه قيمة الكائن، حيث إن التعليمة Cells(value1,value2) لديها وسيطتان، الأولى تُعبر عن رقم السطر والثانية تُعبّر عن رقم العمود، ولدينا هنا رقم السطر هو عبارة عن متغير LastRow الذي يَعُد الخلايا غير الفارغة ونضيف له القيمة 1 لنحصل على موقع أول سطر فارغ بعد البيانات؛ أما UserForm.Name.Value، فتُعبر عن القيمة المُدخلة عن طريق الواجهة. يجب أن لا ننسى أن نتعامل هنا عن طريق الاسم البرمجي، وبنفس الطريقة نُسند باقي الكائنات إلّا الكائنات من النوع OptionButton، وهنا لدينا عدّة قيم للكائن، حيث يجب أن نفحص الكائن هل هو نشط أم لا، وذلك حتى نعوّض قيمة الكائن النشط منها في الخلية الخاصة به، وتكون التعليمات كالتالي: If UserForm.OptMale = True Then Sheets("الموظفون").Cells(LastRow + 1, 3).Value = "Male" Else Sheets("الموظفون").Cells(LastRow + 1, 3).Value = "Female" End If أما التعليمات الخاصة ببقية الكائنات فهي كالتالي: Sheets("الموظفون").Cells(LastRow + 1, 2).Value = UserForm.JobStatus.Value Sheets("الموظفون").Cells(LastRow + 1, 5).Value = UserForm.PhoneNumber.Value Sheets("الموظفون").Cells(LastRow + 1, 6).Value = UserForm.Rate.Value Sheets("الموظفون").Cells(LastRow + 1, 4).Value = UserForm.Salary.Value نلاحظ أن البيانات تبقى موجودةً في الكائنات بعد الإرسال، لذا لا بد من كتابة تعليمات تعمل على تفريغ الكائنات بعد ترحيلها، ولإجراء ذلك نُسند قِيَمًا فارغةً للكائنات بعد عمليات الترحيل، وتكون التعليمات كالتالي: UserForm.txtName.Value = "" UserForm.OptMale = False UserForm.OptFemale = False UserForm.JobStatus.Value = "" UserForm.PhoneNumber.Value = "" UserForm.Rate.Value = "" UserForm.Salary.Value = "" نلاحظ أن العمليات تعمل على أكمل وجه والواجهة تعمل بطريقة جيدة، ولكن لو ضغطنا على زر الإدخال بدون ملء الكائنات بالبيانات، فسنلاحظ أنه سيملأ صفحة الإكسل بسطرٍ فارغ، وذلك يُعَد خطأً برمجيًا كبيرًا. نكتب شروط إدخال للتغلب على الحالة السابقة، لذا نفحص ببساطة جميع الكائنات قبل ترحيل البيانات، فإذا وُجد كائن فارغ فسنوجه المستخدم إلى تعبئته وعدم تركه فارغًا عن طريق رسالة نصية، والتعليمات الخاصة بهذا الجزء من الإجراء كالتالي: If UserForm.txtName.Value = "" Or (UserForm.OptMale = False And UserForm.OptFemale = False) Or_ UserForm.JobStatus.Value = "" Or UserForm.PhoneNumber.Value = "" Or_ UserForm.JobRate.Value = "" Or UserForm.Salary.Value = "" Then_ MsgBox "يُرجى إتمام البيانات" يصبح الإجراء كاملًا بالشكل التالي: Private Sub btnAdd_Click() Dim LastRow As Long LastRow = WorksheetFunction.CountA(Sheets("الموظفين").Range("A:A")) If UserForm.txtName.Value = "" Or UserForm.JobStatus.Value = "" Or (UserForm.OptMale = False And UserForm.OptFemale = False) Or UserForm.PhoneNumber.Value = "" Or UserForm.Rate.Value = "" Or UserForm.Salary.Value = "" Then MsgBox "يُرجى إتمام البيانات" Else Sheets("الموظفون").Cells(LastRow + 1, 1).Value = UserForm.txtName.Value Sheets("الموظفون").Cells(LastRow + 1, 2).Value = UserForm.JobStatus.Value If UserForm.OptMale = True Then Sheets("الموظفون").Cells(LastRow + 1, 3).Value = "Male" Else Sheets("الموظفون").Cells(LastRow + 1, 3).Value = "Female" End If Sheets("الموظفون").Cells(LastRow + 1, 5).Value = UserForm.PhoneNumber.Value Sheets("الموظفون").Cells(LastRow + 1, 6).Value = UserForm.Rate.Value Sheets("الموظفون").Cells(LastRow + 1, 4).Value = UserForm.Salary.Value UserForm.txtName.Value = "" UserForm.OptMale = False UserForm.OptFemale = False UserForm.JobStatus.Value = "" UserForm.PhoneNumber.Value = "" UserForm.Rate.Value = "" UserForm.Salary.Value = "" End If End Sub لتطوير العمل أكثر يمكننا إضافة زر جديد على الواجهة السابقة، وعمله هو حذف البيانات التي أدخلناها للكائنات ولم نُرحلها إلى صفحة الإكسل بعد (أي لم نضغط على زر الإدخال)، ويؤدي فقط الجزء الأخير من الإجراء السابق الخاص بتفريغ الكائنات بعد الإرسال، لذا نُضيف زرًا جديدًا نُسميه حذف البيانات، ونضع له الاسم البرمجي BtnDelete، ويكون الإجراء الخاص به كالتالي: Private Sub BtnDelete_Click() UserForm.txtName.Value = "" UserForm.OptMale = False UserForm.OptFemale = False UserForm.JobStatus.Value = "" UserForm.PhoneNumber.Value = "" UserForm.Rate.Value = "" UserForm.Salary.Value = "" End Sub تعامل واجهات الإدخال مع الأحداث يمكننا توظيف الأحداث في التعامل مع واجهاتنا لتطوير عمل البرنامج، حيث يمكن التعامل مع الواجهة في الحدث كما تُعامل الدوال والتعليمات في الأحداث كما تعلمنا في درس صناعة الدوال الخاصة والتعامل مع الأحداث في مايكروسوفت إكسل VBA، ولا بد من تطبيق ذلك عمليًا لتوضيح الفكرة أكثر. مثال باستخدام الواجهة السابقة نريد تنفيذ إجراء يعمل على إظهار نافذة إدخال البيانات فقط وإخفاء برنامج الإكسل عند فتح الملف، ولإنجاز ذلك نفتح المحرر الخاص بملف العمل، ونختار من أحداثه الحدث الذي يُنفِّذ الأوامر عند فتح الملف، ونضع فيه التعليمات التالية: Private Sub Workbook_Open() Application.Visible = False UserForm.Show End Sub حيث يُخفي الأمر Application.Visible = False ملف الإكسل، ويُظهر الأمر UserForm.Show واجهة الإدخال عند فتح الملف، ويُشغلها. نلاحظ أن الإجراء السابق يؤدي المطلوب، ولكن لدينا هنا خلل بسيط، وهو عند إغلاق واجهة الإدخال، حيث يبقى برنامج الإكسل مفتوحًا ويعمل في الخلفية، ولكنه مخفي. لذا يجب أن نُجهّز حدثًا جديدًا يعمل على حفظ البيانات وإغلاق ملف الإكسل عند إغلاق واجهة إدخال البيانات السابقة، أي أن الحدث خاص بواجهة الإدخال، لذا نكتب التالي: Private Sub UserForm_Terminate() ActiveWorkbook.Save Application.Quit End Sub حيث إن: UserForm_Terminate: هو حدث يُنفّذ عند إغلاق الواجهة. ActiveWorkbook.Save: هو أمر يحفظ ملفات العمل النشطة، وبما أن ملف العمل مرتبط مُسبقًا بالواجهة، فإن الأمر سيُنفذ عليه حتى لو وجدت العديد من ملفات العمل مفتوحةً، لأنه بمجرد النقر ضمن الواجهة يصبح الملف المرتبط بها هو الملف النشط. Application.Quit: أمر إغلاق ملف العمل. لكن يجب الانتباه أنه بمجرد تشغيل هذا الإجراء، فلن نستطيع عرض البيانات من صفحة الإكسل، لذا يجب إضافة إجراء يعمل على فتح البيانات في صفحة الإكسل، ويُنفذ عن طريق زر في الواجهة نفسها. نضيف زرًا جديدًا يُنفذ الإجراء السابق، ونسميه عرض البيانات، ونسميه اسمًا برمجيًا مثل BtnShowData، ونكتب الإجراء المناسب لهذه العملية كالتالي: Private Sub BtnShowData_Click() Application.Visible = True Sheets("الموظفون").Activate UserForm.Hide End Sub خاتمة إن تصميم وبرمجة الواجهات من أجمل المزايا في برمجة الإكسل، حيث يزيد العمل عن طريق الواجهات من دقة البيانات المُدخلة، كما يقلل التعامل مع البيانات -عن طريق واجهات تفاعلية- من عمليات التشتت، وكلما تعمقنا أكثر في تطوير برمجياتنا على إكسل، زاد إنتاجنا وكفاءتنا في تقديم البيانات الدقيقة بالسرعة المطلوبة، لأن برمجة الواجهات تضيف شروطًا كثيرةً على العمل، مما يجعل المستخدم أقل عرضةً للوقوع في أخطاء إدخال البيانات بالطريقة التقليدية. اقرأ أيضًا استخدام أدوات مايكروسوفت إكسل لتنسيق الخلايا عن طريق الشيفرات VBA استخدام الشيفرات لتنفيذ العمليات الأساسية في مايكروسوفت إكسل VBA التفاعل مع المستخدم في مايكروسوفت إكسل باستخدام VBA الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل
  3. لا شك أننا نتعامل مع الكثير من الدوال في برنامج مايكروسوفت إكسل، فهنالك المئات من الدوال التي تُبسّط علينا العمل دائمًا، ولكن توجد بعض العمليات التي تحتاج إلى بعض الاحتيال عليها للوصول إلى حل المسائل التي تعترضنا، وربما نستخدم خلالها العديد من الدوال المتداخلة مع بعضها البعض لحل المسألة، وباستخدام برمجة المايكروسوفت إكسل عن طريق الفيجوال بيسك يمكننا صناعة دوال خاصة بعملنا، والتي تخدم الوصول لحل المشاكل التي نتعامل معها دومًا بأقصر الطرق. تعرفنا سابقًا على آلية كتابة الإجراءات باستخدام فيجوال بيسك في درس مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل، ووجدنا أن الإجراء من النوع sub-routine يُنفذ أمرًا أو مجموعةً معينةً من الأوامر، وأن الإجراء من النوع Function يُضيف دوال على برنامج مايكروسوفت إكسل للاستخدام الاعتيادي كما لو أنها من ضمن دوال البرنامج الأساسية. صناعة الدوال توجد طريقتان لكتابة الإجراء هما: إجراء مع وسطاء (معطيات) وتكون الشيفرة كما يلي: Function name(arguments) as type Code End Function حيث إن: name: اسم للدالة التي نصنعها، ويُفضل أن يكون الاسم مُعبرًا عن عمل الدالة. arguments: الوسطاء التي ستعمل الدالة مع محتوياتها. type: نوع المُخرَج للدالة التي نصنعها. Code: مجموعة الشيفرات التي ستُنفذها الدالة. مثال لدينا البيانات التالية، ونريد صناعة دالة خاصة تعمل على دمج الاسم الأول مع الأخير للحصول على الاسم الكامل. لدينا وسيطان هنا، هما: الاسم الأول والاسم الأخير من النوع النصي، لذا نكتب الإجراء بالشكل التالي: Function FullName(FirstName As String, LastName As String) As String FullName = FirstName & " " & LastName End Function عند العودة إلى برنامج مايكروسوفت إكسل سنجد أن الدالة أُضيفت إلى الدوال الأساسية فيه، وتعمل مثل باقي الدوال الاعتيادية. مثال لدينا البيانات التالية، ونريد صناعة دالة خاصة تحسب الراتب بعد الزيادة، وذلك وفقًا لتقييم كل موظف. حيث يتقاضى الموظف زيادةً قدرها 0.2 عندما يكون تقييمه أكثر من 7، وزيادةً قدرها 0.1 عندما يكون تقييمه أكثر من 5 وأقل من 7، وزيادةً أخرى قدرها 0.08 عندما يكون أكثر من 1، وزيادةً قدرها 0.04 إذا لم نُسند خانة التقييم للدالة، وعليه يكون الإجراء كالتالي: Function NewSalary(Salary As Currency, Optional Rate As Integer) As Currency If Rate = 0 Then NewSalary = Salary + (Salary * 0.04) ElseIf Rate >= 7 Then NewSalary = Salary + (Salary * 0.2) ElseIf Rate >= 5 Then NewSalary = Salary + (Salary * 0.1) ElseIf Rate >= 1 Then NewSalary = Salary + (Salary * 0.08) End If End Function بتنفيذ الدالة على البيانات السابقة نجد التالي: إجراء بدون وسطاء (معطيات) وتكتب الشيفرة كما يلي: Function name() as type Code End Function حيث إن: name: اسم للدالة التي نصنعها، ويُفضل أن يكون الاسم مُعبرًا عن عمل الدالة. type: نوع المُخرَج للدالة التي نصنعها. Code: مجموعة الشيفرات التي ستُنفذها الدالة. مثال لنَعُد إلى المثال السابق، حيث نريد إضافة عمود يحتوي أرقامًا تعريفيةً عشوائيةً للموظف، لذلك نكتب الإجراء التالي: Function RandCode() As Long RandCode = Rnd() * 10000 End Function عند تنفيذ الدالة على البيانات السابقة فسنحصل على النتيجة التالية: التعامل مع الأحداث تعلمنا في المقالات السابقة كيفية كتابة إجراءات لتنفيذ مجموعة من الأوامر، وذلك بطريقتين: الأولى عندما نطلب منه تنفيذ الإجراء يدويًا، والثانية عن طريق إضافة أزرار تُنفذ الإجراء عند الضغط عليها، لكن في بعض الأحيان نحتاج أن تُنفَّذ هذه الإجراءات آليًا عند وقوع حدث معين، مثل فتح ملف، أو ظهور رسالة ترحيب عند فتح ملف إكسل، أو عند الطباعة، أو عند تعبئة خلية، وهذه الإجراءات تسمى أحداثًا، وهي موجودة في كل لغات البرمجة، ونستطيع برمجة برنامج الإكسل لتنفيذها عند وقوع الحدث. الصيغة العامة لكتابة الأحداث Sub Event_Name (variables) Our code End sub نجد أن الصيغة العامة للحدث هي نفسها للإجراء الروتيني، ولكن يجب تسميتها بأسماء محددة تدل على حدث معين، أي أن الاسم هنا ليس اختياريًا، بل يكون مُعرّفًا عن طريق لغة البرمجة، وتوجد بعض القوانين لكتابة الأحداث وهي: تُكتب الأحداث في محرر الفيجوال بيسك ضمن الأوراق أو ضمن الملف، وليس ضمن model؛ لأن الحدث هو خاص بورقة العمل أو الملف، وبالنقر مرتين على اسم الصفحة أو اسم الملف يفتح المحرر الخاص بالصفحة أو الملف. الحدث خاص، فلا يمكن جعله ضمن المحرر عامًا، ولتنفيذ ذلك توجد قائمة منسدلة تعمل على تبديل الإجراء من عام إلى إجراء خاص بالصفحة أو الملف. اسم الحدث هو اسم معين ليس اختياريًا، أي أن محرر الشيفرات هو من يزودنا به ولا يمكن إنشاؤه، ونُحدد الحدث الذي نريده من القائمة المنسدلة في الزاوية اليمنى من واجهة المحرر. سنتعرف على بعض الأمثلة التي تشرح آلية عمل الأحداث. مثال 1 نريد إنشاء حدث يُظهر رسالة ترحيب عند فتح صفحة معينة، لذا فأول ما نفعله البحث عن الحدث الذي يُنفذ عند فتح الصفحة، وهو مُعرّف بالاسم SheetActivate، وهذا الحدث يعمل على مستوى الملف، ويكون الإجراء كالتالي: Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name = "Sheet2" Then MsgBox "hello" End If End Sub حيث إن المتغير sh هو متغير مُعرف في الحدث، يُعبر عن الصفحات كمتغيرات. مثال 2 نريد إظهار نفس الرسالة السابقة عند فتح ملف الإكسل. Workbook_Open: هو الحدث الذي يُنفّذ عند فتح ملف الإكسل، ولذلك نكتب الإجراء التالي: Private Sub Workbook_Open() MsgBox "welcome back" End Sub مثال 3 نريد كتابة إجراء يُضيف الصفحات الجديدة في نهاية صف الصفحات، ولتنفيذ ذلك علينا تقسيم المراحل لعمل الإجراء ومعرفة الأوامر الضرورية لفعل ذلك: Workbook_NewSheet: هو الحدث الذي يُنفذ عند إضافة صفحة عمل جديدة. يجب في البداية أن نعرف عدد الصفحات في الملف، لذا لنُعرّف المتغير sheet_count، ونُخزن فيه قيمة الأمر الذي يحصي عدد الصفحات، وهو الأمر sheet.count. نكتب الأمر المسؤول عن تحريك الصفحة الجديدة لآخر الصف، وهو الأمر التالي: object.move after:=sheets("عدد الصفات في الملف") حيث يُعبّر object هنا عن الصفحة الجديدة، ويُصبح الإجراء كالتالي: Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim sheet_count As Integer sheet_count = Sheet.Count Sh.Move after:=Sheets("sheet_count") End Sub مثال 4 نريد تنفيذ إجراء عند الانتقال من خلية إلى أخرى يتغير لون عمود وسطر تقاطع الخلية، لذا نكتب الإجراء كما يلي: في البداية نريد دالةً تحذف الألوان السابقة عن طريق التعليمة التالية: Cells.Interior.ColorIndex = xlNone حيث تعني القيمة xlNone جعل الخلية بلا لون، وهذه التعليمة تُلغي اللون لكل خلايا الصفحة. الآن نكتب التعليمة الخاصة بجعل خلايا السطر كاملًا تأخذ لونًا موحدًا كالتالي: EntireRow.Interior.Color = RGB(14, 148, 148) ونفس الحالة بالنسبة لإعطاء خلايا العمود لونًا واحدًا، ولكن نُسبق التعليمتين بالأمر Target الذي يُعبر هنا عن مجال الصفحة، ومن هنا يصبح الإجراء بالشكل التالي: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cells.Interior.ColorIndex = xlNone Target.EntireRow.Interior.Color = RGB(14, 148, 148) Target.EntireColumn.Interior.Color = RGB(14, 148, 148) End Sub أهم الأحداث المرتبطة بملف العمل الأحداث المرتبطة بملف العمل كثيرة، ولكن سنذكر أهمها فيما يلي: Workbook_BeforeSave: الحدث قبل إتمام حفظ الملف. Workbook_BeforePrint: الحدث قبل البدء بالطباعة. Workbook_AfterSave: الحدث بعد إتمام حفظ الملف. Workbook_SheetActivate: الحدث عند تنشيط (فتح) الصفحة (ورقة عمل معينة). Workbook_NewSheet: الحدث عند إضافة ورقة عمل جديدة. Workbook_SheetChange: الحدث عند تعديل ورقة عمل. Workbook_BeforeClose: الحدث قبل إغلاق ملف الإكسل. Workbook_Open: الحدث عند فتح ملف الإكسل. أهم الأحداث المرتبطة بورقة العمل Worksheet_Activate: الحدث عند تنشيط الصفحة. Worksheet_BeforeDelete: الحدث قبل تنفيذ حذف الصفحة. Worksheet_Change: الحدث عند إجراء تغييرات على الصفحة. Worksheet_Deactivate: الحدث عند إلغاء تنشيط الصفحة (الانتقال إلى صفحة أخرى). خاتمة لا تقل الأحداث أهميةً عن الإجراءات التي تعلمناها سابقًا، فلكلٍ منها عملٌ مخصص ضمن الشيفرات، كما تساعد كثيرًا في صناعة البرمجيات بصورة أفضل ومضبوطة أكثر في نفس الوقت، وتوجد الكثير من الأحداث الأخرى التي سنتطرق إليها، والتي سنشرح آلية عملها وقت الحاجة إليها أثناء العمل. اقرأ أيضًا المقال السابق: استخدام أدوات مايكروسوفت إكسل لتنسيق الخلايا عن طريق الشيفرات VBA استخدام الشيفرات لتنفيذ العمليات الأساسية في مايكروسوفت إكسل VBA التفاعل مع المستخدم في مايكروسوفت إكسل باستخدام VBA الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل
  4. تعلمنا في مقال استخدام الشيفرات لتنفيذ العمليات الأساسية في مايكروسوفت إكسل VBA كيفية تنفيذ إجراءات عمل بعض الأدوات عن طريق الشيفرات البرمجية، وسنكمل في هذا المقال شرح عمل الأدوات التالية عن طريق الشيفرات البرمجية: تنسيق الخلايا. تنسيق الخطوط. إضافة حدود للخلايا. مسح محتويات الخلايا. إضافة خلايا أو صفوف أو أعمدة. تغيير حجم خط الخلية نستخدم لتغيير حجم خط الخلية التعليمة التالية: expression.Font.Size = "قيمة حجم الخط الذي نريده" حيث تعبّر expression عن الكائن الذي سنتعامل معه، وفي الغالب يكون من النوع Range بدون ذكر اسم الملف والصفحة اللذين يحويان هذا النطاق، إلا إذا كان تنفيذ الشيفرة في غير الصفحة النشطة أو في غير الملف النشط، أي أنها تصبح بالشكل التالي: Range("عنوان الخلية").Font.Size = "قيمة حجم الخط الذي نريده" والقيمة الافتراضية لحجم الخط هي 11. جعل خط الخلية عريضا نستخدم لذلك التعليمة التالية: Range("عنوان الخلية").Font.Bold = True or False حيث إن القيمة True للخط العريض، والقيمة False للخط العادي، وهي القيمة الافتراضية. تغيير لون خط الخلية ويمكن تنفيذ ذلك بعدة طرق، وهي: عن طريق الاسم الصريح للون، والتعليمة كالتالي: Range("عنوان الخلية").Font.Color = vbColor حيث إن القيمة الافتراضية للون الخط هي vbBlack. عن طريق رقم الفهرس للون، والتعليمة كالتالي: Range("عنوان الخلية").Font. ColorIndex = "الرقم المرجعي للون" حيث تكون القيمة الرقمية للون بين الرقم 1 والرقم 56 وفق المرفق بالصورة التالية، والقيمة الافتراضية للون الخط هي 1. عن طريق نظام الـ RGB للألوان: الفكرة الأساسية من نظام RGB هي القدرة على إعادة إنتاج أي لون آخر بناءً على نسب تداخل ثلاثة ألوان أساسية: الأحمر R والأخضر G والأزرق B، حيث إن وجود هذه الألوان معًا بقيمتها الكاملة 255 ينتج اللون الأبيض، بينما غياب قيمتها لتصل إلى 0 ينتج اللون الأسود. هذا النوع من أنظمة الألوان ضوئي بالكامل، لذا فهو مثالي للشاشات وأجهزة العرض المختلفة، ونتلاعب بقيم كل من الألوان الأساسية للحصول على أي لون آخر قد نريده، وفي العادة تتراوح شدة كل لون ضمن مجال من 0 حتى 255. ويُعَد نظام ألوان RGB نظام إضافة، حيث تعني كل قيمة مضافة لأحد الألوان المزيد من الضوء، أي أن الألوان ذات القيم الكبرى (في كل من R وG وB) أفتح، بينما تلك التي تمتلك قيمًا دُنيا أقتم. والتعليمة التي تحدد لون الخط هي كالتالي: Range("عنوان الخلية").Font. Color = RGB(0,0,0) تغيير لون الخلية وذلك عن طريق التعليمة: Range("عنوان الخلية").Cells.Interior.ColorIndex = "الرقم المرجعي للون" محاذاة النصوص كما نعلم لدينا نوعان من المحاذاة للنصوص، وهما: المحاذاة الأفقية، والمحاذاة العمودية. المحاذاة الأفقية تحدد موضع النص من الخلية أفقيًّا، والتعليمة الخاصة بها هي: Sub alignment_H() expression.HorizontalAlignment = type End Sub حيث تأخذ type إحدى القيم التالية: xlHAlignLeft محاذاة النص يسار الخلية. xlHAlignRight محاذاة النص يمين الخلية. xlHAlignCenter محاذاة النص منتصف الخلية. المحاذاة العمودية تحدد موضع النص من الخلية أفقيًّا، والتعليمة الخاصة بها هي: Sub alignment_V() expression. VerticalAlignment= type End Sub حيث تأخذ type إحدى القيم التالية: xlVAlignTop محاذاة النص أعلى الخلية. xlVAlignBottom محاذاة النص أسفل الخلية. xlVAlignCenter محاذاة النص منتصف الخلية. تفعيل الخلية أو الصفحة لجعل الخلية أو الصفحة نشطةً (مُفعَّلةً) نستخدم التعليمة التالية: Sub active() expression. Activate End Sub تغيير عرض الخلية نستخدم لذلك التعليمة التالية: Range("عنوان الخلية").ColumnWidth = "قيمة عرض الخلية الذي نريده " حيث إن القيمة الافتراضية لعرض الخلية هي 8.43. مثال نريد إنشاء الخلية A2 التي تحوي القيمة 5000، والخلية B1 التي تحوي القيمة 48، ونريد جعل الخط عريضًا حجمه 20، ولونه أبيض، ولون خلفية الخلية أخضر داكنًا، وجعل المحتوى يتوسط الخلايا، ولذلك نكتب الإجراء التالي: Sub example() Range("A2") = "5000" Range("B2") = "48" Range("A2:B2").Font.Bold = True Range("A2:B2").Font.Size = 20 Range("A2:B2").Font.Color = RGB(255, 255, 255) Range("A2:B2").Cells.Interior.ColorIndex = 10 Range("A2:B2").HorizontalAlignment = xlHAlignCenter End Sub إضافة حدود للخلية نستخدم لذلك التعليمة التالية: Range("عنوان الخلية").Borders(direction).LineStyle = type حيث إن: direction: نُحدد عن طريقها مكان الحدود للخلية، حيث تأخذ القيم التالية: XlDiagonalDown لوضع خط يقطع الخلية إلى مثلثين يبدأ من الزاوية اليسرى للخلية. XlDiagonalUp لوضع خط يقطع الخلية إلى مثلثين يبدأ من الزاوية اليمنى للخلية. XlEdgeBottom لوضع خط للخلية من الأسفل. XlEdgeLeft لوضع خط للخلية من اليسار. XlEdgeRigh لوضع خط للخلية من اليمين. XlEdgeTop لوضع خط للخلية من الأعلى. XlInsideHorizonta لوضع خطوط أفقية للخلايا، لكن يجب أن يحوي المجال عدة أعمدة، وتكون الخطوط للخلايا بين بداية المجال ونهايته. XlInsideVertical لوضع خطوط عمودية للخلايا، لكن يجب أن يحوي المجال عدة أعمدة، وتكون الخطوط للخلايا بين بداية المجال ونهايته. LineStyle: تحدد شكل الخط الذي سنضعه للخلية، ويأخذ القيم التالية: XlContinuous الخط الاعتيادي (خط متصل). Xldash الخط عبارة عن مجموعة شَرْطَات (متقطع) بالشكل التالي ------- XlDashDot الخط عبارة عن مجموعة متتابعة بالشكل، شَرْطَة تليها نقطة. XlDashDotDot الخط عبارة عن مجموعة متتابعة بالشكل، شَرْطَة تليها نقطتان. XlDot الخط منقط بالشكل التالي …….. XlDouble الخط عبارة عن خطين عاديين فوق بعضهما. XlLineStyleNone لإلغاء تنسيق الحدود الموجودة بالخلية. XlSlantDashDot الخط عبارة عن مجموعة متتابعة بالشكل، شَرْطَة مقطوعة بشكل مائل تليها نقطة. ولإضافة حدود من كافة الاتجاهات للخلية، نكتب الصيغة السابقة كالتالي: Range("عنوان الخلية").Borders.LineStyle = type تغيير ثخانة حدود الخلية نستخدم لذلك التعليمة التالية: Range("عنوان الخلية").Borders.value = "قيمة ثخانة الحدود للخلية" حذف محتويات الخلايا يمكن حذف محتويات الخلايا بعدة طرق، ومنها استخدام الأمر Delete والأمر Clear والأمر ClearContents والأمر ClearFormats، ولكلٍ منها عمل مخصص. الأمر Delete يُستخدم لحذف الخلايا مع مكانها ضمن البيانات، ويؤدي استعمال هذا الأمر إلى إزاحة الخلايا المتبقية باتجاه مكان الخلايا المحذوفة، والشكل العام لصيغة الأمر هو: Sub Delete() Rang("الخلايا أو النطاق الذي نريد حذفه").Delete (Shift) End Sub حيث إن shift وسيط اختياري يُحدد مكان إزاحة الخلايا، ويأخذ القيم التالية: xlShiftToLeft إزاحة الخلايا المتبقية لموضع الخلايا المحذوفة من اليسار، وهي القيمة الافتراضية. xlShiftUp إزاحة الخلايا المتبقية لموضع الخلايا المحذوفة من الأسفل. مثال بالعودة إلى المثال السابق نريد حذف الخانات من A1:A3، وذلك باستخدام الطرق السابقة، ولذلك نكتب التعليمات التالية: Sub Delete() Range("A1:A3").Delete End Sub الأمر Clear يُستخدم لحذف بيانات الخلية وتنسيقاتها مع الحفاظ على موضع البيانات، والشكل العام لصيغة الأمر: Sub Clear() Range("الخلايا أو النطاق الذي نريد حذفه").Clear End Sub مثال لنجرب نفس المثال السابق، فنكتب الإجراء كالتالي: Sub Clear() Range("A1:A3").Clear End Sub الأمر ClearContents يُستخدم لحذف البيانات، ولكن هذا الأمر يُحافظ على موضع وتنسيق الخلية، والشكل العام لصيغة الأمر هو: Sub Clear_Contents () Range("الخلايا أو النطاق الذي نريد حذفه"). ClearContents End Sub مثال نُطبِّق الأمر على مثالنا السابق، فنكتب الإجراء التالي: Sub Clear_Contents () Range("A1:A3"). ClearContents End Sub الأمر ClearFormats يُستخدم لحذف تنسيق الخلية مع إبقاء المحتوى، والشكل العام لصيغة الأمر هو: Sub Clear_Contents () Range("الخلايا أو النطاق الذي نريد حذفه"). ClearFormats End Sub مثال نُطبِّق الأمر على مثالنا السابق، فنكتب الإجراء التالي: Sub Clear_Contents () Range("A1:A3"). ClearFormats End Sub إدراج خلايا أو أسطر أو أعمدة التعليمة المسؤولة عن الإدراج هي التعليمة Insert إدراج خلايا نُدرج خلايا جديدةً عن طريق الأمر التالي: Sub insert() expression. Insert (Shift) End Sub حيث يحدد الوسيط Shift اتجاه إدراج البيانات، ويأخذ القيم التالية: xlShiftDown تُدرج خلايا أسفل النطاق المحدد. xlShiftToRight تُدرج خلايا يمين النطاق المحدد. مثال نريد إدراج خلايا ضمن بياناتنا في الجدول التالي، بحيث تكون الخلايا المضافة للأعلى ضمن النطاق A1:B5: نكتب الإجراء التالي: Sub Insert() Range("A1:B5").Insert xlShiftDown End Sub إدراج أسطر أو أعمدة نُدرجها عن طريق الأمر التالي: Sub insert() expression. Insert End Sub مثال نريد إدراج 3 صفوف ضمن بياناتنا في جدول البيانات السابق، ولذلك نكتب الإجراء التالي: Sub Insert() Range("2:5").Insert End Sub نلاحظ أنه أُضيفت 3 أسطر ابتداءً من السطر رقم 2، وأن بقية البيانات أُزيحت للأسفل. ولإضافة أعمدة سنتبع نفس الأسلوب، ولكن المجال يتضمن أعمدةً فقط، وبفرض أننا نريد إضافة عمود واحد يكون الإجراء كالتالي: Sub Insert() Range("A:A").Insert End Sub هنا تُزاح البيانات نحو اليسار في النسخة الإنجليزية، وإلى اليمين في النسخة العربية. خاتمة توجد العديد من التعليمات الجزئية التي تُشكل اللَّبنة الأساسية لبناء التطبيقات، لذا يتوجب علينا فهم آلية عمل التطبيق، وتقسيمه لأجزاء ومهام صغيرة، ثم البحث عن التعليمات التي تنفذ هذه المهام، حيث تطرقنا لأهمها، وسنستوفي شرح ما يصادفنا من أوامر خلال المقالات القادمة أثناء صناعة البرمجيات الصغيرة. اقرأ أيضًا التفاعل مع المستخدم في مايكروسوفت إكسل باستخدام VBA الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل
×
×
  • أضف...