يمكننا تنفيذ الأوامر التي تنفذها الأدوات على برنامج إكسل باستخدام الشيفرات البرمجية، مثل إضافة صفحات وتنسيق الخطوط والخلايا والعديد من العمليات، وفيما يلي أهم الأوامر التي نستخدمها في إنشاء التطبيقات:
- إضافة صفحة عمل جديدة.
- تحديد الخلايا.
- عمليتا النسخ واللصق.
- إلغاء تحديد الخلايا المنسوخة.
- عمليتا القص واللصق.
- إسناد قيمة إلى خلية معينة.
إضافة صفحة عمل جديدة
نُضيف صفحات جديدةً عن طريق التعليمة التالية:
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:=
، كما نجد أن الخلية المنسوخة يحيط بها التحديد حتى بعد الانتهاء من تنفيذ الشيفرة بالكامل، لذا فعلينا إلغاء التحديد، وهو ما سنتعلمه لاحقًا.
نعيد كتابة الإجراء الخاص بالمثال السابق بدون التعليمة 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
خاتمة
تُعَد هذه الأوامر -رغم صغر حجمها وأفعالها البسيطة- من الركائز الأساسية والمهمة في صناعة برمجيات الإكسل عن طريق الفيجوال بيسك، بغض النظر عن حجم البرنامج وعدد العمليات التي يؤديها بشكلٍ دائم، لذا لا بد لنا من فهم عملها بطريقة صحيحة، ومعرفة خصائصها وآلية تكوين أجزاء الشيفرات البرمجية عن طريقها.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.