المحتوى عن 'مايكروسوفت'.



مزيد من الخيارات

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

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

نوع المُحتوى


التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز
  • الترجمة بمساعدة الحاسوب
    • omegaT
    • memoQ
    • Trados
    • Memsource
  • أساسيات استعمال الحاسوب
  • مقالات عامة

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

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

التصنيفات

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

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

  1. يمكننا تنفيذ الأوامر التي تنفذها الأدوات على برنامج إكسل باستخدام الشيفرات البرمجية، مثل إضافة صفحات وتنسيق الخطوط والخلايا والعديد من العمليات، وفيما يلي أهم الأوامر التي نستخدمها في إنشاء التطبيقات: إضافة صفحة عمل جديدة. تحديد الخلايا. عمليتا النسخ واللصق. إلغاء تحديد الخلايا المنسوخة. عمليتا القص واللصق. إسناد قيمة إلى خلية معينة. إضافة صفحة عمل جديدة نُضيف صفحات جديدةً عن طريق التعليمة التالية: Sub add_sheet () Worksheets.add End Sub تُضاف الصفحة بالاسم الافتراضي بهذه الطريقة، وذلك حسب الترقيم الافتراضي (… ,sheet1, sheet2, sheet3)؛ أما إذا أردنا وضع اسم معين للصفحة، فيمكننا ذلك عن طريق التعليمة التالية: Sub add_sheet() Worksheets.add.name = name End Sub حيث تُعبر name عن اسم اختياري للصفحة. تحديد الخلايا يمكننا تحديد خلية أو مجموعة من الخلايا عن طريق التعليمة التالية: Sub selection() Range("عنوان الخلية").Select End Sub عمليتا النسخ واللصق لدينا عدة حالات يمكن استخدامها لنسخ ولصق الخلايا: النسخ واللصق مباشرة تختلف الآلية هنا باختلاف مكان لصق البيانات المنسوخة، ولدينا عدة أشكال: اللصق في نفس الصفحة. اللصق في صفحة أخرى. اللصق في ملف آخر. اللصق في نفس الصفحة الأوامر المسؤولة عن العمليتين هي: Sub Range_Copy_paste() Range("الخلية التي نريد نسخها").Copy Range("الخلية التي سنلصق فيها المحتوى المنسوخ") Range("المجال الذي نريد نسخه").Copy Range("المجال الذي سنلصق فيه المحتوى المنسوخ") Range("المجال الذي نريد نسخه").Copy Range("بداية مجال اللصق للمحتوى المنسوخ") End Sub نلاحظ وجود فراغ يفصل بين التعليمة Range(" ").Copy والتعليمة الخاصة باللصق، ويجب أن تكونا في نفس السطر البرمجي. مثال لدينا البيانات التالية، ونريد نسخ الخلايا إلى أماكن مختلفة في نفس الصفحة، لذا نكتب الإجراء التالي: Sub Range_Copy_paste() Range("A1").Copy Range("C1") Range("A1:A3").Copy Range("D1:D3") Range("A1:A3").Copy Range("D1") End Sub نلاحظ أن اللصق يحصل بكامل ما تحتويه الخلية من تنسيقات ومعادلات وبيانات. اللصق في صفحة أخرى لاستعمال هذه الطريقة للنسخ من صفحة واللصق في صفحة أخرى تكون التعليمات كما يلي: Sub Range_Copy_paste_in_other_sheet() Worksheets("الصفحة التي سننسخ منها البيانات").Range("الخلية التي نريد نسخها").Copy Worksheets("الصفحة التي سننسخ البيانات إليها").Range("الخلية التي سنلصق فيها المحتوى المنسوخ") End Sub اللصق في ملف آخر نتعامل مع النسخ من ملف إكسل إلى آخر بنفس الأسلوب، وتكون التعليمات كالتالي: Sub Range_Copy_paste_in_other_workbook() Workbooks("اسم الملف الذي سننسخ منه البيانات.xlsx")_ .Worksheets("الصفحة التي سننسخ منها البيانات").Range("الخلية التي نريد نسخها").Copy_ Workbooks("اسم الملف الذي سننسخ إليه البيانات.xlsx")_ .Worksheets("الصفحة التي سننسخ البيانات إليها").Range("الخلية التي سنلصق فيها المحتوى المنسوخ") End Sub مثال لدينا البيانات التالية، ونريد نسخها مرةً إلى صفحة أخرى ومرةً إلى ملف آخر، لذا نكتب الإجراء التالي: Sub Range_Copy_paste_in_other_sheet() Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1") Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _ Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1") End Sub النسخ واللصق عن طريق الإسناد يمكننا هنا جعل خلية تأخذ قيمة خلية أخرى عن طريق الإسناد، وتكون التعليمات كالتالي: Sub Paste_Values_Examples() Range("الخلية التي نريد النسخ إليها").Value = Range("الخلية التي نريد نسخها").Value Range("المجال الذي نريد نسخه").Value = Range("المجال الذي سنلصق فيه المحتوى المنسوخ").Value End Sub ونتعامل مع النسخ من صفحة إلى أخرى ومن ملف إلى آخر بنفس الأسلوب. مثال بالعودة إلى المثال السابق نريد نسخ البيانات في نفس الصفحة، ومرةً أخرى في صفحة ضمن نفس الملف، ومرةً ثالثةً في ملف آخر مستقل، لذا تكون لدينا التعليمات كالتالي: Sub Paste_Values_Examples() النسخ واللصق ضمن نفس الصفحة Range("C1").Value = Range("A1").Value Range("D1:D3").Value = Range("A1:A3").Value النسخ واللصق في صفحة أخرى Worksheets("Sheet2").Range("A1").Value = Worksheets("Sheet1").Range("A1").Value النسخ واللصق في ملف آخر Workbooks("file2.xlsm").Worksheets("Sheet1").Range("A1").Value _ =Workbooks("file1.xlsm").Worksheets("Sheet1").Range("A1").Value End Sub نلاحظ في هذه الطريقة أن اللصق يكون للقيمة فقط، ويتجاهل التنسيقات بشكل كامل. النسخ واللصق الخاص يمكننا نسخ البيانات واستعمال اللصق الخاص -كما في مايكروسوفت إكسل- باستعمال التعليمات التالية: عند النسخ واللصق في نفس الصفحة Sub PasteSpecial_Examples() Range("الخلية التي نريد نسخها").Copy Range("الخلية التي نريد لصق المحتوى فيها").PasteSpecial Paste: = type_of_paste End Sub عند النسخ واللصق في صفحة أخرى Sub PasteSpecial_Examples() Worksheets("اسم الصفحة التي تنسخ منها البيانات").Range("المجال الذي نريد نسخه").Copy Worksheets("اسم الصفحة التي سنلصق فيها البيانات").Range("المجال الذي سنلصق فيه البيانات").PasteSpecial Paste: = type_of_paste End Sub عند النسخ واللصق في ملف آخر Sub PasteSpecial_Examples() Workbooks("اسم الملف الذي ننسخ منه البيانات.xlsx").Worksheets("اسم الصفحة").Range("المجال الذي نريد نسخه").Copy Workbooks("اسم الملف الذي سننسخ إليه البيانات.xlsx")_ .Worksheets("الصفحة التي سننسخ البيانات إليها").Range("الخلية التي سنلصق فيها المحتوى المنسوخ")_ .PasteSpecial Paste: = type_of_paste End Sub حيث تُعبر type_of_paste عن نوع اللصق الخاص الذي نريده، وفيما يلي أهم أشكاله: xlPasteAll لصق الخلايا مع التنسيقات. xlPasteAllExceptBorders لصق الخلايا مع التنسيقات عدا حدود الخلية. xlPasteColumnWidths لصق عرض العمود المنسوخ. xlPasteComments لصق التعليقات. xlPasteFormats لصق التنسيقات فقط. xlPasteFormulas لصق المعادلات أو الدوال المستخدمة في خلايا المصدر. xlPasteFormulasAndNumberFormats لصق المعادلات أو الدوال المستخدمة في خلايا المصدر بالإضافة لتنسيقات الأرقام. xlPasteValidation لصق عمليات التحقق من صحة البيانات. xlPasteValues لصق المحتوى فقط بدون أية تنسيقات أو معادلات. مثال لنَعُد إلى المثال السابق وننسخ الخلية A1، ثم نُلصق البيانات بشكل خاص في خلايا العمود D باستعمال بعض الأنواع السابقة من اللصق الخاص، لذا نكتب التعليمات التالية: Sub PasteSpecial_Examples() Range("A1").Copy Range("D1").PasteSpecial Paste:=xlPasteAll Range("D3").PasteSpecial Paste:=xlPasteAllExceptBorders Range("D5").PasteSpecial Paste:=xlPasteFormats Range("D7").PasteSpecial Paste:=xlPasteValues End Sub نعيد كتابة الإجراء الخاص بالمثال السابق بدون التعليمة Paste:= لنجده يعمل دون أية أخطاء: Sub PasteSpecial_Examples() Range("A1").Copy Range("D1").PasteSpecial xlPasteAll Range("D3").PasteSpecial xlPasteAllExceptBorders Range("D5").PasteSpecial xlPasteFormats Range("D7").PasteSpecial xlPasteValues End Sub إلغاء تحديد الخلايا المنسوخة كما وجدنا في المثال السابق، بقي التحديد يحيط بالخلية المنسوخة مسبقًا بعد الانتهاء من عمليتي النسخ واللصق، ولإلغاء التحديد نضيف التعليمة التالية إلى الشيفرة: Sub PasteSpecial_Examples() Application.CutCopyMode = False End Sub تأخذ التعليمة إما القيمة True التي تُبقي التحديد وهي القيمة الافتراضية، أو القيمة False التي تُلغيه. عمليتا القص واللصق يمكننا إجراء عملية القص بنفس الطريقة المباشرة لعملية النسخ، كما يلي: Sub Range_Copy_paste() Range("الخلية التي نريد نسخها").Cut Range("الخلية التي سنلصق فيها المحتوى المنسوخ") Range("المجال الذي نريد نسخه").Cut Range("المجال الذي سنلصق فيه المحتوى المنسوخ") Range("المجال الذي نريد نسخه").Cut Range("بداية مجال اللصق للمحتوى المنسوخ") End Sub ويمكن تنفيذ اللصق في صفحة أخرى، أو في ملف آخر مثل عملية النسخ. مثال لنَعُد إلى المثال السابق حيث نريد قص 7 خلايا من العمود A ولصقها في عمود آخر، ثم قصها مرةً أخرى ولصقها في الصفحة الثانية، كما نريد قص 7 خانات من العمود B ولصقها في الملف الثاني، لذا تكون التعليمات كالتالي: Sub Paste_Values_Examples() Range("A1:A7").Cut Range("D1") Worksheets("Sheet1").Range("D1:D7").Cut Worksheets("Sheet2") _ .Range("A1") Workbooks("file1.xlsm").Worksheets("Sheet1").Range("B1:B7").Cut _ Workbooks("file2.xlsm").Worksheets("Sheet1").Range("A1") End Sub إسناد قيمة إلى خلية معينة نستطيع إسناد قيمة إلى خلية؛ إما بإسناد قيمة مباشرة، أو بإسناد قيمة مساوية لقيمة خلية أخرى، كالتالي: إسناد قيمة مباشرة عن طريق التعليمة التالية: Range("عنوان الخلية") = "القيمة التي نريد إسنادها" إسناد قيمة مساوية لقيمة خلية أخرى عن طريق التعليمة التالية: Range("عنوان الخلية") = Range("عنوان الخلية التي سنُسند قيمتها للخلية الأخرى").value مثال لنطبق التعليمتين السابقتين على بياناتنا، بحيث نُسند قيمة الخلية B5 إلى الخلية A3، ونسند القيمة أحمد في الخلية A10، لذا نكتب الإجراء التالي: Sub attribution() Range("A3") = Range("B5").Value Range("c10") = 61 End Sub خاتمة تُعَد هذه الأوامر -رغم صغر حجمها وأفعالها البسيطة- من الركائز الأساسية والمهمة في صناعة برمجيات الإكسل عن طريق الفيجوال بيسك، بغض النظر عن حجم البرنامج وعدد العمليات التي يؤديها بشكلٍ دائم، لذا لا بد لنا من فهم عملها بطريقة صحيحة، ومعرفة خصائصها وآلية تكوين أجزاء الشيفرات البرمجية عن طريقها. اقرأ أيضًا التفاعل مع المستخدم في مايكروسوفت إكسل باستخدام VBA الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل
  2. يساعدك برنامج OneNote 365 أونلاين على تنظيم وقتك بإنشاء دفتر ملاحظاتك وخططك ومتابعتها أولًا بأول بتقسيم ملاحظاتك إلى مقاطع وصفحات. يتميّز التطبيق الأونلاين بإمكانية إضافة ملاحظاتك وحفظها وتعديلها عبر الإنترنت دون الحاجة إلى تنزيل التطبيق على جهازك، كما يسمح لك بمشاركة ملفك مع مستخدمين آخرين للعمل على ذات الملف وبذات الوقت. يجب عليك في البداية تسجيل الدخول لحساب مايكروسوفت الخاص بك، وستجد عندها التطبيقات المتاحة ضمن مايكروسوفت 365، اختر تطبيق OneNote. عن البرنامج عند فتحك للملف للمرة الأولى، فستظهر لك شاشات تعريفية عن التطبيق، والتي يمكنك الاستمرار بتصفحها أو تخطيها والانتقال مباشرةً إلى التطبيق. تشمل الشاشات التعريفية الآتي: يعرّفك أن تطبيق OneNote يساعدك على البقاء منظّمًا. يطلب منك انتقاء نوع دفتر الملاحظات، حيث توجد ثلاثة خيارات (شخصي وعمل ومدرسة). يطلب منك تحديد ما الذي تريد تعقبه باستمرار، مثل التسوّق والمهام اليومية وغيرها، وفي النهاية ينشئ لك دفتر الملاحظات. سننتقي في المقالة خلال هذه الخطوات استخدام OneNote استخدامًا شخصيًا، وسنختار دفترًا لتسجيل "قوائم المهام المطلوبة للتنفيذ". يمكنك انتقاء الخيارات المناسبة لك والتي تريد تسجيلها وتعقّبها. بعد الضغط على "إنشاء دفتر ملاحظات"، ستظهر لك الصفحة الرئيسية للتطبيق كالشكل الآتي: قائمة ملف للتعرف على القائمة، اضغط على قائمة ملف في بداية الشريط الرئيسي وستجد فيها الخيارات التالية: معلومات: تحتوي هذه الصفحة على خيار "فتح في تطبيق سطح المكتب"، وهو الخيار الذي يتيح لك فتح الملف على جهازك. عند اختيارك لهذا الخيار فسيطلب منك NoteOne 365 أونلاين أن تُغلِق الملف، ليفتح تطبيق NoteOne الموجود على جهازك. طباعة: تتيح لك هذه الخاصية إمكانية طباعة الملف. مشاركة: تتيح لك هذه الخاصية مشاركة الملف مع مستخدمين آخرين. يمكنك أيضًا مشاركة الملف مع مستخدمين آخرين بالضغط على أيقونة "مشاركة" المتاحة في الشريط الرئيسي. عند طلبك لمشاركة الملف، فسيظهر لك مربع حوار يطلب منك إضافة البريد الإلكتروني للمستخدم الذي تريد مشاركة الملف معه، ليصله بريد إلكتروني يُعلمه بمشاركة الملف معه، حيث يمكنك السماح لأي شخص على شبكة الإنترنت أن يحرّر الملف، كما يمكنك من ذات مربع الحوار نسخ رابط المشاركة وإرساله إلى المستخدمين الذين تود مشاركتهم الملف، وذلك بالضغط على "نسخ الرابط Copy link". 2. إدارة المهام ستلاحظ وجود مقطع باسم "قوائم المهام المطلوبة"، وتتفرع منها عدة صفحات مثل صفحة اليوم وصفحة الأسبوع القادم. يمكنك تحرير هذه الصفحات وإضافة مهامك داخلها. أضف ملاحظاتك في صفحة اليوم مثل الشكل التالي، كما يمكنك إضافة كل ملاحظة في مهمة منفصلة على حدة. العلامات يحتوي التطبيق على مجموعة من العلامات المميّزة للمهام مثل هام وسؤال وفكرة وكلمة مرور وتذكر للاستخدام لاحقًا، وغيرها من العلامات. اختر العلامة المناسبة لمهامك وأضفها. يمكنك إضافة العلامة بتحديد النص والضغط على العلامة التي تختارها، وستلاحظ إضافة العلامة بجانب المهمة، كما يمكنك إضافة أكثر من علامة لذات المهمة. الخط يمكنك تنسيق خط المهام باستخدام أدوات الخط المختلفة مثل نوع الخط وحجمه ولونه ولون تمييز الخط وجعله غامقًا وجعله مائلًا، وإضافة سطر تحت النص أو خلاله، وإضافة تنسيق نقطي أو رقمي، إلى جانب تغيير محاذاة النص، حيث يمكنك مثلًا اختيار نوع خط Calibri بحجم خط 14 ولون أزرق، وجعله غامقًا ومائلًا وإضافة خط تحت النص. الحافظة يمكنك استخدام عناصر الحافظة مثل القص أو النسخ أو اللصق لمهامك، كما يمكنك استخدام أيقونة نسخ التنسيق لتوفير الوقت والجهد في عملية التنسيق، و لنسخ التنسيق من هذه الخاصية؛ ستنسخ نفس خصائص الخط والتعبئة والحدود وتلصقها على عناصر أخرى بدلًا من إعادة التنسيق مرةً أخرى. أضف التنسيقات التي تراها مناسبةً لقائمة مهامك، ويمكنك تنسيقها مثل الشكل التالي أو شكل آخر تراه جميلًا ومناسبًا. دفتر ملاحظات يمكنك إدارة الصفحات والمقاطع من خلال دفتر الملاحظات، ويتكون الدفتر من مجموعة من المقاطع، حيث يحتوي المقطع مجموعةً من الصفحات، ويتيح لك التطبيق إضافة وحذف وتحرير المقاطع والصفحات بسهولة. ضع المؤشر على مقطع "قوائم المهام المطلوبة"، ثم اضغط على أيقونة "صفحة جديدة"، وستلاحظ إضافة صفحة جديدة بتاريخ اليوم. يمكنك أيضًا إضافة مقطع جديد بالضغط على أيقونة "مقطع جديد" في دفتر الملاحظات، حيث سيظهر لك مربع حوار يطلب منك إدخال اسم المقطع. بإمكانك إضافة صفحات جديدة داخل المقطع الجديد. يمكنك تحرير المقطع بالضغط بالمفتاح الأيمن للفأرة، ثم اختيار أحد الخيارات لتحرير المقطع مثل إعادة تسميته أو حذفه أو تغيير لونه المميِّز أو نسخ رابط مشاركته. كذلك يمكنك من نفس القائمة إجراء بعض التعديلات التي ذكرناها مسبقًا مثل إضافة صفحة جديدة للمقطع أو إضافة مقطع جديد. يمكنك كذلك تحرير الصفحة، بنسخها أو حذفها أو نقلها أو إنشاء صفحة جديدة. يمكن أيضًا إنشاء صفحة فرعية من صفحة اليوم بالضغط على "إنشاء صفحة فرعية"ـ، فـ "صفحة جديدة" في الشكل التالي مثلًا هي صفحة فرعية من صفحة اليوم. وإذا أردت إلغاء كونها صفحةً فرعيةً فاختر "ترقية الصفحة الفرعية". الجدول يوفّر التطبيق خاصية إدراج الجداول، حيث يمكنك ترتيب ملاحظاتك في جدول، وذلك ضمن تبويب إدراج. أدرج جدولًا بعدد الصفوف والأعمدة التي تراها مناسبة، ومن ثم أضف ملاحظاتك داخل الجدول. نسّق الجدول باستخدام أدوات تنسيق الخط التي ذكرناها مسبقًا للحصول على تنسيق مناسب لملاحظاتك. صور يتيح لك التطبيق إمكانية إدراج صورة من جهازك، أو التقاط صورة من الكاميرا، أو إدراج صورة عن طريق رابط إلكتروني من الإنترنت؛ كما يتيح لك إمكانية إدراج ملفات مختلفة مثل إدراج ملفات PDF أو غيرها. تتيح لك هذه الميزة القدرة على إضافة الصور إضافةً إلى العلامات التي أضفتها مسبقًا، مما يضفي على الملاحظات وضوحًا أكثر وسهولةً في التعامل مع الملف. يتيح لك التطبيق أيضًا إمكانية إضافة تسجيل صوتي بالضغط على أيقونة "الصوت"، حيث سيطلب منك التطبيق إضافة التسجيل الصوتي ويتيح لك إمكانية تشغيله أو إيقافه، وسيضيف التطبيق التسجيل الصوتي ضمن الملاحظات في الصفحة، حيث يمكن للمستخدمين الآخرين تشغيله وسماعه. يمكنك إضافة رموز المشاعر إلى مهماتك باستخدام أيقونة "رمز المشاعر". يمكنك تغيير طريقة عرض دفتر الملاحظات باستخدام تبويب "عرض"، كما يمكنك تغيير لون الصفحة وإظهار كُتّاب الملاحظات، إلى جانب إظهار إصدارات الصفحة المختلفة والملاحظات المحذوفة. يتيح لك التطبيق عرض الملاحظات بطريقة عرض القراءة، حيث سيعرض لك المحتوى وسيختفي شريط الأدوات؛ مما يتيح لك طباعتها أو مشاركتها. عند الضغط على "تحرير دفتر الملاحظات" فستعود إلى صفحة تحرير الدفتر والتي تحتوي على أشرطة الأدوات المختلفة التي ذكرناها مسبقًا. إذا كان يعمل على التطبيق مستخدم واحد أو أكثر من مستخدم، فيمكنك معرفة المستخدم الذي أضاف الملاحظات وذلك عن طريق خيار "إظهار كتّاب"، ويمكنك اختياره مباشرةً من تبويب "عرض" أو من خلال خيارات "عرض القراءة" عند مشاركة الملف مع مستخدمين آخرين، أو عندما يحرّر الملف من قِبَل أكثر من مستخدم، حيث سيتيح لك التطبيق معرفة المستخدم الذي حرّر المهمة في الملف. يتيح لك التطبيق إمكانية إظهار الإصدارات المختلفة للملف والعودة إليها وموازنتها، وذلك من خلال أيقونة "إصدارات الصفحة". يتيح لك التطبيق أيضًا إمكانية العودة إلى الملاحظات المحذوفة، وذلك من خلال أيقونة "الملاحظات المحذوفة". يمكنك إضافة رسومات مختلفة من خلال تبويب "رسم"، وذلك بتحديد القلم الذي ستستخدمه ولون الرسم. ويتيح لك التطبيق إلغاء خاصية الرسم بالعودة باختيار أيقونة "النوع"، كما يمكنك استخدام إصبعك أو قلم ذو رأس رفيع متوافق لرسم الملاحظات أو كتابتها بخط اليد عند استخدام على جهاز iPad مثلًا. لقد تعرفنا في هذه المقالة على تطبيق OneNote ومميزاته، كما تعرّفنا على التبويبات المختلفة، مثل "الشريط الرئيسي" و"رسم" و"عرض" و"تعليمات". يمكنك إنشاء دفتر ملاحظاتك ومراجعته والتعديل عليه ومشاركته مع مستخدمين آخرين، كما يمكنك إضافة مقاطع جديدة وصفحات ورسوم وجداول ورموز تعبيرية وتحريرها وتنسيقها. اقرأ أيضًا تعرّف على دفتر الملاحظات الافتراضي OneNote وكيفية تنظيم الملاحظات فيه كيفية إنشاء رسومات ومخططات على صفحات ملاحظات OneNote أداتان لتسهيل عملك على Microsoft OneNote كيفية استخدام الوسوم Tags لتصنيف المحتوى على OneNote
  3. يُعَد مايكروسوفت ون درايف One Drive أحد خدمات مايكروسوفت 365 أونلاين التي تتيح للمستخدم استضافة الملفات وإمكانية الوصول لها من خلال متصفح الويب أو تطبيق ون درايف، كما يمكن للمستخدم تخزين هذه الملفات على أقراص جهاز الحاسوب ثم مزامنتها على حساب ون درايف. تشبه هذه الخدمة خدمات جوجل درايف Google Drive وآي كلاود iCloud المستخدَمة للتخزين عبر الإنترنت، تتميز بدرجة عالية من الأمان والخصوصية؛ حيث أنها تتيح للمستخدم إمكانية إنشاء المستندات وتصميم العروض التقديمية وجداول البيانات والاحتفاظ بها عبر الإنترنت ومشاركتها مع مستخدمين آخرين. علينا أولًا تسجيل الدخول لحسابنا على مايكروسوفت، وسنجد عندها التطبيقات المتاحة ضمن مايكروسوفت 365، وهنا نختار تطبيق "ون درايف". واجهة ون درايف الرئيسية عند فتح التطبيق، ستظهر لنا الواجهة الرئيسية لتطبيق ون درايف والتي تحتوي على تصنيفات الملفات ومجموعة من الخيارات للتحكُّم في الملفات والمجلدات. سنلاحظ في الجهة اليمنى من الشاشة مجموعةً من التصنيفات للملفات، وهي: ملفاتي والحديثة والصور والمشتركة وسلة المحذوفات. يمكننا إخفاء القائمة أو إظهارها بالضغط على أيقونة الشرطات الثلاث في الزاوية العلوية من القائمة: 1. ملفاتي تحتوي على كل ملفات ومجلدات حسابنا على ون درايف. 2. الحديثة تحتوي على أحدث ملفات ومجلدات حسابنا على ون درايف، وتُظهر القائمة مجموعةً من البيانات للملفات، مثل تاريخ آخر فتح للملف وتاريخ آخر تعديل وحجم الملف. 3. الصور تحتوي على صور وألبومات حسابنا على ون درايف. يمكننا إنشاء ألبوم جديد بالضغط على "إنشاء ألبوم جديد"، ثم إضافة اسم الألبوم واختيار الصور التي نريد إضافتها للألبوم. 4. المشتركة تحتوي على الملفات والمجلدات التي شاركها مستخدمون آخرون معنا على حسابنا على ون درايف، أو التي شاركناها مع مستخدمين آخرين. 5. سلة المحذوفات تحتوي على الملفات والمجلدات التي حذفناها من حسابنا على ون درايف، ولكنها بقيت في سلة المحذوفات مؤقتًا ولم تُحذف نهائيًّا من حسابنا، وتُظهر لنا القائمة تاريخ حذف الملف. يمكننا حذف جميع الملفات نهائيًّا من حسابنا بالضغط على "إفراغ سلة المحذوفات"، أو استعادتها لمكانها الأصلي الذي حُذفت منه بالضغط على "استعادة جميع العناصر". خيارا جديد وتحميل يمكننا إنشاء ملفات أو مجلدات جديدة بالضغط على أيقونة "جديد"، حيث بإمكاننا إنشاء مجلد جديد أو مستند وورد أو مصنف إكسل أو عرض بوربوينت أو دفتر ملاحظات ون نوت، وغيرها من الخيارات. إذا كانت لدينا ملفات أو مجلدات على جهازنا المحلي ونريد رفعها إلى ون درايف وحفظها في التخزين السحابي، فسنضغط على أيقونة تحميل ثم اختيار الملفات أو المجلدات التي نريد تحميلها. خيارات الفرز والعرض يمكننا فرز الملفات تصاعديًّا أو تنازليًّا حسب اسم الملف أو تاريخ تعديله أو حجمه. كما يمكننا حفظ ترتيب الفرز. يمكننا تغيير طريقة عرض الملفات بعرضها مثل قائمة أو قائمة مضغوطة أو إطارات متجانبة أو صور كما يلي: 1. خيار القائمة يشمل هذا الخيار إظهار الملفات مثل قائمة تشمل اسم الملف وتاريخ تعديله ونوع مشاركة الملف وحجمه. 2. خيار القائمة المضغوطة يشبه الخيار السابق إلى حد كبير بما يحتويه من بيانات مع اختلاف عرض الملفات بصورة مضغوطة، أي بمساحة قائمة أقل مع عدم وجود فاصل بين الملفات بما يسمح عرض عدد أكبر من الملفات في القائمة. 3. خيار إطارات متجانبة يشمل هذا الخيار عرض الملفات بجانب بعضها البعض، ويُظهر اسم الملف ونوعه وتاريخ التعديل، بينما تختفي معلومات المشاركة وحجم الملف. 4. خيار صورة يشمل هذا الخيار عرض الملفات بجانب بعضها البعض مثل صور، ويُظهر اسم الملف ونوعه، بينما تختفي معلومات المشاركة وحجم الملف وتاريخ آخر تعديل. خيارات الملفات نضغط بالزر الأيمن للفأرة على أحد الملفات المُخزَّنة في ون درايف، حيث ستظهر لنا قائمة تحتوي على مجموعة من الخيارات للتحكم بالملف، والتي يمكننا من خلالها فتح الملفات على جهازنا أو على المتصفح، ومعاينتها وتحريرها ومشاركتها مع مستخدمين آخرين. كما تتيح لنا إمكانية تنزيل الملف على جهازنا وتحريره على تطبيق مايكروسوفت على جهازنا، أو حذف الملف إلى سلة المحذوفات أو نقله إلى مجلد آخر في ون درايف أو إنشاء نسخة أخرى منه أو إعادة تسميته. ستظهر كل الخيارات السابقة لنا في الشريط العلوي في ون درايف بشكل أيقونات بمجرد اختيارنا للملف. يمكننا مشاركة الملف المحفوظ على ون درايف بالضغط على "مشاركة" من القائمة التي ظهرت أو من الشريط العلوي، ثم إضافة البريد الإلكتروني للمستخدم أو المستخدمين الذين نريد مشاركة الملف معهم. وعند مشاركة الملف مع المستخدمين سيصبح بإمكانهم التعديل عليه وتبادل التعليقات. وبإمكاننا "نسخ الرابط" وإرساله إليهم مباشرةً بدون إضافة البريد الإلكتروني. لنقل الملف إلى مجلد آخر داخل ون درايف، نختار "نقل إلى" وستظهر لنا قائمة تطلب منَّا تحديد المكان الذي نريد نقل الملف إليه، كما يمكننا إنشاء مجلد جديد ونقل الملف إليه. تتيح لنا الخيارات أيضًا إمكانية مشاهدة الإصدارات المختلفة للملف وموازنتها، أي أنه بإمكاننا مشاهدة التعديلات التي جرت على الملف للوصول إلى النسخة النهائية. خيار البحث يمكننا البحث عن ملفاتنا ومجلداتنا بسهولة داخل ون درايف وذلك بإدخال كلمة البحث. يمكننا تصفية نتائج البحث بالبحث عن ملفات بتاريخ محدد أو بوقت محدد، مثل ملفات العام الماضي أو ملفات الأسبوع الماضي أو ملفات آخر 24 ساعة. كما يمكننا تغيير طريقة عرض النتائج بعرضها مثل قائمة أو قائمة مضغوطة أو إطارات متجانبة. تطبيق ون درايف تطبيق ون درايف هو تطبيق يساعدنا في تخزين ملفاتنا على جهاز الحاسوب ومزامنتها على الإنترنت؛ مما يسهِّل علينا الوصول إلى هذه الملفات وقتما نريد وأينما نكون. ويوفر لنا التطبيق مساحات تخزينية مختلفة وبأسعار مختلفة. حيث يمكننا الموازنة بين خطط وأسعار التخزين للأفراد في موقع ون درايف على الإنترنت، كما يمكننا التسجيل مجانًا ضمن خطة OneDrive Basic 5 GB والحصول على مساحة 5 غيغابايت مجانية. عند تثبيت التطبيق على جهازنا، سيُنشِئ مجلدًا باسم One Drive، وبإمكاننا وضع أي ملفات نريد مزامنتها بداخل هذا المجلد، ولتنزيله نضغط على "الحصول على تطبيقات ون درايف" من الصفحة الرئيسية لتطبيق ون درايف، ثم نتبع الخطوات التالية: نضغط على "تنزيل" لتنزيل التطبيق على جهازنا، حيث سينزل على جهازنا ملف باسم OneDriveSetup بامتداد "exe."، وهنا نحفظ الملف على أحد الأقراص على جهازنا. بعد اكتمال تنزيل الملف، سيظهر لنا بالشكل التالي مع أيقونة ون درايف الزرقاء. نفتح الملف وسيبدأ التحميل، ثم ننتظر حتى تكتمل عملية تحميله. ستظهر لنا الأيقونة في شريط الويندوز بالشكل التالي: سيطلب منَّا التطبيق الدخول ببيانات حساب مايكروسوفت، وهنا نضيف حسابنا بإدخال البريد الإلكتروني وكلمة المرور. نضغط على الأيقونة للوصول إلى الخيارات المختلفة للتطبيق. نضغط على Open folder لفتح مجلد OneDrive، والذي ستُخزَّن داخله كل الملفات التي نريد حفظها على ون درايف ومزامنتها. نحفظ ملفًا أو مجلدًا أو صورة داخل مجلد OneDrive، وسنلاحظ ظهور الإشارة التالية (أي أنه يُزامِن الملف على التخزين السحابي). بعد الانتهاء من المزامنة، سنلاحظ تغيُّر الإشارة كالتالي: نفتح حسابنا على ون درايف على المتصفح، وسنلاحظ وجود الصورة محفوظة على حسابنا في التخزين السحابي (يمكننا فتح حسابنا على ون درايف من المتصفح، أو بالضغط على View Online من أيقونة ون درايف). بإمكاننا إيقاف المزامنة مؤقتًا بالضغط على إيقاف المزامنة Pause syncing. تتيح لنا هذه الخاصية اختيار أحد الخيارات لإيقاف المزامنة، وهي: ساعتان، أو ثماني ساعات، أو أربع وعشرون ساعة. يمكننا تنزيل نسخة من تطبيق ون درايف للهاتف المحمول، وهي مُتاحة لهواتف iOS وAndroid، وهي تتيح لنا نفس الإمكانيات بتحميل ومشاركة ومزامنة ملفاتنا. خاتمة تحدثنا في هذا المقال عن خدمة ون درايف One Drive، وهي إحدى خدمات مايكروسوفت 365 أونلاين. وتعرَّفنا على مميزات التطبيق وكيفية استخدامه لرفع المجلدات والملفات وتنظيمها مثل عرضها وفرزها ونقلها ومشاركتها وإعادة تسميتها، كما تعرَّفنا على تطبيق ون درايف وكيفية تنزيله على جهاز الحاسوب وكيفية استخدامه لحفظ الملفات ومزامنتها. اقرأ أيضًا تطبيق مايكروسوفت ون نوت OneNote 365 أونلاين الدوال الشائعة في مايكروسوفت إكسل أونلاين 365
  4. بعد أن تعرفنا على تبويب الصفحة الرئيسية وما يحويه من أدوات وخصائص، سنتعرّف اليوم على تبويب إدراج أحد التبويات المهمة والكثيرة الاستخدام في تطبيق الاكسل، حيث يمكنك من خلاله إدراج عناصر مختلفة مثل صور وأشكال ودوال ومخططات وغيرها. أولا: تبويب إدراج سنتعرف على عناصر تبويب إدراج بالتطبيق على البيانات التالية: 1. إدراج دالة يمكنك إدراج دالة من خلال الضغط على أيقونة الدالة. بعد الضغط عليها سيظهر لك مربع حوار يطلب منك انتقاء الدالة واختيار فئتها. تلقائيًا ستظهر لك فئة "شائعة الاستخدام" وهي الدوال شائعة الاستخدام عند مستخدمي الإكسل مثل دوال Sum وAverage وCount. فئات الدوال عديدة مثل الدوال المالية ودوال النصوص ودوال الإحصاء وغيرها. نفترض أننا نريد حساب المعدل العام للطلاب أي المتوسط الحسابي لمعدلات الطلاب. لتحقيق ذلك سنضع المؤشر في الخلية التي ستظهر فيها نتيجة الدالة، وسنستخدم دالة Average التي تُرجع المتوسط الحسابي لمجموعة من القيم. لاحظ أنه عند تحديدك لأي دالة، سيظهر لك في أسفل مربع الحوار شرح يوضح الهدف من الدالة. سيطلب منك تحديد القيم التي ستحسب متوسطها الحسابي. سنحدد المعدلات الخمسة للطلاب، ومن ثم نضغط على مفتاح Enter لتظهر النتيجة، وهنا ستظهر النتيجة في الخلية التي وضعت المؤشر فيها مسبقًا. 2. التوضيحات يمكنكمن خلال عنصر التوضيحات، أن تُدرِج صورةً من جهازك أو إدراج شكل وتنسيقه. إدراج صورة اضغط على "صورة"، حيث سيظهر لك مربع حوار يطلب منك اختيار الصورة، لهذا اختر الصورة ومن ثم اضغط على إدراج. وهنا أدرجنا صورةً لشعار "أكاديمية حسوب" على يسار البيانات في ورقة العمل على سبيل المثال. إدراج شكل لإدراج شكل، اضغط على "الأشكال"، حيث ستظهر لك مجموعة من خيارات الأشكال. اضغط على أحد الأشكال وادرجه في ورقة العمل، واختر على سبيل المثال شكل مستطيل مستدير الزوايا. سيظهر لك مباشرةً تبويب جديد اسمه "تنسيق"، والذي يمكنك من خلاله تنسيق الشكل بخيارات متعددة. يمكنك تغيير الشكل ونمطه ولون تعبئته، وكذلك شكل ولون إطاره. ويمكنك اختيار نمط جاهز من أنماط الأشكال، لهذا أضف التنسيقات اللي تراها مناسبةً للشكل، وتأكد من أنك أضفت إطارًا وتعبئة. يمكنك أيضًا تنسيق الشكل مباشرةً بدون استخدام تبويب "تنسيق"، وذلك بالضغط على الشكل بزر الفأرة الأيمن، حيث ستظهر لك نفس الخيارات التي تحدثنا عنها مسبقًا لتنسيق الشكل. 3. المخططات يمكنك إدراج المخططات بأنواعها المختلفة وتنسيقها، والتحكم بها باستخدام عنصر المخططات. نفترض أننا سندرج شكلًا بيانيًا يوضح معدلات الطلاب وتفاوتها. نحدد عمود المعدل الجامعي (البيانات التي سنمثّلها في المخطط) ومن ثم سنختار الشكل "العمودي"، حيث أنه المناسب لطبيعة البيانات. سيظهر المخطط كالشكل التالي، وسيظهر في نفس ورقة العمل التي تعمل عليها، بحيث يمكنك الاستمرار على نفس الورقة، أو نقله إلى ورقة أخرى باستخدام خاصتي القص واللصق. لاحظ ظهور تبويب جديد اسمه "مخطط" للتحكم في المخطط. هذا التبويب سيظهر فقط في حال تحديد المخطط في ورقة العمل. ويمكنك من خلال هذا التبويب أن تغيّر البيانات ونطاقها، وأن تغيّر نوع المخطط، وأن تعدّل خصائص المخططأيضًا، مثل عنوانه وعناوين المحاور، وأن تُظهر أو تخفي خطوط الشبكة الأفقية والرأسية، وكذلك أن تغيّر تنسيق المخطط. لتغيير نطاق البيانات يمكنك الضغط على "تحديد البيانات"، سيظهر مربع حوار يطلب منك اختيار نطاق البيانات الجديد. يمكنك أيضًا تغيير نوع المخطط، حيث يمكنك تغييره مثلًا من عمودي إلى شريطي ليصبح مستطيلات أفقيةً بدلًا من مستطيلات عمودية. يمكنك أيضًا إضافة عنوان للمخطط، حيث ستُستبدل كلمة "عنوان المخطط" بالعنوان الذي أضفته. يمكنك كذلك تغيير مكان عنوان المخطط، مثل جعله أعلى المخطط، أو جعله يتوسط المخطط نفسه، أو عدم عرض العنوان. كما يمكنك عرض أو إخفاء عناوين المحاور الأفقية والرأسية، أو تغيير اسمها. يمكنك أيضًا إضافة أو إخفاء وسيلة إيضاح المخطط، وهذه يمكن استخدامها في حالات وجود بيانات كثيرة في المخطط وترغب في تمييزها بألوان مختلفة مثل اللون الأزرق لمعدلات طلبة كلية الهندسة، واللون الأحمر لمعدلات طلبة كلية الآداب. كما يمكنك عرض أو إخفاء تسمية البيانات، ويقصد هنا بالبيانات؛ "قيم المعدل الجامعي"، حيث يمكننا إظهار المعدلات خارج نهاية نقطة عمود المعدل الجامعي على سبيل المثال. يمكننا أيضًا إظهار جدول توضيحي للبيانات باستخدام خاصية "جدول البيانات". ويمكنك إظهار جدول للبيانات أسفل المخطط أو إخفائه. أيضًا بامكانك عرض أو إخفاء المحاور الأفقية والرأسية للشبكة، كما يمكنك تغيير قيمة عرض المحور العمودي لإظهارها بالآلاف أو الملايين أو البلايين، أو اختيار عرضها بالترتيب الافتراضي حسب البيانات المعطاة. كما يمكنك إظهار أو إخفاء عرض خطوط الشبكات الأفقية والعمودية سواءً الخطوط الرئيسية أو الثانوية. يمكنك أيضًأ تنسيق المخططات تنسيقًا سريعًا من استخدام الخصائص السابقة. وستجد أغلب الخصائص التي ذكرناها مسبقًا متاحةً في خاصية التنسيق. يمكنك تنسيق وتحرير تنسيق عنوان المخطط وتنسيق جدول البيانات مثلًا كالتالي: لاحظ أن المخطط الذي حصلنا عليه يمثّل معدلات الطلاب، لكن لو أردنا إظهار اسم الطالب صاحب كل معدل؛ فيمكننا عمل ذلك بتحديد عمودي المعدل والاسم. يمكنك تحديد العمودين معًا بتحديد عمود المعدل الجامعي واستمرار الضغط على مفتاح Ctrl من لوحة المفاتيح وتحديد عمود إسم الطالب. بعد ذلك أدرج مخططًا كما تعلمت مسبقًا، حيث سيظهر لك المخطط التالي. ويمكنك تنسيق العنوان والمحاور وخطوط الشبكة. 4. إدراج ارتباط تشعبي يمكنك إدراج ارتباط تشعبي بالضغط على أيقونة ارتباط تشعبي، حيث سيظهر لك مربع حوار يطلب منك إدخال النص الذي ستعرضه في الملف مثلًا "أكاديمية حسوب"، وسيطلب منك أيضًا URL وهو الرابط الالكتروني للموقع. سيُدرج الرابط الإلكتروني في ورقة العمل، وعند الضغط عليه سينتقل إلى المتصفح لفتح الموقع الإلكتروني. 5. التعليق يمكنك أيضًا إدراج تعليق داخل ورقة العمل. هذه الخاصية مفيدة في حال مشاركة الملف مع مستخدمين آخرين، مما يساعدكم على مشاركة الآراء والتعليقات داخل الملف. وسنتحدث عنها لاحقًا في نهاية المقال. 6. الجداول خيار إنشاء الجدول حدد نطاق الخلايا التي تريد إدراج جدول فيها واضغط على جدول، بعدها سيظهر لك مربع حوار لإنشاء الجدول والذي يتضمن نطاق البيانات الخاصة بالجدول حسب الخلايا التي حددتها. سيظهر لك الجدول بالشكل التالي: لا تُستخدم هذه الخاصية بكثرة، حيث أن تطبيق إكسل عبارة عن جداول يمكن للمستخدم أن يتعامل معها بسهولة. الجدول المحوري Pivot Table لشرح الجدول المحوري Pivot Table، سنفترض أن لدينا البيانات الموالية، وأننا نريد معرفة عدد الطلاب في كل تخصص. حيث يمكننا عمل ذلك باستخدام دوال الإكسل، كما يمكننا عملها بطريقة أسهل وأسرع وهي "الجدول المحوري Pivot "Table، والتي تساعدنا على عمل تقارير للبيانات بصورة سهلة وسريعة. حدد البيانات وتأكد من أنك حددت عناوين البيانات (الاسم والتخصص والمعدل الجامعي)، ومن ثم اضغط على أيقونة Pivot Table. سيظهر لك مربع الحوار التالي، والذي سيطلب منك تحديد البيانات (تأكيد البيانات اللي اخترتها أو تحديد بيانات جديدة)، وكذلك المكان الذي تريد وضع تقرير Pivot Table فيه، كما سيطلب منك مكان إدراج الجدول، وهنا سنختار ورقة عمل جديدة، يمكنك أيضًا إدراجه في نفس ورقة العمل. سيظهر لك تبويب جديد إسمه Pivot Table لتحرير وتنسيق الجدول. من أيقونة قائمة الحقول يمكنك تحديد الحقول التي ستستخدمها في إنشاء تقريرك. سنفترض كما ذكرنا مسبقًا أننا نريد تقريرًا يوضح عدد الطلاب في كل تخصص (كلية)، وسنحدد حقلي التخصص والمعدل الجامعي، كما يمكنك تحديد حقلي التخصص والاسم. حددنا حقل التخصص لأننا نريد معرفة كل تخصص؛ أما حقلي المعدل أو الاسم فهما لمعرفة عدد الطلاب في كل تخصص. نختار الحقول والتخصص الذي سيمثّل الصفوف كما يظهر في الشكل السابق؛ أما المعدل الجامعي فسيمثّل القيم (التي نريد عددها). اضغط على قائمة القيم واختر "إعدادات حقل القيم"، وغيّر الدالة المستخدمة لـ Count بدلًا من Sum، حيث أننا نريد عدد الطلاب. ستحصل على النتيجة التالية والتي تمثّل عدد الطلاب في كل كلية، ومجموع الطلاب الكلي 10. يمكنك تصفية النتائج لإظهار تخصص أو تخصصات محددة كالتالي: يمكنك تحديث البيانات في حال إضافة بيانات جديدة أو تغيير نطاق البيانات واختيار بيانات جديدة بالضغط على الأيقونات التالية: يمكن أيضًا نقل Pivot Table إلى ورقة عمل أخرى عن طريق أيقونة نقل Pivot Table. يمكنك اختيار نمط تنسيق من الأنماط الجاهزة في الإكسل بدلًا من تنسيقه بنفسك، كما يمكنك اختيار النمط الذي تريد بما يتناسب مع بياناتك. يمكنك التحكم في إعدادات Pivot Table سريعًا من قائمة إعدادات، حيث ستجد بعض الخصائص التي ذكرناها مسبقًا وبعض الخصائص الإضافية مثل إخفاء وإظهار الإجماليات الكلية والفرعية. يمكننا إخفاء الإجمالي الكلي من الصفوف وهنا سيخفي العدد الكلي وهو 10 ويكتفي بعرض عدد الطلاب في كل كلية. ثانيا: المشاركة والتعليقات سيظهر لك مربع حوار لإرسال رابط المشاركة لمستخدمين آخرين بمجرد الضغط على أيقونة مشاركة كما تحدثنا عنها في الدرس السابق. إذا فتح أكثر من مستخدم نفس الملف، فستظهر لك مباشرةً بجانب أيقونتي المشاركة والتعليقات إشارة لكل مستخدم جديد داخل المستند. كما سيكون مكان الخلية التي يعمل عليها المستخدم واضحًا من خلال اللون المخصص له من قبل التطبيق. تمكّن أيقونة التعليقات المستخدمين للملف من إضافة تعليقات لبعضهم البعض من دون التغيير في محتوى الملف الأساسي. ويمكنك تحرير التعليق أو حذفه أو حله بعدّ أنه قد وافق عليه المستخدم الآخر. لإضافة تعليق واضح حول نقطة محددة في الملف، اضغط على الخلية ثم أضف تعليقًا. ويمكنك أيضًا الرد على تعليق موجود مسبقًا بدلًا من كتابة تعليق جديد. لقد تعرّفنا في هذه المقالة على تبويب إدراج بما يحتويه من خصائص لإدراج وتنسيق الصور والأشكال والمخططات والجداول وPivot Tables والدوال. حيث يمكنك من خلال هذا التبويب إدراج وتنسيق كافة بياناتك، كما يمكنك تلخيص وتحليل بياناتك باستخدام الدوال المختلفة أو Pivot Tables بطريقة سهلة. كما تعرّفنا على طريقة مشاركة الملف مع المستخدمين الآخرين والاستفادة من خاصية التعليقات بإضافة تعليقات جديدة أو الرد على تعليقات المستخدمين الآخرين. اقرأ أيضًا الدوال الشائعة في مايكروسوفت إكسل أونلاين 365 كيفية حذف الصفوف والأعمدة الفارغة في جداول بيانات Microsoft Excel كيفية إنشاء القوائم المنسدلة وتخصيصها في Microsoft Excel
  5. عند كتابة الشيفرات البرمجية، تُصادِفنا العديد من التعليمات التي نحتاج تنفيذها فقط عند تحقّق أمر ما، مثل: تنفيذ شيفرة عند إدخال المستخدم قيمة معينة لإحدى الخلايا، أو عند إجراء تغييرٍ ما عليها، أو عند إدخال قيمة لا توافق الشروط التي وضعناها. بحيث تُنفَّذ الشيفرة بإظهار رسالة معّينة أو بتنفيذ أمر معين في حال تحقّق الشرط، وتنفيذ أوامر أخرى في حال عدم تحقّقه، وتُسمى هذه العملية بالعملية الشرطيّة. تعليمة IF الشرطية هي أشهر التعليمات الشرطيّة وتكتب بالصيغة التالية: IF condition Then code (if the condition is true) وهي الصيغة الأساسية لكتابة هذه التعليمة، ولكن يمكن كتابتها بشكل أوسع على الصيغة التالية: IF condition Then codes (if the condition is true) End If حيث أن: condition: الشرط الذي نريد تنفيذ التعليمات عند تحقّقه. codes: مجموعة التعليمات التي ستُنفذ عند تحقّق الشرط السابق. End IF: علامة نهاية العملية الشرطيّة. مثال لتكن لدينا البيانات التالية، حيث نريد فحص الخلايا وإعطائها رموز ترتيب في العمود D حسب نوع القسم. نطبق الشرط على الخلية A2 لفهم عمل الشرط، بحيث تعمل الشيفرة على إدخال القيمة A في الخلية D2 عند تحقّقه، ونكتب الشرط بالصيغة التالية: Sub test_if() IF Range("A2").Value = "الصحي" Then Range("D2").Value = "A" End IF End Sub الشرط هنا هو أن تكون قيمة الخلية A2 تساوي القيمة "الصحي"، وبتنفيذ الإجراء من المحرّر نجد أنّ الشيفرة تعمل بطريقة صحيحة، وتُمثّل هذه الصيغة الشروط البسيطة. تعليمة IF/Else الشرطية تعمل بنفس مبدأ التعليمة السابقة ولكن في حال لم يتحقّق الشرط نضيف للشيفرة عمليات أُخرى ليُنفّذها، وتكون التعليمة بالصيغة التالية: IF Condition Then codes (if the condition is true) Else codes (if the condition is false) End If حيث أن Else هنا تُنفّذ الأوامر التابعة لها في حال لم يتحقّق الشرط. مثال لنطبّق التعليمة الجديدة على الخلية A3 ونضع القيمة السابقة في حال تحقّق الشرط، والقيمة B في حال عدم تحقّقه، ونكتب الشرط بالصيغة التالية: Sub test_if() IF Range("A3").Value = "الصحي" Then Range("D3").Value = "A" Else Range("D3").Value = "B" End IF End Sub تعليمة الشروط المتداخلة IF/Elseif/Else تعمل هذه التعلمية على تطبيق شروط متعددة على الخلية، بحيث إذا لم يتحقّق الشرط الأول، ننتقل للشرط الثاني، ثم للثالث وهكذا. وتكون التعليمة بالصيغة التالية: IF condition Then codes (if the first condition is true) Else IF condition Then codes (if the second condition is true) Else codes (if all conditions are false) End If مثال لنطبق التعليمة الجديدة على الخلية A4 ونضع القيمة السابقة في حال تحقّق الشرط الأول، والقيمة C في حال كانت قيمتها هي "الزراعي"؛ أو القيمة D عند عدم تحقّق أي شرط سابق. ونكتب الشرط بالصيغة التالية: Sub test_if() IF Range("A4").Value = "الصحي" Then Range("D4").Value = "A" ElseIF Range("A4").Value = "الزراعي" Then Range("D4").Value = "C" Else Range("D4").Value = "D" End IF End Sub تعليمة IF الشرطية مع التعليمات AND/OR إذا أردنا أن ننفذ عمليات على الخلايا في حال تحقّق عدة شروط مع بعضها، نستخدم التعليمة AND مع تعليمة IF الشرطيّة؛ أما في حال أردنا أن ننفذ عمليات على الخلايا في حال تحقّق أحد الشروط، فسنستخدم التعليمة OR معها، لتصبح الصيغة: IF condition1 AND/OR condition2 AND/OR condition3 Then codes (if all conditions are true with AND) codes (if one of conditions are true with OR) Else codes (if all conditions are false) End If مثال لنطبّق أكثر من شرط على الخلية A5، ونضع القيمة E في حال تحقّق الشروط، أو القيمة F في حال عدم تحقّقها، ونكتب الشرط بالصيغة التالية: Sub test_if() IF Range("A5").Value = "الصحي" And Range("C5").Value=11 Then Range("D5").Value = "E" Else Range("D5").Value = "F" End IF End Sub التعليمة الشرطية Select Case تُستعمل هذه التعليمة إذا أردنا فحص عدة شروط على خلية واحدة، وتنفيذ التعليمة المقابلة للشرط في حال تحقّقه. حيث نلاحظ أنّه يمكن تنفيذ هذه العملية عن طريق التعليمة IF/Elseif/Else، ولكن التكرار الكثير للتعليمة IF في الشيفرة البرمجية سيزيد من حجم العمليات في الإجراء، كما سيؤدي إلى بطء تنفيذه، لكن باستخدام التعليمة Select Case، فسنقلل من حجم الشيفرة البرمجية وبالتالي تصبح عمليةً أكثر من التعليمة السابقة. الصيغة العامة للتعليمة Select case Element(object) Case The first case codes (if the case is true) Case The second case codes (if the case is true) Case Else codes (If all cases are false) End Select Element: العنصر الذي نُطبّق الاستعلام عليه للتحقّق. The first case: تمثل شرط التحقّق من القيمة الأولى أو قيمة الفحص الأولى. The second case: تمثل شرط التحقّق من القيمة الثانية أو قيمة الفحص الثانية. Code: التعليمات التي ستُنفَّذ عند تحقّق الحالة السابقة له. مثال لدينا الجدول التالي الذي يحتوي على الترتيب التالي، والذي يمثّل أيام الأسبوع. على فرض أنّ السبت هو اليوم الأول، نريد فحص القيمة في الخلية وإعادة ما يقابلها من أيام الأسبوع، ونطبق الصيغة التالية على الخلية A8: Sub day_name() Select Case Range("A8").value Case 1 Range("B8").value="السبت" Case 2 Range("B8").value="الأحد" Case 3 Range("B8").value="الإثنين" Case 4 Range("B8").value="الثلاثاء" Case 5 Range("B8").value="الأربعاء" Case 6 Range("B8").value="الخميس" Case 7 Range("B8").value="الجمعة" End Select End Sub عندما تكون الأوامر التي ستُنفّذها الحالة Case متشابهةً في أكثر من حالة، فسيمكننا اختصار الإجراء وتجميع الحالات ذات الأوامر المتشابهة في حالة واحدة، وذلك أيضًا يقلل من حجم الشيفرة، بحيث يصبح شكل العملية بالصيغة التالية: Select case Element(object) Case The first case, The second case, The third case Code Case The fourth case, The fifth case Code Case Else Code End Select بالعودة إلى مثالنا السابق وبفرض أن يومي الجمعة والسبت هما أيام عطلة وباقي الأيام أيام عمل، وأردنا تطبيق العملية السابقة على البيانات لمعرفة إذا كان ترتيب اليوم يقابل يوم عمل أو يوم عطلة نُطبّق التعليمة السابقة على الخلايا C2 وC5، لتصبح لدينا التعليمة كالتالي: Select Case Range("A8").Value Case 1, 2 Range("C5").Value = "يوم عطلة" Case 3, 4, 5, 6, 7 Range("C5").Value = "يوم عمل" End Select بتكرار العمليات السابقة في الخلية C2، نجد أن الشيفرة تعمل بطريقة صحيحة، ولكن بما أن شرط تحقُّق الحالة هو عبارة عن أرقام تراتبية، يمكننا الاختصار أكثر وكتابة التعليمات بالشكل التالي: Case 3 To 7 Range("C5").Value = "يوم عمل" كما يمكن كتابتها بالشكل التالي في حال كانت قيم المطابقة عددية، أي قابلة للقياس: Case IS<2 Range("C5").Value = "يوم عمل" كل الصيغ السابقة تؤدي نفس العمل ولكن تختلف السرعة في التنفيذ. مثال تطبيقي لكل ما سبق لدينا الملف التالي ونريد كتابة إجراء يعمل على فحص البيانات المُدخلة في الخلايا وإعطاء رسالة في حال كانت إحدى البيانات فارغة أو ترحيل البيانات إلى صفحة ثانية في حال كانت البيانات كاملةً عن طريق زر إدخال. في البداية نضع اسمًا للإجراء الذي سنعمل عليه وليكن DataEntry، ثم نُعرّف المتغيرات التي ستحفظ نتيجة الاستعلامات عن قيم إدخال الخلايا التي نعمل عليها. حيث لدينا ثلاثة أنواع من المتغيرات، وهي: رقمي طويلLong، ونصّي String، وتاريخ Date. بحيث ستتكون لدينا الصيغ التالية: Sub DataEntry() Dim name As String Dim nationalID As Long Dim bearthday As Date Dim place_of_birth As String name = Worksheets("صفحة الإدخال").Range("A1").Value nationalID = Worksheets("صفحة الإدخال").Range("A2").Value bearthday = Worksheets("صفحة الإدخال").Range("A3").Value place_of_birth = Worksheets("صفحة الإدخال").Range("A4").Value End Sub نضيف الآن عمليات ترحيل البيانات إلى صفحة البيانات عند الضغط على الزر إدخال، ونضيف إلى الشيفرة التعليمات التالية: Worksheets("البيانات").Range("A2").Value = name Worksheets("البيانات ").Range("B2").Value = nationalID Worksheets("البيانات ").Range("C2").Value = bearthday Worksheets("البيانات ").Range("D2").Value = place_of_birth إلى هنا نكون قد أنجزنا الجزء الأول من المطلوب ولكن ينقصه أمر أساسي، وهو أنه عند إضافة بيانات جديدة يجب أن تعمل الشيفرة أولًا على إضافة صف جديد، ثم تُرحّل البيانات إلى صفحة البيانات كي لا تُستبدل البيانات القديمة بالبيانات الجديدة، ولهذا سنحتاج إلى التعليمة التالية: Worksheets("البيانات").Range("2:2").Insert يعمل الأمر insert على إضافة خلايا ضمن النطاق المحدد في العنصر Range، وقد وضعنا المجال 2:2 لأننا نريد إضافة صف كامل. بعد إضافة الصف وترحيل البيانات إليه، فلابد من تفريغ خلايا الإدخال عن طريق الإجراء وذلك عن طريق التعليمات التالية: Worksheets("صفحة الإدخال ").Range("A1").ClearContents Worksheets("صفحة الإدخال ").Range("A2").ClearContents Worksheets("صفحة الإدخال ").Range("A3").ClearContents Worksheets("صفحة الإدخال ").Range("A4").ClearContents حيث يعمل الأمر ClearContents على تفريغ محتوى الخلية. بقي لدينا إضافة شرط فحص قيم الخلايا قبل ترحيل البيانات، ويجب ألّا تكون أي خلية من خلايا الإدخال فارغة، لذا نستعمل التعليمة OR مع التعليمة IF لفحص جميع الخلايا بشرط واحد، إذ يجب الانتباه إلى أن الخلايا النصية تُوازَن بالفراغ، أما الخلايا الرقمية فنوازنها بالقيمة 0 للتأكد أنها ليست فارغة، بحيث تكون الصيغة كالتالي: If name = "" Or nationalID = 0 Or bearthday = 0 Or place_of_birth = "" Then MsgBox "البيانات غير كاملة" بهذا تكون الشيفرة قد أصبحت جاهزةً لإجراء عملية الإدخال كما هو مطلوب والإجراء كاملًا هو التالي: Sub DataEntry() Dim name As String Dim nationalID As Long Dim bearthday As Date Dim place_of_birth As String name = Worksheets("صفحة الإدخال").Range("B1").Value nationalID = Worksheets("صفحة الإدخال").Range("B2").Value bearthday = Worksheets("صفحة الإدخال").Range("B3").Value place_of_birth = Worksheets("صفحة الإدخال").Range("B4").Value If name = "" Or nationalID = 0 Or bearthday = 0 Or place_of_birth = "" Then MsgBox "البيانات غير كاملة" Else Worksheets("البيانات").Range("2:2").Insert Worksheets("البيانات").Range("A2").Value = name Worksheets("البيانات").Range("B2").Value = nationalID Worksheets("البيانات").Range("C2").Value = bearthday Worksheets("البيانات").Range("D2").Value = place_of_birth Worksheets("صفحة الإدخال").Range("B1").ClearContents Worksheets("صفحة الإدخال").Range("B2").ClearContents Worksheets("صفحة الإدخال").Range("B3").ClearContents Worksheets("صفحة الإدخال").Range("B4").ClearContents End If End Sub خاتمة توفر لنا الشروط ضبطًا كبيرًا للعمليات بجميع أنواعها فهي تُجبر الشيفرة على تنفيذ العمليات وفق مسار معين كما أنها توفر الوقت اللازم لمعالجة العمليات التي لا تحقّق الشرط ضمن الشيفرة، لذلك يصبح تنفيذ الشيفرة أسرع، وتصبح العمليات أكثر دقة، مما يضمن لنا الحصول على بيانات تخدم هدفنا والتخلّص من أخطاء الإدخال. اقرأ أيضًا مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل. المتغيرات وأهم العناصر في برمجة VBA في مايكروسوفت إكسل. التفاعل مع المستخدم في مايكروسوفت إكسل باستخدام VBA الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA.
  6. نقضي الكثير من الوقت في تكرار المهام البسيطة في إكسل، ;قد تكون هذه المهام، مثل: تنسيق نطاقات متعددة، وإخفاء أوراق متعددة، والنسخ واللصق في العديد من المصنفات، وتطبيق عوامل التصفية على جداول متعددة. وقد تكون هذه المهام مضيعةً للوقت ومملةً للغاية، لكن لحسن الحظ يمكننا استخدام الحلقات في وحدات ماكرو VBA، لتكرار الإجراءات بسرعة كبيرة، بحيث يمكن إكمال المهام التي قد تستغرق ساعات لإنجازها يدويًا في غضون ثوانٍ باستخدام حلقة تكرارية. الحلقة التكرارية For Next Loop تعمل على تكرار التعليمات وفقًا لشرط نُسنده لمُتغيّر اختياري وتكون قيمة الفحص مناسبةً لعدد مرات التكرار التي نريد تنفيذها. الشكل العام لصيغة الحلقة For variable = Start To End Code Next Element حيث أن: variable: تمثل المُتغيّر الذي سيُحدد عدد مرّات تكرار الحلقة عن طريق قيمة البداية والنهاية له. Start: تمثل قيمة البداية للمُتغيّر. End: تمثل قيمة النهاية للمُتغيّر. Code: التعليمات التي سنُنفذ عليها التكرار. Next Element: تُعيد هذه التعليمة الحلقة للبداية لتطبيقها على العنصر التالي بإضافة 1 للمُتغيّر. مثال لتكن لدينا مثلًا البيانات التالية، بحيث نريد تغيير التنسيق للنصوص في الخلايا إلى خط غامق باستخدام إجراء يعمل على ذلك. نكتب الإجراء بالصيغة التالية: Sub test1() Dim counter As Integer For counter = 1 To 10 ActiveCell.Font.Bold = True ActiveCell.Offset(1, 0).Select Next counter End Sub آلية عمل الحلقة بعد أن عرّفنا المُتغيّر وأُسندت له قيمة البداية والنهاية في الحلقة، فستعمل التعليمة ActiveCell.Font.Bold = true على تغيير تنسيق الخط من العادي إلى الغامق، حيث ActiveCell هو عنصر الخلية المفعّلة (مكان توضّع المؤشر)، والعنصر Font هو خط الخلية، أمّا الخاصية Bold فتأخذ قيمتين true للخط الغامق وFalse للخط العادي، وهي القيمة الافتراضية لتنسيق الخط. بعدها ننتقل إلى التعليمة التالية، بحيث تعمل التعليمة (Offset(value1,value2 بالانتقال إلى خلية نُحدّدها عبر نطاق التعليمة، إذ تُمثِّل الوسيطة value1 مقدار الانتقال على العمود بدايةً من الخلية الحالية، أما الوسيطة value2 فتمثّل مقدار الانتقال على الصف بدايةً من الخلية الحالية. نريد الانتقال في مثالنا لخلية واحدة فقط للأسفل على العمود، فيكون المجال لدينا (Offset(1,0، أما الأمر Select فيجعل الخلية مفعّلة (نشطة). بعدها ننتقل إلى التعليمة Next counter، حيث تنقل المُتغيّر إلى القيمة التالية وتكرر العملية إلى أن تصل لقيمة النهاية المُحددة للمُتغيّر. أشكال أخرى لكتابة الحلقة السابقة يمكن كتابة الحلقة بالشكل العكسي لمجال المُتغيّر. For variable = End To Start كما يمكننا التحكم بمقدار الزيادة في قيمة المُتغيّر للدورة التالية. For variable = End To Start Step value هنا لو كانت قيمة البداية 1 وقيمة النهاية 10 مثلًا وأردنا أن تكون خطوات الزيادة للمُتغيّر هي خطوتين في كل دورة، فستُنفذ الحلقة السابقة 5 عمليات تكرار فقط. الحلقة التكرارية For Each Next Loop تُعَد من أقوى تقنيّات الماكرو، وهذا النوع هو الأكثر شيوعًا من الحلقات، حيث تسمح لنا حلقة For Next Loop بالمرور عبر مجموعة من العناصر في إكسل وتكرار بعض العمليات عليها. وقد تتضمن مجموعات العناصر ما يلي: خلايا في نطاق. أوراق العمل في مصنف. المصنفات على الحاسوب. الجداول المحورية في ورقة العمل. الحقول المحورية في جدول محوري. الأشكال الموجودة في ورقة العمل، وأي كائن آخر تتفاعل معه في إكسل. تتمثل مهمة For Next Loop في تنفيذ نفس الإجراءات (سطور التعليمات البرمجية) على كل عنصر في المجموعة. الشكل العام للحلقة For Each Object In collection Code Next Object حيث أن: +Object: تمثل العنصر الذي سننفذ الحلقة عليه. +collection: تمثل مجموعة العناصر التي تمثل العنصر Object. Code: مجموعة التعليمات التي سيكررها الإجراء. Next Object: تُعيد هذه التعليمة الحلقة للبداية لتطبيقها على العنصر التالي. مثال ليكن لدينا ملف العمل التالي الذي يحتوي على مجموعة من الصفحات المخفية. إظهار هذه الصفحات يدويًا سيستغرق بعض الوقت، ولكن يمكننا كتابة إجراء بسيط يحوي حلقةً تكراريةً تعمل على تغيير الخاصية visible لكل صفحة إلى القيمة xlSheetVisible والتي تجعل الصفحة ظاهرة، ويكون الإجراء بالصيغة التالية: Sub test2() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Visible = xlSheetVisible Next ws End Sub آلية عمل الحلقة عرّفنا المُتغيّر ws على أنه عنصر صفحة، ثم وضعناه في الحلقة التكرارية على أنه عنصر المجموعة. التعليمة ActiveWorkbook.Worksheets تُحدد مجموعة عناصر صفحات الملف الحالي الذي نعمل عليه لأننا نريد تكرار العملية على جميع أوراق العمل في ActiveWorkbook. يُحدد المُتغيّر ws العنصر الأول من المجموعة، بحيث تعمل تعليمة الحلقة التكرارية بالمرور على صفحات الملف واحدة تلو الأخرى، وتُستبدَل الخاصية xlSheetHidden بالخاصية xlSheetVisible، إذ أن التعليمة Next تعمل على نقل العملية إلى العنصر الثاني بالمجموعة، ثم الثالث، وهكذا إلى الوصول لآخر عنصر(صفحة) في المجموعة، وعندها يتوقف التكرار الحلقي ويستمر الماكرو إلى السطر التالي من التعليمات البرمجية وهو إنهاء الإجراء End sub. الترتيب الذي تعمل به كل حلقة تبدأ الحلقة For each دائمًا عند العنصر الأول في المجموعة ويتكرر حتى العنصر الأخير بالترتيب الذي يظهر به في إكسل، حيث يعتمد هذا على رقم فهرس العناصر في المجموعة، وفيما يلي بعض الأمثلة على الترتيب الذي تعمل به الحلقة للعناصر الشائعة: المصنفات: يبدأ في المصنف الذي فُتح أولًا، وتعمل الحلقات على المصنفات بالترتيب الذي فُتحت فيه، بحيث يتعيّن رقم فهرس للمصنفات عند فتحها. أوراق العمل: تبدأ من علامة تبويب الورقة الأولى في المصنف، وتتكرر إلى الأخيرة بالترتيب الذي تظهر به علامات التبويب في المصنف. الخلايا: تبدأ الحلقات من اليمين إلى اليسار (وبالعكس في النسخ الإنكليزية) ثم إلى الأسفل، أي يبدأ في الخلية الأولى في النطاق ويتكرر إلى العمود التالي في نفس الصف، ثم ينتقل إلى الصف التالي. الجداول والجداول المحورية: تبدأ بالعنصر الذي أُنشئ أولًا وتعمل الحلقات على عناصر الورقة بترتيب إنشاءها. ينطبق هذا المبدأ نفسه على العناصر الأُخرى التي نُنشئها في أوراق العمل، مثل: الأشكال، والمخططات، وما إلى ذلك. الحلقة التكرارية Do Loop تعمل هذه الحلقة على تكرار العمليات في الشيفرة اعتمادًا على شرط نضعه في صيغة الحلقة. الصيغة العامة للحلقة Do until Condition Code Loop حيث أن: +Condition: تمثِّل شرط تكرار التعليمات في الحلقة. Code: مجموعة التعليمات التي سيكررها الإجراء. Loop: تُعيد هذه التعليمة الحلقة للبداية لتطبيقها على العنصر التالي. مثال لتكن لدينا البيانات السابقة ونريد إعطاء خلفية بلون أحمر للخلايا غير الفارغة، ولإنجاز ذلك نكتب الحلقة التكرارية التالية: Sub test3() Do Until ActiveCell.Value = "" ActiveCell.Interior.Color = vbRed ActiveCell.Offset(0,1).Select Loop End Sub آلية عمل الحلقة تفحص الحلقة الشرط أولًا، وفي حال تحقُّقه تُنفّذ التعليمة على الخلية المُفعّلة عن طريق العنصر Interior للتحكم بخلفية الخلية عن طريق الخاصية color، وإعطاءه القيمة vbRed التي تُمثِّل اللون الأحمر، ثم التعليمة ActiveCell.Offset(0,1) Select التي تعمل على الانتقال إلى الخلية التالية وتنشيطها، بعدها التعليمة Loop التي تُعيد الحلقة للبداية لتكرار العمليات على الخلية التي أصبحت نشطةً، وهكذا إلى أن يصل الشرط إلى خلية فارغة، عندها تتوقف الحلقة. أشكال أخرى لكتابة الحلقة السابقة يمكن كتابة الحلقة بالصيغة التالية: Do while Condition Code Loop تعمل هذه الصيغة بنفس آلية الصيغة السابقة، ولكن في السابقة كان الأمر هو تنفيذ التكرار حتى يتحقّق الشرط، بينما هنا تعمل على تنفيذ التكرار طالما الشرط محقّق. ولدينا صيغة أُخرى تعمل بنفس الآلية وهي: Do Code Loop while Condition تختلف هذه الصيغة عن سابقاتها بأنها ستُنفّذ العمليات داخل الحلقة ثم تتحقّق من الشرط، أي أنّ العمليات هنا ستُنفذ لمرّة واحدة على الأقل، بينما في السابقات يمكن ألّا تُنفّذ العمليات ضمن الحلقة ولا مرّة. خاتمة نلاحظ أن العمليات الروتينية التي نُجريها على إكسل لا تُعَد ولا تُحصى، وأنّه بالتطبيق السليم لأفكار الحلقات التكرارية سنتخلص من الروتين الممل، ونوفر الوقت، ونضبط عملياتنا أكثر من الطريقة اليدوية، وكل ما علينا هو دراسة المهمة التي نكرّرها دائمًا ومعرفة عناصرها وخصائصها، وتصميم إجراء يحتوي على إحدى صيغ الحلقات التكرارية بما يتناسب مع تلك العملية، ووضع التعليمات المناسبة لتنفيذ تلك العملية داخل الحلقة التكرارية لِتُنفذها عوضًا عنّا وذلك خلال وقت قياسي. اقرأ أيضًا التعامل مع الأخطاء في VBA ضمن مايكروسوفت إكسل التفاعل مع المستخدم في مايكروسوفت إكسل باستخدام VBA العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA
  7. عند كتابة الإجراءات نُجهّز كل شيء للتعامل مع أوامر المستخدم النهائي للتطبيق، ولكن بغض النظر عن مدى خبرتك في كتابة الشيفرات في VBA، فإنّ الأخطاء دائمًا ستكون جزءًا من الشيفرة سواءً كنت مبتدئًا أو خبيرًا، ولكن الفرق هنا بين المبتدئ والخبير هو معرفة كيفية التعامل مع الأخطاء واستخدامها فعّالية. أنواع الأخطاء في البداية لابد لنا من معرفة الأنواع المختلفة للأخطاء التي من المحتمل أن تواجهنا في عملية البرمجة، فهناك أربعة أنواع من الأخطاء في VBA وهي: أخطاء في بنية التركيب البرمجي (الشيفرة البرمجية) Syntax errors. أخطاء التجميع Compilation errors. أخطاء التشغيل Runtime errors. أخطاء منطقية Logical Errors. أخطاء في بنية التركيب البرمجي Syntax errors هي أخطاء تحدث في بناء الشيفرة، مثل: نسيان قوس مفتوح، أو نسيان كتابة جزء من تعليمة. نجد في الإجراء الموضَّح بالصورة أن التركيب خاطئ، حيث أنّ الشرط يفتقد لكلمة Then، وعند كتابة التعليمات في VBA، فسيتحقق المحرّر من كل الجملة بمجرد الضغط على الزر Enter، فإذا وجد شيئًا مفقودًا في بناء التركيب، فسيعرض رسالةً على الفور تحتوي بعض النص الذي يمكن أن يساعدك في فهم الجزء المفقود. للتأكد من رؤية المحرّر لأخطاء التركيب البرمجي كلما كان هناك شيء مفقود، فنحتاج إلى التأكد من تمكين التحقّق من بناء الجملة Auto syntax check، وذلك من قائمة Tools في واجهة المحرّر، حيث نضغط على الخيار options لتظهر لنا النافذة التالية: نتأكد من تبويب Editor بأن الخيارAuto syntax check مُفعّل، فإذا كان غير مُفعّل فإن المحرّر سيُحدد لك السطر الذي يحوي الخطأ ويُلّونَه بلون أحمر ولكن بدون إعلامنا ما هو نوع الخطأ. أخطاء التجميع Compilation errors تحدث عندما يكون هناك جزء مفقود من النص ومطلوب في نفس الوقت، تتشابه هذه الأخطاء قليلًا مع المجموعة السابقة لكن الفرق بينهما بينهما يكمن في كون الأخطاء في بنية التركيب تُظهر الخطأ في حال كان السطر البرمجي فيه جزء مفقود، أمّا أخطاء التجميع فتظهر عند تشغيل الشيفرة ويكون سطر بالكامل مفقود، أي أن صيغة الشيفرة صحيحة في سطر ما ولكنها غير صحيحة عند معالجة جميع شيفرة الإجراء أو المشروع ككتلة واحدة، ومن الأمثلة على ذلك: تعليمة IF الشرطيّة بدون عبارة End IF المقابلة لها. حلقة For التكرارية بدون عبارة Next المقابلة لها. استدعاء إجراء غير موجود، أو موجود ولكن فيه معلومات خاطئة. عدم تعريف أحد المتغيّر ات. أخطاء التشغيل Runtime errors هي الأخطاء التي تحدث أثناء تشغيل الشيفرة، وذلك عندما نكون قد تجاوزنا النوعين السابقين من الأخطاء، أي في حال وجود خطأ من أحدهما فله أولوية الظهور بين الأخطاء ولا يظهر خطأ التشغيل قبل معالجته، ومن الأمثلة على الأخطاء وقت التشغيل: إدخال بعض البيانات في صفحة ما ضمن الملف الذي نعمل عليه ولكن هذه الصفحة غير موجودة (سواءً حُذفت أو تغيّر اسمها). تصميم إجراء يحتوي عمليات على ملف ما وعند التشغيل لم يَجِد المحرّر هذا الملف، عندها نحصل على خطأ التشغيل. في هذا النوع من الأخطاء نجد أن المحرّر سيُظهر لنا نافذةً تحتوي على خطأ من النوع أخطاء التشغيل Runtime errors، ولكنها مفيدة أكثر من النوعين السابقين، حيث نجد أن محتوى الرسالة هو تفصيل شبه كامل عن الخطأ وسببه، وعند الضغط على الزر Debug، فسيعمل المحرّر على تمييز جزء الشيفرة الذي يؤدي إلى الخطأ. أخطاء منطقية Logical Errors لا تؤدي هذه الأخطاء إلى إيقاف تنفيذ الشيفرة ولكنها قد تؤدي إلى نتائج خاطئة يمكن أن تكون أصعب أنواع الأخطاء اكتشافًا، وبالتالي فإن إصلاحها يكون أصعب، حيث أن المحرّر لا يستطيع تمييزها وتحتاج إلى الإصلاح اليدوي، أمثلة على ذلك: تعريف متغيّرين تجري عليهما عملية جمع ضمن إجراء ما وعند كتابة العملية وضع إشارة الضرب بدل إشارة الجمع بين المتغيّرين. كتابة حلقة غير منتهية مثل فحص الخلايا الفارغة في عمود، ولم نضع له شرط يحدد قيمة النهاية للفحص. معالجة الأخطاء هنالك ثلاث طرق للمعالجة يمكننا استخدامها وهي: عرض الخطأ وإيقاف الشيفرة. تجاهل الخطأ وإكمال الشيفرة. تجاهل الخطأ والذهاب لموقع معين في الشيفرة. وجميعها تأخذ الصيغة العامة التالية: On Error statement حيث أن On Error تفيد توجيه المحرّر إلى ما نريد تنفيذه لمعالجة الخطأ عند وجوده، وstatement ما نريد من المحرّر فعله لمعالجته، ولدينا 4 حالات للمعالجة: on Error Go To 0 on Error Resume Next on Error Go To [Label] on Error Go To -1 المعالجة باستخدام on Error Go To 0 هو السلوك الافتراضي في VBA، بمعنى آخر إذا كنّا لا نستعمل أيًا من أساليب معالجة الأخطاء، فسينفّذ هذا النوع تلقائيًا عند وجود خطأ ما، حيث أن مُعالج الشيفرة يتوقف ويعرض رسالة الخطأ، وهنا يتطلب التطبيق تدخل المستخدم مع الشيفرة لمعالجة الخطأ حتى يتمكّن من متابعة تنفيذ الشيفرة. مثال ليكن لدينا الإجراء التالي الذي يعمل على حساب بعض المعادلات Sub UsingDefault() Dim x As Long, y As Long x = 6 y = 6 / 0 End Sub عند تشغيل الشيفرة التالية، فستظهر رسالة الخطأ من النوع on Error Go To 0. يفيدنا هذا النوع من المعالجات في تحديد موقع الخطأ ولكن له عدة مساوئ، حيث لا يمكن للمستخدِم الاستمرار بالعمل على التطبيق دون إصلاح هذا الخطأ، ويُعَد التطبيق غير مناسب للمستخدِم النهائي، وهو يُعَد من الأخطاء غير المهنية وتجعل التطبيق غير مستقر. المعالجة باستخدام on Error Resume Next يؤدي استخدام هذا النوع إلى تجاهل السطر الذي يحتوي على الخطأ والمتابعة بدون تنفيذه. هناك مواضع محددة قد يكون هذا النوع من الحلول مفيدًا، ولكن في الغالب يُفضّل عدم استخدامه إلا للضرورة، لأنه من الممكن أن يؤثِّر الخطأ على كتلة التطبيق وينتهي بنا المطاف بالحصول على بيانات خاطئة أو غير صالحة، حيث أن المستخدِم لن يعلم بحدوث الخطأ أثناء التشغيل. مثال لنأخذ نفس المثال السابق، حيث عند استعمال هذه الصيغة يصبح شكل الإجراء كالتالي: Sub UsingDefault() On Error Resume Next Dim x As Long, y As Long x = 6 y = 6 / 0 End Sub نلاحظ أنه عند تشغيل الشيفرة بدون التعليمة، فسيُظهر لنا المحرّر رسالة الخطأ، أي أنه يعمل على النوع on Error Go To 0؛ أما عند وضع التعليمة on Error Resume Next فقد تجاهلَ المحرّر سطر الخطأ وأكمل قراءة الشيفرة. عند استخدامنا للتعليمة On Error Resume Next فإن الشيفرة تتجاهل الخطأ الذي نتوقع حدوثه، ولكن ماذا لو كان في الشيفرة أخطاء أخرى لم نتوقعها، هنا ستتجاهلها الشيفرة أيضًا. لذلك يجب أن نُعيد سياق فحص الأخطاء إلى الوضع الافتراضي لذا نستخدم هنا on Error Go To 0 بعد التعليمة التي نريد تجاهل خطأها. مثال آخر ليكن لدينا الإجراء التالي الذي يحدد الخلايا الفارغة ضمن عدة خلايا مُحددة: Sub SelectFormulaCells() Dim x As Long, y As Long On Error Resume Next Selection.SpecialCells(xlCellTypeBlanks).Select On Error GoTo 0 X=7 Y=7/0 End Sub عندما تكون الخلايا المحددة جميعها غير فارغة، فسينتج لدينا خطأ تشغيل، وهنا سيتجاهل المحرّر الخطأ الأول ولكن لا يتجاهل الثاني ويُظهر خطأ تشغيل عند السطر Y=7/0. المعالجة باستخدام ‪on Error Go To [Label] هي طريقة يمكنك من خلالها تحديد ما تريد فعله في حال وجود خطأ في الشيفرة البرمجية والصيغة العامة لها: Sub Test() On Error GoTo Label: this line causes an error (سطر يحتوي على خطأ) Exit Sub Label: code to handle the error End Sub حيث أن: Exit sub: تفيد هنا عدم انتقال الشيفرة للجزء التالي إذا كانت التعليمات سليمةً ولا تحوي أخطاء. label: العنوان الذي ستنتقل إليه الشيفرة عند وجود خطأ في القسم الأول، ويمكن أن يحتوي رسالةً أو تعليمات جديدة. مثال Sub Errorhandler() Dim x As Long, y As Long On Error GoTo ErrMsg X = 12 Y = 20 / 0 Exit Sub ErrMsg: MsgBox "There seems to be an error" End Sub عند حدوث خطأ ما هنا فستُنفذ الأسطر قبل سطر الخطأ، حيث أنه يُسند القيمة 12 إلى المتغيّر x ولكن عند حدوث الخطأ لا تُسند القيمة للمتغيّر y، وبالتالي لا يُنفذ باقي الشيفرة أي أنه أيضًا لا تُسند القيمة إلى z، عندها ينتقل تنفيذ الشيفرة إلى الجزء ErrMsg المعالجة باستخدام on Error Go To -1 يُستخدZم هذا النوع لمسح الخطأ الحالي من ذاكرة VBA بدلًا من تحديد سلوك معيّن، حيث أن ذاكرة VBA تسمح لنا بالتعامل مع خطأ واحد وتحفظه بالذاكرة، إذ لديها مكان واحد لحفظ الأخطاء، وتعمل هذه التعليمة على تفريغ هذا المكان للخطأ التالي إن وُجِد، ومن غير المحتمل أن نستخدِم هذه التعليمة في عملنا. مثال ليكن لدينا جزء من إجراء كالتالي: Sub Errorhandler() Dim x As Long, y As Long, Z As Long, A As Long, B As Long On Error GoTo ErrMsg X = 12 Y = 20 / 0 Z = 30 Exit Sub ErrMsg: MsgBox "There seems to be an error" On Error GoTo ErrMsg2 A = 10 / 2 B = 35 / 0 Exit Sub ErrMsg2: MsgBox "There seems to be an error again" End Sub عند معالجة الخطأ الأول تستمر الشيفرة بتنفيذ ما تحتوي الأسطر التي بعد قسم معالجة الخطأ، ولكن عند الوصول لخطأ ثانٍ فسنحصل على خطأ من أخطاء التشغيل Runtime errors، بحيث لا ينقلنا المحرّر إلى جزء المعالجة الثاني ولهذا يجب علينا تفريغ الذاكرة أولًا وذلك عن طريق التعليمة On Error GoTo -1، عندها ينتقل الإجراء في الخطأ الثاني إلى قسم معالجة الخطأ الثاني ولا يظهر خطأ التشغيل Runtime error، وتصبح الشيفرة كالتالي: Sub Errorhandler() Dim x As Long, y As Long, Z As Long, A As Long, B As Long On Error GoTo ErrMsg X = 12 Y = 20 / 0 Z = 30 Exit Sub ErrMsg: MsgBox "There seems to be an error" On Error GoTo -1 On Error GoTo ErrMsg2 A = 10 / 2 B = 35 / 0 Exit Sub ErrMsg2: MsgBox "There seems to be an error again" End Sub خاتمة إن للأخطاء أهمية كبيرة في عمليات البرمجة فهي تعمل على تصحيح عمل الشيفرة ولكن بطريقة غير مباشرة، حيث تكمن أهميتها في اكتشاف المشاكل والأجزاء المفقودة من التعليمات، كما أن التطبيقات موجّهة لمستخدمين ربّما لا يكون لديهم معرفة بتعديل الأخطاء، أو حتى فهمها لذا يجب علينا أن نُعالج كافة الأخطاء وتقدير احتمالات حدوثها، ووضع حلول مسبقة لها ولهذا تُعَد معالجة الأخطاء من المهام الأساسيّة في عمليّة صناعة البرمجيات، ويجب إتقانها جيدًا لصناعة تطبيقات خالية من العيوب. اقرأ أيضًا الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA التفاعل مع المستخدم في مايكروسوفت إكسل باستخدام VBA العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA
  8. تتفاعل إجراءات الفيجوال بيسك مع المستخدم عن طريق نوعين من النوافذ، وهما: الرسائل الصندوقية 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. خاتمة نلاحظ أن صندوق الرسائل وصندوق الإدخال يسمح لنا بزيادة ضبط التحكم بالعمليات وتوجيه المستخدم بطريقة منظمة ودقيقة، وكلما كانت العمليات دقيقةً ومنظمةً أكثر، حصلنا على بيانات صحيحة ومنظمة ومحميّة أكثر. وبدمج صناديق الإدخال وصناديق الرسائل مع الشروط، فسنحصل على إجراءات تُنجز الكثير من الأعمال بتنظيم وسرعة في آن واحد، وبنتائج تُحقّق لنا الكثير من الفائدة. اقرأ أيضًا الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA
  9. تحدثنا سابقًا عن منهجية كتابة الشيفرات وتعلمنا أن كل شيء في إكسل هو عنصر Object، فالملف عنصر والصفحة عنصر والخلية عنصر، قد يكون العنصر مفردًا أو مجموعةً من العناصر، بحيث يُحدَّد العنصر فيها بذكر اسمه بين إشارتي تنصيص داخل أقواس عنصر المجموعة. نستدعي العناصر من أجل الحصول على خصائصها، إما للإرجاع معلومة أو لتغيير قيمتها، كما لدينا الأمر المباشر Method الذي يعمل على تنفيذ أمر على هذا العنصر بدون إرجاع قيمة. أسماء أهم العناصر في إكسل لدينا العديد من العناصر الأساسية التي سنتعامل معها دومًا في إكسل، وهذه الأسماء معرّفة في فيجوال بيسك Visual Basic، لذا يجب كتابتها بدون أخطاء حتى يتعرّف محرّر اللغة على العنصر بطريقة صحيحة. وتُعَد العناصر التالية من أهم هذه العناصر: Application: هو عنصر البرنامج ويعمل مع كل تطبيقات مايكروسوفت أوفيس. ("workbooks("name: هو عنصر ملف الإكسل وهو مجموعة نحدد فيها الملف الذي سنتعامل معه عن طريق الاسم. ("worksheets("name: هو عنصر مجموعة يضم كل الصفحات الموجودة في ملف الإكسل نفسه، وسنتعامل معه عن طريق الاسم. ("Range("name: هو عنصر مجموعة يضم كل الخلايا الموجودة في صفحة الإكسل، وسنتعامل معه عن طريق موقع الخلية. ThiseWorkbook: هو عنصر الملف الحالي الذي نعمل عليه. Activesheet: هو عنصر الصفحة الحالية ضمن الملف المفتوح. Activecell: هو عنصر الخلية الحالية ضمن الصفحة المفتوحة. Selection: هو عنصر الخلايا المحددة. مثال تطبيقي لدينا البيانات التالية ونريد ترجمة النصوص في عناوين الأعمدة من اللغة العربية إلى اللغة الإنكليزية وبالعكس: نفتح برنامج محرّر الشيفرات VBE ونُنشئ نموذج module من القائمة insert أو من شريط الأدوات، ثم نكتب الإجراء التالي لتحويل النصوص إلى اللغة الإنكليزية بالصيغة التالية: Sub Translate_EN() Range("A1").Value = "Section" Range("B1").Value = "Project code" Range("C1").Value = "Number of zones" End Sub نلاحظ من الاستعلامات أننا استعلمنا عن اسم الخلية من العنصر Range مباشرةً لأننا نُشغّل الشيفرة من نفس الصفحة التي نُنفّذ عليها الإجراء السابق، ونُجري الاستعلام عن قيمتها من الخاصية value ونُغيّر قيمتها إلى القيمة الجديدة. نكتب كل استعلام بسطرٍ منفصلٍ عن الآخر، وعند تشغيل الشيفرة من شريط الأدوات نلاحظ تغيير قيم الخلايا التي تحوي البيانات إلى القيم التي وضعناها في استعلامات الإجراء السابق. وعند تطبيق العكس، أي تحويل النصوص السابقة إلى اللغة العربية نكتب الصيغة السابقة ولكن مع تغيير القيم التي ستُعدل في الخلايا بالصيغة التالية: Sub translate_AR() Range("A1").Value = "القسم" Range("B1").Value = "كود المشروع" Range("C1").Value = "عدد المناطق" End Sub عند تشغيل الإجراء السابق من الممكن أن تواجهنا مشكلة عدم فهم المحرّر للغة العربية ويظهرها بشكل رموز غير مفهومة. وأسباب هذه المشكلة هي إمّا من نظام التشغيل ويندوز لدينا أو من محرّر الشيفرات نفسه ولحل هذه المشكلة من محرّر الشيفرات، نذهب للقائمة Tools ثم نختار الأمر Options، فتظهر لنا نافذة جديدة. نختار التبويب Editor Format ونتأكد أن نوع الخط المحدد هو أحد الخطوط العربية، مثلًا (Courier New (Arabic ثم نضغط موافق. إذا لم تُحل المشكلة سننتقل إلى لوحة التحكم من قائمة ابدأ، ونختار من القائمة اللغة والوقت، ثم نختار تبويب اللغة، بعدها إعدادات اللغة الإدارية، تظهر لنا نافذة جديدة نختار منها تبويب التنسيقات ونتأكد أن تنسيق اللغة من ضمن خيارات اللغة العربية. ثم من نفس النافذة ننتقل إلى التبويب إداري، نضغط على زر تغيير الإعدادات المحلية للنظام ونتأكد من أن اللغة المخصصة للإعدادات المحلية للنظام هي العربية أيضًا. سيطلب النظام إعادة التشغيل بعد هذا التغيير. بعد أن حللنا مشكلة اللغة نُعيد تشغيل الإجراء السابق لنجد أنه يعمل بطريقة صحيحة. لإضافة أزرار تُنفِّذ عملية الترجمة بدون تشغيل المحرّر نتبع الخطوات التالية: من قائمة المطور في برنامج إكسل، نضغط على الأداة إدراج ونختار منها إدراج زر فتظهر لنا نافذة جديدة نختار منها اسم الإجراء الذي نريد من الزر أن يعمل على تنفيذه، ثم نضغط موافق، بعدها ننقر نقرةً مزدوجةً على اسم الزر لنكتب له اسمًا مناسبًا يعبِّر عنه. نكرر العملية السابقة لإضافة زر خاص بالإجراء الثاني. الآن لنُجرب تطبيق استعلامًا يعمل على إخفاء الزر غير المُفعّل، أي عند الضغط على الزر عربي يختفي الزر الآخر وبالعكس. هنا يمكننا كتابة الاستدعاء أو الاستعلام بإحدى الصيغتين التاليتين ولنا حرية الاختيار: ActiveSheet.Buttons("Button1").Visible = False أو الصيغة التالية: Worksheets("VBA").Buttons("Button1").Visible = False وبتطبيق الصيغة السابقة على الإجراءين السابقين نحصل على الصيغ التالية: Sub Translate_EN() Range("A1").Value = "Section" Range("B1").Value = "Project code" Range("C1").Value = "Number of zones" ActiveSheet.Buttons("button1").Visible = True ActiveSheet.Buttons("button2").Visible = False End Sub Sub translate_AR() Range("A1").Value = "القسم" Range("B1").Value = "كود المشروع" Range("C1").Value = "عدد المناطق" ActiveSheet.Buttons("button1").Visible = False ActiveSheet.Buttons("button2").Visible = True End Sub الآن عند الضغط على أي زر ستُنفّذ عملية الترجمة ويختفي الزر الآخر تلقائيًا. المتغيرات يُعرِّف مفهوم الخوارزميات المتغيّر على أنه مخزن للبيانات تكون قيمته ثابتة أو متغيّرة، وذلك حسب الغرض من استعماله في الشيفرة. لدينا مثال من الحياة لتوضيح الفكرة أكثر: لدينا موظف توصيل طلبات طعام في أحد المطاعم، وإجمالي الدخل اليومي لهذا الموظف يعتمد على قيمتين، إحداهما ثابتة وهي الراتب، والثانية متغيّرة وهي الإكراميّة (البقشيش) التي يتقاضاها من الزبائن ولكن هذه القيمة غير محددة فمثلًا أحد الزبائن يدفع 20 وآخر يدفع 50 وآخر لا يدفع أبدًا لذا أصبح إجمالي الراتب اليومي هنا يعادل مرتبه اليومي مضافًا إليه مجموع الإكراميّات خلال اليوم، وهنا الإكراميّة تمثل المتغيّر أي أن المتغيّر قيمته ليست مشروطة برقم ثابت. استخدام المتغيرات تُستخدَم المتغيّرات في لغات البرمجة للأسباب التالية: سهولة كتابة الشيفرات وتعديلها: وفي مثال على ذلك عندما يكون لدينا شيفرة كبيرة ونريد الاستعلام عن قيمةٍ ما ضمنها في أكثر من موضع وليكن 50 موضعًا، وبعد عدة تطويرات للشيفرة أردنا تعديل هذا الاستعلام فيجب علينا أن نعدّله في جميع المواضع، أي لدينا 50 عملية تعديل؛ أمّا إذا كنّا قد عرّفنا متغيّرًا وأسندنا له قيمة تساوي هذا الاستعلام، فسنحتاج إلى تعديل الشيفرة في موضع واحد فقط وهو مكان إسناد القيمة للمتغيّر. تسريع عمل الشيفرة: إن استخدام المتغيّرات يخفف من حجم العمليات ضمن الشيفرة البرمجية وبالتالي تصبح الشيفرة أسرع في عملها. الاستخدام المتعدد للمتغيّر: حيث يمكننا استخدامه في أكثر من مكان ضمن الشيفرة. تعريف المتغيرات في VBA تُعّرف المتغيّرات بالصيغة التالية: Dim name As type Dim هي اختصار لكلمة Dimension والتي تعني حجز جزء من الذاكرة، ويقصد بها هنا أن الاسم التالي يُعبّر عن متغيّر. name: هو اسم اختياري ولكن له عدة شروط: يبدأ بحرف ولا يبدأ برقم أو رمز. لا يحتوي على الرموز التالية (#,$;%;&;!). لا يُسمى بأسماء معرفة في اللغة مثل (IF;SUM). لا يحتوي على فراغات أو نقط. type: يُعبر عن نوع البيانات التي سيكون عليها المتغيّر الذي نعرّفه، مثل: نصي، ورقمي، ومنطقي. فيما يلي جدول يضم جميع أنواع البيانات لدينا والقيم التي يمكن أن تأخذها: حالات تعريف المتغيّرات واستدعائها يُستدعى المتغيّر في الشيفرة عن طريق كتابة اسمه فقط ولكن هنا لدينا حالتان: تعريف متغيّر ضمن الإجراء: يمكننا هنا استدعاء المتغيّر داخل الإجراء فقط ولا يمكن التعرّف عليه ضمن إجراء آخر. Sub test() Dim x As Integer Code End Sub تعريف متغيّر ضمن الإجراء وجعله عامًا: أي جعل المتغيّر قابلًا للاستخدام في أكثر من إجراء وذلك عن طريق وضع الكلمة Public قبل صيغة التعريف الخاصة بالمتغيّر. Sub test() Public Dim x As Integer Code End Sub تعريف المتغيّر خارج الإجراءات: وذلك في بداية الشيفرات، عندها سيكون المتغيّر معرّفًا ضمن كل الإجراءات في نفس النموذج module. Dim x As Integer Sub test() Code End Sub حالات تعيين قيمة متغير إسناد قيمة ثابتة للمتغيّر، مثال: Dim x As Integer X=5 إسناد قيمة متغيّرة مثل خلية مرجعية، وفي مثال على ذلك ما يلي: Dim x As Integer X=Rang("name").value إسناد معادلات للمتغيّر، مثال: Dim x As Single X=15*260/42 خاتمة إن إتقاننا للتعليمات في لغات البرمجة يجعل منّا مبرمجين، ولكن إتقان التعامل مع المتغيّرات يجعلنا مبرمجين محترفين لما للمتغيّرات من أهمية كبيرة في صناعة الشيفرات البرمجية، ولأثرها الكبير على تحسين عمل الشيفرة وتسريعها وسهولة تعديلها، إضافةً إلى تخفيف كمية الاستعلامات في الشيفرة. اقرأ أيضًا مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل. العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA. الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA. التفاعل مع المستخدم في مايكروسوفت إكسل باستخدام VBA.
  10. تستخدِم برامج مايكروسوفت أوفيس لغة البرمجة فيجوال بيسك Visual Basic لإجراء عمليات البرمجة وكتابة الشيفرات، حيث دمجت شركة مايكروسوفت هذه اللغة مع تطبيقات مايكروسوفت أوفيس عام 1994، وكان برنامج مايكروسوفت إكسل أول برنامج تُدمج اللغة معه، حيث دُمج إصدار اللغة الموجهة للتطبيقات فقط Visual Basic for Application ليلائم بيئة عمل تطبيقات الأوفيس ومن هنا جاءت التسمية VBA. يمكننا التعامل مع هذه اللغة والشيفرات البرمجية باستخدام المحرر Visual Basic Editor، وهو برنامج صغير مدمج مع مايكروسوفت أوفيس. حيث نستطيع من خلاله كتابة الشيفرات وتحريرها وتعديلها وتشغيلها، ونستطيع الدخول إليه من خلال قائمة المطوّر Developer إذ يوجد زر محرر الشيفرات، أو من خلال الضغط على الاختصار Ctrl+F11. عند فتح محرر الشيفرات VBE سنجد أنه يعمل من خلال نافذة مستقلة تمامًا عن صفحة الإكسل التي نعمل عليها، أي أننا نستطيع العمل على النافذتين وإجراء التعديلات عليهما في آنٍ واحد. التعرف على الواجهة الرئيسية لمحرر VBE يحتوي المحرر مثل أي تطبيق آخر على العديد من القوائم وأشرطة الأدوات: شريط القوائم الاعتيادي. شريط الأدوات الأساسي، الذي يحتوي على العديد من الأدوات، مثل: أوامر تشغيل وإيقاف الشيفرة، والحفظ، والانتقال إلى إكسل. القائمة project التي يٌعرض من خلالها جميع ملفات الإكسل قيد العمل (المفتوحة) وضمن كل ملف تُعرَض جميع الصفحات التي يحتويها الملف. كما يمكن أن يحتوي على ملف اسمه PERSONAL.XLSB وهو ملف يحتوي على تسجيلات الماكرو التي أضفناها إلى برنامج الإكسل، فإذا أردنا إضافة شيفرات قابلة للتطبيق على كافة ملفات الإكسل على حاسوبنا، فعلينا أن إضافتها على المحرر مباشرةً. القائمة properties: تُظهر خصائص الصفحة المحددة في القائمة project، ويمكننا من خلالها تعديل خصائص الصفحة المحددة، مثل: إخفاء أو إظهار الصفحة من الخاصية visible في نهاية القائمة، وتغيير اسم الصفحة من الخاصية name. وتُعَد هاتان القائمتان من أهم القوائم في المحرر حيث سنتعامل معهما دائمًا. الشيفرة البرمجية وطرق كتابتها في VBA الشيفرة المصدرية Source Code هي قائمة من النصوص التي يمكن قراءتها من قِبل الإنسان، فهي مكتوبة بلغة معينة تُعبّر عن سلسلة من الأوامر بترتيب معين يَسهُل على الحاسوب فهمها وترجمتها، بحيث تؤدي هذه الأوامر إلى تنفيذ غرض محدد، مثل: إجراء عمليات على البيانات، أو إعادة قيم محددة. وتُكتَب الشيفرة البرمجية في إكسل بطريقتين: عن طريق تسجيل ماكرو وهو ما درسناه في الدرس كيفية استخدام الماكرو Macro لأتمتة المهام المتكررة في Microsoft Excel. عن طريق كتابة الشيفرة في المحرر، من خلال إنشاء شيفرة جديدة عن طريق الضغط على "إنشاء نموذج insert model" من شريط الأدوات، ليُفتَح نموذج جديد في القائمة project نكتب فيه الشيفرات، ثم نضغط على زر تشغيل من شريط الأدوات ليعمل المحرر على عرض الإجراءات المسجلة ضمن الشيفرة، ثم نختار الإجراء الذي نريد تشغيله ونضغط الأمر Run الذي يعمل على تشغيل الشيفرة وتنفيذ المهام المكتوبة فيها. كما يمكن تنفيذ الشيفرة السابقة من خلال الضغط على الزر F5 واختيار الإجراء الذي نريد تشغيله. لدينا المثال التالي الذي يوضح تشغيل الشيفرة البرمجية التي تُظهر لنا رسالة تحتوي على نصٍ معيّن: Sub test() Msgbox "hello world” End sub الإجراءات Procedures الإجراء هو مجموعة من الأوامر تهدف مجتمعةً إلى تنفيذ عملية أو مجموعة من العمليات على البيانات، ويقسم إلى نوعين: sub_routine: يقصد به الأعمال الاعتيادية أو الأوامر الاعتيادية، مثل: إضافة سطر، وتغيير قيمة خلية. Function: المعادلات التي نريد تطبيقها مثل معادلات ودوال الإكسل. الفرق الجوهري بين Function وsub_routine sub_routine يُنفذ مجموعة من المهام ولكن لا يعرض القيمة. يمكن استدعاءه من أي مكان داخل البرنامج بعد إنشائه. الصيغة العامة لبنائه: Sub Name() Our code End sub Function تعمل على إجراء المعادلات أو العمليات وتعيد لنا قيمة ضمن أي خلية نحتاج تطبيق الإجراء عليها. يمكن استخدام الشيفرة فيها مثل دالة متعارف عليها في برنامج إكسل ونستطيع تنفيذها ضمن الخلايا. الصيغة العامة لبنائه: Function Name() Our code End Function حيث أن: name: هو الاسم الذي اخترناه للإجراء ويفضل أن يكون الاسم معبرًا عن عمل الإجراء. our code: هي مجموعة الأوامر والتعليمات البرمجية التي تُشكل جسم الإجراء. End sub: دلالة على نهاية الإجراء. مثال ضمن النموذج model السابق نكتب الصيغة التالية: Function square(A as Integer) as Double Square=A*A End Function لسنا بحاجة إلى تشغيل الشيفرة هنا، لأن برنامج إكسل سيتعرف عليه تلقائيًا ويضيفه إلى مجموعة الأوامر لديه على شكل دالة معرفة ضمنه أساسًا، لتوضيح الفكرة لدينا البيانات التالية: لتنفيذ الدالة (الإجراء) السابقة في الخلية B2 نكتب الصيغة التالية: =square(A2) نلاحظ أننا حصلنا على دالة جديدة تعطينا مربع الرقم. منهجية كتابة الشيفرات تتشابه منهجية كتابة الشيفرات بشكل كبير في جميع لغات البرمجة، فالشيفرات تُكتب بنفس المبدأ وتختلف عن بعضها بالمسميات وبعض الأمور البسيطة. في البداية لدينا بعض المصطلحات التي علينا معرفتها: Object: يعبر عن العناصر بمفهومها العام، مثل: سيارة، حاسوب، كتاب. حيث قد يكون عنصرًا رئيسيًا وتتفرع منه عناصر فرعية، وأيضًا تسمى الكائنات. Property: مجموعة من الخصائص التي يملكها العنصر. Collection: مجموعة من العناصر الفرعية تتشارك بمجموعة من الخصائص الرئيسية، وتختلف بخصائص بسيطة تميزها عن بعضها مثل (اسم العنصر). Method: تعبِّر عن عمل يُطبق على العنصر مباشرةً دون إرجاع القيمة. تعتمد منهجية كتابة الشيفرات على التسلسل الهرمي، ولفهم ذلك نأخذ سيارةً لتكون مثالًا عن عنصرObject نريد تطبيق الشيفرة عليه: تمثل السيارة العنصر الرئيسي وله عدة خصائص Property، مثل: اللون، والوزن، والنوع، وتمثل الأبواب عنصرًا فرعيًّا وتُشكِّل مع بعضها مجموعة Collection ولها عدة خصائص أيضًا. للاستعلام عن قيمة خاصية أو التعديل بأسلوب التسلسل الهرمي لدينا عدة طرق: استعلام عن خاصية في العنصر مباشرةً يكون بالصيغة التالية: Object.Property=value بالتطبيق على مثالنا: Car.color=red حيث تمثِّلcar العنصر الرئيسي، في حين النقطة تُعبر عن الاستعلام، وcolor تعبر عن الخاصية، أمّا red فتُعبِّر عن القيمة الناتجة من الاستعلام. استعلام عن خاصية عنصر فرعي من العنصر الرئيسي يكون بالصيغة التالية: Object.Object.Property=value وبالتطبيق على مثالنا: Car.engine.power=400 تُمثل الاستعلام عن قوة المحرك ضمن السيارة، حيث السيارة عنصر رئيسي، والمحرك عنصر فرعي، وقوة المحرك خاصية للعنصر الفرعي. استعلام عن خاصية عنصر ضمن مجموعة ضمن العنصر الرئيسي يكون بالصيغة التالية: Object.Collection('تحديد العنصر عن طريق اسمه ').Property=value وبالتطبيق على مثالنا: Car.wheel("fr").color=black يُمثل الاستعلام عن لون العجلة الأمامية اليمنى ضمن السيارة، حيث السيارة عنصر رئيسي والعجلات مجموعة تابعة للعنصر الرئيسي واللون خاصية للمجموعة. الأمر المباشر، حيث تُنفَذ العملية أو الدالة مباشرةً على العنصر ولا يُرجع أي قيم كما سبق في الطرق السابقة، ويكون بالصيغة التالية: Object.Method وبالتطبيق على مثالنا: Car.stop حيث أن العملية stop تمثل أمرًا مباشرًا يعمل على إيقاف السيارة. لتوضيح ذلك لدينا ملف الإكسل التالي: يحتوي الملف على العديد من الصفحات، ونريد إدخال القيمة 45 ضمن الخلية C2 في الصفحة CODE. لدينا الاستعلام التالي لتنفيذ العملية وهو على الصيغة التالية: Application.workbook("test").worksheets("CODE").Range("C2").value=45 تفسير العناصر في الصيغة: Application: تمثل العنصر الرئيسي وهو برنامج الإكسل. ("workbook("test: تمثل عنصرًا فرعيًّا وهو ملف الإكسل واسم الملف test. ("worksheets("CODE: تمثل عنصرًا فرعيًّا من الملف test وهو عنصر الصفحة CODE. ("Range("C2: تمثل عنصرًا فرعيًّا من الصفحة CODE وهو عنصر الخلية C2. value: تمثل الخاصية التابعة للخلية والتي تمثل قيمة محتواها حيث سنعطيها القيمة 45. يُعَد الاستعلام السابق هو الطريقة الأشمل، ولكنّنا نستطيع أن نختار تسلسلًا آخر وذلك حسب موقعنا من الملف، أي إذا كنا نعمل على الملف السابق وكانت الصفحة الفعّالة لدينا هي الصفحة CODE فإننا نحتاج الجزء التالي من الهرمية السابقة وهو: Range("C2").value=45 أما إذا كانت الصفحة الفعّالة لدينا هي الصفحة CHAR ونفذّنا عليها الاستعلام السابق فإن النتيجة ستكون إسناد القيمة 45 في الخلية C2 في الصفحة CHAR، وللوصول إلى ناتج صحيح علينا العودة بالهرمية السابقة خطوةً إلى الوراء بحيث تصبح الصيغة كالآتي: worksheets("CODE").Range("C2").value=45 خاتمة قد يبدو الأمر معقدًا بعض الشيء في البداية لكن كل ما علينا فعله هو التركيز ومعرفة التسلسل الصحيح للاستعلامات، وهو ما سنتقنه من خلال التمارين لاحقًا. سنتعرّف في الدروس القادمة على المزيد من الأوامر والشيفرات البرمجية في VBA ضمن مايكروسوفت إكسل. اقرأ أيضًا المتغيرات وأهم العناصر في برمجة VBA في مايكروسوفت إكسل. العمليات الشرطية في مايكروسوفت إكسل باستخدام VBA. التعامل مع الأخطاء في VBA ضمن مايكروسوفت إكسل.
  11. تعتبر الصور، أو العناصر المرئية بصورة عامة، عنصرًا أساسيًا وهامًا في أغلب المستندات التي نقوم بإنشائها. وتُستخدم بشكل عام من أجل توضيح فقرة مهمة في المستند. وفي أحيان كثيرة تستخدم كعنصر تزيين لزيادة جذب انتباه القرّاء واهتمامهم. سنتعلّم في هذا الدرس كل ما يتعلّق باستخدام الصور في ميكروسوفت وورد من الإدراج، إلى تطبيق مختلف أوامر التنسيق عليها كإعادة التحجيم، الاقتطاع، تعديل الأنماط، وغيرها. إدراج الصور يُتيح لنا ميكروسوفت وورد إمكانية إدراج الصور من مختلف المصادر والأنواع. إذ يمكن استخدام الصور المحفوظة على جهاز الحاسوب، أو البحث على الإنترنت وإدراج الصور بشكل مباشر دون الحاجة إلى حفظها. كما يمكن إدراج رموز وأيقونات مسبقة الصنع والتي يُشار إليها في وورد بالقصاصات الفنية Clip Art، أو حتّى إدراج لقطات شاشة Screenshot. لإدراج صورة من الجهاز، ببساطة نضع مؤشر الفأرة في الموضع الذي نريد إدراج الصورة فيه، ثم نذهب إلى إدراج صورة Insert > Pictures بشكل افتراضي سيفتح المتصفّح مجلّد الصور Pictures على الجهاز، وبالطبع يمكننا الانتقال إلى مجلّد آخر لاختيار الصورة المرغوبة. نحدّد الصورة ثم ننقر على Insert: سيتم إدراج الصورة عن موضع المؤشر، وسنلاحظ ظهور تبويب تنسيق Format السياقي الذي يحتوي على مجموعة كبيرة من الأدوات لتنسيق الصور، سنأتي إلى ذكرها في فقرة لاحقة من هذا الدرس: أمّا لإدراج صورة من الإنترنت، فبنفس الطريقة نضع مؤشر الكتابة في المكان الذي نريد إدراج الصورة فيه ثم نذهب إلى Insert> Online Pictures للبحث باستخدام متصفّح Bing ندخل الكلمة المفتاحية في حقل البحث ثم ننقر على أيقونة العدسة أو نضغط على مفتاح Enter: نلاحظ في الشريط العلوي لنتائج البحث وجود عدة عوامل تصفية، يمكن استخدامها لتقليص نطاق البحث والحصول على نتائج محدّدة. يمكننا مثلا البحث عن الصور بحجم صغير، أو الصور باللون الأحمر فقط، أو حتّى الصور المنشورة تحت رخصة المشاع الإبداعي فقط. وبعد أن نعثر على الصورة المرغوبة نقوم بتأشيرها والنقر على زر إدراج لإدراجها في المستند. علمًا أنّه يمكن تأشير وإدراج أكثر من صورة دفعة واحدة: وبنفس الطريقة يمكننا إدراج قصاصات فنية Clip Art. ندخل الكلمة المفتاحية في حقل البحث، وعند ظهور النتائج نحدد الخيار قصاصة فنية من عامل التصفية "النوع"، ثم نحدد الصورة المرغوبة وننقر على إدراج: يمكن أيضًا من مربّع الخيار Insert Pictures إدراج الصور المحفوظة على OneDrive، أو من على فيس بوك أو Flickr. وبالتأكيد الربط بهذه الخدمات يتطلّب إدخال معلومات الحساب: البريد الإلكتروني والكلمة السرية. أمّا لإدراج لقطة شاشة، فنبدأ أيضًا بوضع مؤشر الفأرة في المكان الذي نري إدراج لقطة الشاشة فيه، ثم ننقر على أمر Screenshot من تبويب Insert: ستظهر عند النقر النوافذ المفتوحة حاليًا والتي يمكن عمل لقطة شاشة لها، ننقر على النافذة المرغوبة وسيتم إدراج اللقطة على الفور: نلاحظ أنّ لقطة الشاشة يتم عملها لكل شيء داخل إطار النافذة، فإذا رغبنا في أن تكون اللقطة لجزء معيّن من النافذة ننقر على الخيار Screen Clipping: ستعرض آخر نافذة فُتحت قبل تطبيق أمر Screen Clipping، وعندها يمكننا تحديد الجزء المرغوب بالنقر ثم السحب والإفلات لإدراج ذلك الجزء مباشرة: اقتطاع الصور، إعادة تحجيمها، وضغطها يوفّر وورد أداة اقتطاع الصور Crop لقص جزء معيّن من الصورة وإخفائه، وترك الجزء المتبقّي ظاهرًا في المستند. لاقتطاع جزء من الصورة نقوم بتحديدها أولًا لإظهار تبويب Format السياقي، ثم ننقر على أمر Crop من مجموعة Size: سنلاحظ تحوّل مقابض الزوايا إلى شكل زويا سوداء اللون، والمقابض العلوية والسفلية إلى خطوط مستقيمة سوداء أيضًا، ننقر على أحد المقابض ونسحب إلى الداخل لاقتطاع الجزء الذي نريد التخلّص منه: سيتحول الجزء الذي سيتم قصّه إلى لون رمادي غامق، ننقر على مفتاح Enter لإتمام عملية الاقتطاع. يمكننا أيضًا اقتطاع الصورة بشكل معيّن نختاره من قائمة الأشكال وليس بشكل مستطيل فقط. للقيام بذلك ننقر على السهم الصغير تحت أمر Crop نمرر مؤشر الفأرة فوق الخيار Crop to Shape ثم ننقر على الشكل المرغوب: وإذا رغبنا في اقتطاع الصورة بنسبة طول إلى عرض معيّنة، نختار أحد الخيارات في قائمة Aspect Ratio: أمّا إعادة تحجيم الصور فتتم أيضًا من الخيارات في مجموعة Size. إذا كان حجم الصورة التي قمنا بإدراجها كبيرًا بحيث يتعدّى عرض الصفحة، سيقوم وورد بشكل افتراضي بإعادة تحجيمها لتلائم عرض المنطقة بين الهوامش. على سبيل المثال، إذا قمنا بتشغيل مربّع الحوار Layout للصورة المدرجة الموضّحة، سنلاحظ أنّ حجمها الأصلي Original Size أكبر من الحجم المعروض في المستند Absolute Size. أي أنّه تم تصغير الصورة الكبيرة لتناسب عرض الصفحة: وللتحكم في حجم الصورة يدويًا، نستخدم الخيارين Shape Height وShape Width في مجموعة Size. ننقر على السهم العلوي لزيادة الطول/العرض، أو السهم السفلي لإنقاص الطول/العرض. أو لنكون أكثر تحديدًا ندخل البعد المرغوب في الحقل: عندما نقوم بزيادة أو إنقاص طول الصورة مثلًا، سنلاحظ أنّ العرض يتغيّر أيضًا نسبة لتلك الزيادة أو النقصان، والسبب هو أنّ الخيار Lock Aspect Ratio مؤشر بشكل افتراضي للحفاظ على الأبعاد متوازنة: ويمكننا دائمًا إلغاء تأشير هذا الخيار إذا رغبنا في تغيير طول الصورة أوعرضها بشكل مستقل. الطريقة الأخرى لإعادة تحجيم الصورة هي باستخدام المقابض. نستخدم مقابض الزاوية لزيادة/إنقاص الطول والعرض معًا وبشكل متوازن، أما المقابض الجانبية والعلوية/السفلية فنستخدمها لزيادة/إنقاص كل بعد على حِدة: من الخيارات المفيدة التي يوفّرها وورد هو ضغط الصور Compress لتقليل حجمها وبالتالي تقليل حجم المستند عند الحفظ. فمن البديهي أنّ الصور ذات الحجم الكبير تؤدي إلى زيادة حجم المستند، وهذا الأمر غير محبّذ إذا كان المستند يحتوي على كثير من الصور ورغبنا في مشاركته مع الآخرين. كما أنّ الصور ذات الحجم الكبير يمكن أن تجعل العمل على المستند بطيئًا إذا احتوى على الكثير منها. على سبيل المثال، المستند أدناه يشتمل على صفحة واحدة مدرج فيها صورة بحجم كبير: فإذا قمنا بحفظ الملف سنلاحظ أنّ حجمه يزيد على 300 كيلوبايت، وهذا الحجم كبير بالنسبة لمستند من صفحة واحدة فقط: لضغط هذه الصورة نحددها ثم ننقر على أمر Compress Pictures من تبويب تنسيق السياقي: سيُفتح مربع الحوار Compress Pictures الذي يحتوي على مجموعة خيارات لتقليل حجم الصورة: سيكون الخيار Apply only to this picture مؤشرًا بشكل افتراضي، ويمكننا تركه كما هو إذا كنا نريد ضغط الصورة الحالية فقط، أمّا إذا كانت لدينا الكثير من الصور في المستند ونريد ضغطها دفعة واحدة فنلغي تأشير هذا الخيار. الخيار Delete cropped areas of picture أيضًا مؤشر بشكل افتراضي. وهو خيار مفيد يقوم بحذف الأجزاء المقتطعة من الصور. فكما ذكرنا في فقرة سابقة أنّه عند اقتطاع الصورة يتم إخفاء الجزء غير المرغوب منها وليس حذفه، أي أنّه سيبقى محفوظًا على المستند ويمكن استرجاعه عند الحاجة بتحديد الصورة والنقر على أمر Crop. فلحذف تلك الأجزاء المقتطعة نهائيًا وتقليص حجم المستند نبقى هذا الخيار مؤشرًا. بعد ذلك ننتقل إلى خيارات الضغط ونحدد الخيار المرغوب: Print: لحفظ الصورة بحجم كبير لأغراض الطباعة وغيرها. Screen: لحفظ الصورة بحجم متوسط لأغراض العرض على صفحات الويب أو على أجهزة العرض على الشاشة. E-mail: لحفظ الصورة بحجم صغير لغرض المشاركة. سنحدد الخيار Email ونحفظ المستند باسم جديد لنلاحظ الفرق في الحجم: فرق كبير بين 307 كب و36 كب! خاتمة لقد غطّينا لحد الآن كيفية إدراج الصور من مختلف المصادر والأنواع بالإضافة إلى اقتطاعها والتحكّم في أبعادها وأحجامها عند الحفظ. في الجزء الثاني من هذا الدرس سنكمل الشرح حول استخدام المزيد من خيارات تبويب Format لتخصيص مظهر الصورة وموضعها داخل المستند.
  12. يُعتبر إطار العمل دوت نت NET Framework. من شركة مايكروسوفت من أُطر العمل المشهورة جدًّا، فمنذ الإصدار التجريبي الأوّل أواخر عام 2000 وحتى الإصدار 4.6 حاليًّا شهد تحسينات كبيرة جعلت من لغات البرمجة التي تعمل بالاعتماد عليه لغات برمجة غنيّة ومعاصرة. يُعتبر إطار العمل دوت نت الكيان الأساسيّ التي تعتمد عليه التطبيقات في تنفيذ المهام المطلوبة منها. فهو يوفّر الوسائل اللازمة لوصول مثل هذه التطبيقات إلى الملفات والتعامل مع HTTP والوصول والتعامل مع قواعد البيانات وغيرها من المهام الأساسيّة التي قد يحتاجها أيّ تطبيق حاسوبيّ. صُمّم إطار العمل دوت نت منذ البداية لكي يعمل على أيّ نظام تشغيل أو أيّ عتاد صلب متاح، وعلى الرغم من أنّ مايكروسوفت لم تدعم تشغيل إطار العمل هذا سوى على أنظمة تشغيل ويندوز، إلّا أنّه جرت محاولات مستقلة لنقله إلى لينكس عن طريق مشروع mono مفتوح المصدر. وقد نجحت هذه المحاولة بصورة لا بأس بها واستمر المشروع لعدّة سنوات، ثمّ توّج بنقله إلى أنظمة تشغيل الأجهزة الذكيّة وهذا ما قامت به شركة Xamarin التي استحوذت عليها شركة مايكروسوفت قبل أقل من شهر من الآن، حيث تمكّنت Xamarin من ذلك بالاعتماد على مشروع mono مفتوح المصدر. تُعتبر لغة سي شارب #C لغة البرمجة الأساسيّة ضمن إطار العمل دوت نت، وقد واكبْتُ تطوّرها منذ الإصدار الأوّل وحتى اليوم. ومما لا شكّ فيه أنّها قد شهدت تحسينات كبيرة ومزايا مفيدة تجمع بين القوّة والمرونة لتطوير طيف واسع من التطبيقات البرمجيّة تشمل تطبيقات سطح المكتب Desktop Applications وتطبيقات ويب باستخدام ASP.NET وتطبيقات خدمات ويب مثل WCF (اختصار لـ Windows Communication Foundation) وحتى تطبيقات الأجهزة الذكيّة التي تعمل على نظام تشغيل Windows Phone أو التي تعمل على باقي الأنظمة مثل Android و iOS من خلال منصّة Xamarin. لن ندخل في التفاصيل الدقيقة لمعمارية إطار العمل دوت نت، وذلك لجعل هذه السلسلة مبسّطة قدر المستطاع. يكفيك أن تعلم أنّ إطار العمل هذا يتكوّن من قسمين رئيسيّين: بيئة التنفيذ المشتركة Common Language Runtime وتُدعى اختصارًا CLR. مكتبة أصناف إطار العمل Framework Class Library وتُدعى اختصارًا FCL. حول هذه السلسلة سنتعلّم في هذه السلسلة كتابة تطبيقات باستخدام لغة سي شارب #C بأسلوب مبسّط وسلس وذلك من خلال تطبيقات موجّه الأوامر Console Applications، وسبب تفضيلي لهذه التطبيقات عن سواها، هو أنّه تسمح لك بالتركيز على تعلّم اللغة نفسها دون تشتيت الانتباه إلى العديد من الجوانب التي تتطلّبها أنواع التطبيقات الأخرى كتطبيقات سطح المكتب لويندوز على سبيل المثال، رغم أنّنا سنتحدّث القليل عنها في الدرس الأخير. ما الذي أحتاجه لكي أستفيد من هذه السلسلة؟ تفترض هذه السلسلة أنّك تمتلك معرفة عامّة بأساسيّات البرمجة. ستحتاج أيضًا إلى حاسوب ذو نظام تشغيل ويندوز 7.1 أو أعلى. بالإضافة إلى تحميل وتنصيب بيئة التطوير Visual Studio 2015 Community المجّانيّة. كما يمكنك تجريب معظم البرامج الموجودة في هذه السلسلة حتى ولو لم يكن لديك نظام تشغيل ويندوز أصلًا عن طريق موقع NET Fiddle. ولكن لن تستفيد بهذه الطريقة من المزايا الهامّة التي يوفّرها لك Visual Studio. الأقسام الأساسية لإطار العمل دوت نت سنتحدّث قليلًا عن القسمين الأساسيّين لإطار العمل دوت نت بالإضافة إلى مترجم سي شارب C# Compiler، لكي تتكوّن لدينا الصورة الواضحة لآليّة عمل تطبيقات دوت نت. بيئة التنفيذ المشتركة CLR هي البيئة التي تنفّذ البرامج المكتوبة بلغات دوت نت، وتشكّل حاضنةً لهذه البرامج من خلال عزلها عن العتاد الصلب hardware للجهاز التي تعمل عليه. تستطيع تشبيهها بالآلة الافتراضيّة Virtual Machine الخاصّة بلغة Java. وهي مسؤولة عن إدارة المصادر التي يحتاجها البرنامج في عمله، وفي مقدّمتها الذاكرة. حيث تعمل هذه البيئة على إدارة عمليّات إنشاء الكائنات التي يحتاجها البرنامج، ومن ثمّ التخلّص منها عند انتفاء الحاجة إليها. تتوفّر CLR بشكل افتراضيّ على معظم أنظمة تشغيل ويندوز (مع الاختلاف بالإصدارات) مثل Windows XP و Windows 7 و Windows 8 و Windows 10 و Windows Phone و Windows Server (بمعظم إصداراته). مكتبة أصناف إطار العمل FCL تحتوي هذه المكتبة الضخمة على آلاف الأصناف classes التي تسمح لنا بإنجاز أيّ مهمّة تخطر ببالنا. فمن التعامل مع النصوص والتعابير النظاميّة regular expressions إلى التعامل مع الاتصالات الشبكيّة network communications والتعامل مع بروتوكولات الانترنت الشهيرة مثل HTTP وFTP وغيرها، والوصول إلى قواعد البيانات والتعامل معها. تتكوّن FCL بدورها من عدّة مكتبات فرعيّة، فهناك مكتبة تساعدنا على تطوير تطبيقات سطح المكتب لويندوز، وأخرى تسمح لنا بتطوير تطبيقات ويب باستخدام تقنيّة ASP.NET، ومكتبة تسمح بإنشاء تطبيقات WCF وهكذا. بمعنى أنّه لن تحتاج إلى التعامل مع كامل مكتبة FCL بل ستنتقي منها ما تحتاجه بحسب متطلّبات عملك، فإذا كنت مطوّر ويب مثلًا فستهتم بالمكتبة الفرعيّة التي تسمح بإنشاء تطبيقات ويب باستخدام ASP.NET. ومن الجدير ذكره أنّ مكتبة FCL تحتوي أيضًا على مكتبة فرعيّة اسمها مكتبة الأصناف الأساسيّة Base Class Library أو اختصارًا BCL، تحتوي هذه المكتبة على الأصناف الأساسيّة التي تعمل مع جميع التطبيقات المنشأة باستخدام المكتبات الأخرى بصرف النظر عن نوعها. مترجم سي شارب C# Compiler لكي نتمكّن من تنفيذ البرامج التي نكتبها باستخدام سي شارب، نحتاج إلى مترجم سي شارب C# Compiler. يكون هذا المترجم مضمّنًا بشكل افتراضيّ مع إطار العمل دون نت. يعمل المترجم على تحويل التعليمات البرمجيّة الموجودة في الشيفرة والمكتوبة بلغة سي شارب إلى تعليمات برمجيّة مكتوبة بلغة تُعرف بلغة مايكروسوفت الوسيطيّة Microsoft Intermediate Language أو اختصارًا MSIL. تُعتبر هذه اللغة الوسيطيّة منخفضة المستوى، وهي شبيهة بلغة Assembly الشهيرة. في الواقع ستعمل بيئة التنفيذ المشتركة CLR على تنفيذ التعليمات المكتوبة بلغة MSIL. فبيئة CLR لا تحتاج أن تعرف لغة البرمجة التي كُتب بها البرنامج أصلًا وهي الميزة الأساسيّة التي تسمح للمبرمج الكتابة بأي لغة برمجة تدعم الدوت نت. فطالما أنّ لغة البرمجة تمتلك مترجمًا متوافقًا مع MSIL فلا مشكلة. وهذا ما جرى مع لغات برمجة أخرى مثل Visual Basic.NET ولغة #F وحتى لغة البايثون Python من خلال IronPython. انظر الشكل التوضيحي التالي: كيف ينفذ البرنامج باستخدام CLR؟ توضع الشيفرة البرمجيّة المكتوبة بلغة سي شارب عادةً في ملفات منفصلة لكلٍّ منها الامتداد cs، يعمل المترجم بعد ذلك على قراءة هذه الملفات التي تسمّى بملفّات النص المصدريّ source code files وتحويل التعليمات البرمجيّة المكتوبة بسي شارب إلى لغة MSIL وجعلها ضمن ملف تنفيذي (الملف MyApp.exe في الشكل السابق). عند تنفيذ البرنامج تقرأ CLR التعليمات البرمجيّة الموجودة ضمن الملف التنفيذي والتي تكون بلغة MSIL وتعمل على تنفيذها عن طريق تحويلها إلى تعليمات برمجيّة أصليّة native code مخصّصة لمعالج الحاسوب الذي يعمل عليه البرنامج حاليًّا. يجري كلّ هذا العمل بسرعة كبيرة جدًّا فعملية التحويل إلى native code لا تجري سوى أوّل مرّة فقط، وبعد ذلك يستفيد البرنامج من السرعة الكبيرة التي توفّرها هذه التعليمات الأصليّة عند التنفيذ. يُفسّر السيناريو السابق سبب قابليّة عمل برامج دوت نت على أيّ نظام تشغيل أو عتاد حاسوبي. فعمليّة كتابة الشيفرة البرمجيّة بأي لغة دوت نت ومن ثمّ تحويلها إلى لغة مايكروسوفت الوسيطيّة MSIL منفصلة تمامًا عن نظام التشغيل وعن العتاد الحاسوبي الذي سيعمل عليه البرنامج. ولعلّ من أبرز الأمثلة على ذلك البرامج المكتوبة بلغة سي شارب والموجّهة إلى أنظمة تشغيل الأجهزة الذكيّة عن طريق منصة Xamarin التي ذكرناها قبل قليل. فالعمل الأساسي الذي قامت به هذه الشركة هو انتاج بيئة CLR منفصلة لكلّ نظام تشغيل مثل Android و iOS مما يسمح للبرامج المكتوبة بلغة سي شارب الخروج من "قمقم" ويندوز إن صحّ التعبير. وأكثر من ذلك، فقد أنتجت مايكروسوفت مؤخّرًا نسخة خاصّة وخفيفة من نظام التشغيل Windows 10 أسمته Windows 10 IoT وهو مخصّص لإنترنت الأشياء. يمكن تنصيب نظام التشغيل هذا بكلّ سلاسة ويُسر على جهاز Raspberry Pi المشهور والموجّه لتطبيقات إنترنت الأشياء، وهذا يعني فتح المجال أمام التطبيقات المكتوبة باستخدام لغة سي شارب للعمل على هذا الجهاز وبالتالي الدخول في هذا المجال المهم والواعد. الخلاصة لغة سي شارب هي لغة عصريّة ولها مستقبل واعد في قطاع الأعمال. فهي اللغة الأساسيّة المستخدمة لكتابة مختلف أنواع التطبيقات الحاسوبيّة ضمن إطار العمل دوت نت. بالإضافة إلى أنّها سلسة وذات بنية مألوفة، ولكن تحتاج إلى قليل من الصبر في تعلّمها. سنتناول في الدروس اللّاحقة كيفيّة كتابة برامج بسيطة ولكن متدرّجة في الصعوبة حتى تكون ملمًّا بأساسيّات هذه اللغة الرائعة.
  13. رغم أنّ شركة مايكروسوفت كانت تعتمد بشكل كلّي على نماذج ويب ASP.NET Forms في تطوير تطبيقات الويب، إلّا أنّه وفي الأعوام القليلة الماضيّة بدا أنّ تركيز الشركة منصبًّا بشكل واضح على تطوير تطبيقات الويب باستخدام ASP.NET MVC. وعلى الرغم مع عدم تخلّي عن تقنيّة Forms إلّا أنّ دورها على ما يبدو يتضاءل يومًا بعد يوم. طرحت مايكروسوفت هذا الامتحان للمرّة الأولى عام 2012. وباعتبار أنّ مصدر هذه التقنيّة هو مايكروسوفت فلا غنى لأيّ مطوّر عن الحصول على هذا الامتحان والنجاح فيه كوثيقة لإثبات المعرفة والمقدرة أمّام أيّ شركة أو جهة يطمح بالعمل لديها. فالشركات التقنيّة عمومًا تفضّل أصحاب الشهادات المعتمدة من كبريات الشركات العالميّة في توظيف الكادر للعمل لديها. وفي الحقيقة أنّه حتى بالنسبة للموظّفين الحاليين فإنّهم يفضّلون الحصول على مثل هكذا شهادات لتحسين وضعهم الحالي في شركاتهم. نبذة عن الامتحان يقيس هذا الامتحان مهاراتك كمطوّر ويب في استخدام هذه التقنيّة الرائعة بشكل صحيح وسليم. حيث أنّ هناك خمسة مجالات رئيسيّة يغطيها الامتحان. تنصح مايكروسوفت أن يتقدّم للامتحان كلّ مطوّر له خبرة برمجيّة عمرها خمسة سنوات أو ثلاثة أعوام في مجال الأعمال باستخدام هذه التقنيّة. يكلّف الامتحان حاليًّا مبلغًا قدره 150 دولارًا أمريكيًّا ويمكنك أن تحجز لإجراء هذا الامتحان عن طريق الإنترنت وذلك في أيّ مركز معتمد من مايكروسوفت. يمكنك مراجعة الصفحة الرسميّة للامتحان. يجري الامتحان ضمن المركز المعتمد في توقيت مُحدّد تلتزم به. تكون القاعة التي سيجري فيها الامتحان مراقبة، وبعد أن يقوم الموظّف المختص بتحميل أسئلة الامتحان على الحاسوب يبدأ التوقيت. من الضروري التنبّه إلى أنّ النقاط الواردة في هذا المقال لا تمثّل بالضرورة المصدر الوحيد لأسئلة الامتحان، ويجب الانتباه أيضًا إلى وجود بعض المواقع التي تزوّدك بأسئلة مسرّبة لامتحانات سابقة مع الحلول لهذه الأسئلة، وفي الغالب تكون مدفوعة وليست مجّانيّة. المشكلة هنا (بصرف النظر عن كونها مسألة غير قانونيّة) في أنّه قد تكون هذه الأسئلة غير صحيحة بمعنى أنّ مصدرها ليس امتحانات مايكروسوفت، وهناك احتمال أن يكون مصدرها امتحانات مايكروسوفت بالفعل ولكن قد تكون الإجابات المقترحة لها خاطئة، وفي جميع الأحوال لا تستطيع أن تضمن أن تتكرّر هذه الأسئلة في امتحانات قادمة. ومن الجدير ذكره أنّ هذا الامتحان يدخل ضمن متطلّبات الحصول على عدّة شهادات تمنحها مايكروسوفت أيضًا (تتطلّب كلّ شهادة عادةً النجاح في أكثر من امتحان)، فهو يدخل مثلًا ضمن شهادة مايكروسوفت في تطوير تطبيقات شير بوينت MCSD: SharePoint Applications. وشهادة مايكروسوفت في تطوير تطبيقات ويب MCSD: Web Applications ويجب ملاحظة أنّه اعتبارًا من 30 أبريل (نيسان) عام 2014 أصبحت أسئلة الامتحان تغطّي Visual Studio 2013 مع MVC5 بالإضافة إلى التحديثات الخاصة بـ Microsoft Azure. على ماذا سأحصل بعد النجاح في الامتحان؟ بعد النجاح في الامتحان ستحصل على وثيقة نجاح موقّعة من المدير التنفيذي لمايكروسوفت تحمل اسمك، واسم الامتحان الذي اجتزته بدون ذكر المعدّل الّذي حصلت عليه. وهناك شكلان لهذه الوثيقة: إلكترونيّ مجّاني، ومطبوع غير مجّاني. يمكنك تحميل النسخة الإلكترونيّة من موقع يتبع مايكروسوفت مخصّص لهذا الغرض، كما يمكنك طلب النسخة المطبوعة من هذه الشهادة لتصلك بالبريد لقاء رسمٍ رمزيّ. الملفت في الموضوع أنّ مايكروسوفت تسمح لك بمشاركة النسخة الإلكترونيّة مع أيّ جهة عن طريق رابط مخصّص لهذا الغرض، مما يسمح لك بإثبات امتلاكك لهذه الوثيقة بيسر وموثوقيّة عاليّة. فعلى سبيل المثال لا الحصر، يتطلّب موقع upwork.com الشهير للعمل المستقل مثل هذا الإثبات، في حال صرّحت حول امتلاكك لمثل هذه الشهادات. المجالات الرئيسيّة لأسئلة الامتحان فيما يلي المجالات الرئيسيّة للامتحان، والنسبة المئويّة لمساهمة كلّ منها في أسئلة الامتحان: تصميم بنية التطبيق (من 15% إلى 20%) تصميم واجهة المستخدم (من 20% إلى 25%) تطوير تجربة المستخدم (من 15% إلى 20%) اصطياد الأخطاء وتنقيح تطبيقات الويب (من 20% إلى 25%) تصميم وتطبيق النواحي الأمنيّة (من 20% إلى 25%) 1. تصميم بنية التطبيق ستحتاج في هذا المجال إلى معرفة كيفيّة التخطيط لطبقات layers التطبيق وذلك عن طريق التخطيط لفصل الأجزاء الرئيسيّة concerns main والاستخدام المناسب للنماذج models والمشاهد views والمتحكّمات controllers. والاختيار بين المعالجة من طرف العميل client-side أو من طرف الخادم server-side، والتخطيط من أجل قابليّة التوسّع scalability. كما ستحتاج لمعرفة كيفيّة تصميم تطبيق موزّع distributed application، وما يتضمّن ذلك من تصميم تطبيقات هجينة hybrid applications، والتخطيط والتنفيذ لدورة حياة تطبيق سحابيّ على Azure، وإعداد إدارة الحالة state management، وتصميم استراتيجيّة خاصّة باستخدام الذاكرة المؤقّتة cache والـ WebSockets، وتصميم وحدات (HTTP (HTTP Modules ومعالجات (HTTP (HTTP Handlers. 2. تصميم واجهة المستخدم يتطلّب هذا المجال تصميم واجهة مستخدم UI على تطبيق ويب ودراسة سلوكها، واستجابة التطبيق للمزايا الخاصّة بكلّ متصفّح عن طريق ميّزة تحديد نوع المتصفّح، والتخطيط لإنشاء تصميم متجاوب responsive design. 3. تطوير تجربة المستخدم في هذا المجال يجب على المتقدّم أن يكون ملمًّا بكيفيّة التخطيط لقابليّة الوصول والأمثَلَة لمحرّكات البحث SEO، والتخطيط لتوطين (ترجمة وما إلى ذلك) التّطبيق localization، وتصميم وتطبيق المتحكّمات controllers وطرائق action ضمن تطبيق MVC، وتصميم وتطبيق المسالك routes، والتحكّم بسلوك التطبيق باستخدام نقاط التوسعة extensibility points الخاصّة بـ MVC، والتقليل من عرض الحزمة المستخدم عن طريق ميزّتي التحزيم bundle والتصغير minify واستخدام شبكات توصيل المحتوى CDN. 4. اصطياد الأخطاء وتنقيح تطبيقات الويب بالنسبة إلى هذا المجال، يتوجّب معرفة كيفيّة منع الأخطاء أثناء التشغيل واصطيادها، وتصميم استراتيجيّة متكاملة لمعالجة الاستثناءات exception handling، وإجراء اختبارات ممنهجة لتطبيق ويب عن طريق إنشاء وتشغيل وحدات الاختبار unit tests وإنشاء كائنات اختبار زائفة mocks، وتنقيح تطبيق الويب ضمن عدّة متصفّحات، واستخدام محاكيات الأجهزة المحمولة mobile emulators، وتنقيح تطبيق Azure عن طريق جمع معلومات تشخيصيّة باستخدام الواجهة السحابيّة لأدوات تنقيح (Azure (Azure Diagnostics API، وغيرها من التقنيّات التي تتيحها Windows Azure لتنقيح الأخطاء. 5. تصميم وتطبيق النواحي الأمنية ستحتاج إلى معرفة كيفيّة إعداد وضبط عمليّة الاستيثاق authentication للمستخدمين، والاختيار بين الاستيثاق باستخدام ويندوز أو النماذج Forms أو الاستيثاق المخصّص، وضبط وإعداد التخويل authorization للمستخدمين بواسطة الأدوار roles، وإنشاء مزوّد أدوار مخصّص custom membership provider، وتصميم وتطبيق التوثيق باستخدام claims وذلك عبر مستودعات federated identity stores، وإدارة سلامة البيانات data integrity، وإنشاء موقع محميّ باستخدام ASP.NET وذلك بتطبيق شهادات SSL، وتشفير كلمات المرور باستخدام الحماية الإضافيّة salt password قبل تخزينها في قاعدة البيانات، وترميز المحتوى في HTML لمنع هجمات cross-site، ومنع هجمات حقن (SQL (SQL Injection بتمرير الوسائط إلى الاستعلام بشكل كائنيّ وليس بشكل نصّي مباشر، ومنع الهجمات من النوع XSRF.