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

نحتاج في كثير من الأحيان عند تنفيذ برنامج باستخدام برمجة VBA ضمن إكسل إلى الإشارة إلى مراجع References معينة في VBA Excel بأسلوب معين تفرضه معطيات البرنامج. يمكن أن يكون المرجع واحدًا أو أكثر من العناصر التالية:

  • الخلايا
  • الصفوف
  • الأعمدة
  • كتل الخلايا المتجاورة أو غير المتجاورة في ورقة عمل واحدة.
  • مجال ثلاثي الأبعاد (3D Range) المجال ثلاثي الأبعاد هو المجال الذي يشير ضمنه إلى مجالات في أكثر من ورقة.

الإشارة إلى مرجع من خلية واحدة في VBA

باستخدام برمجة VBA في إكسل يمكن الإشارة إلى مرجع مؤلف من خلية واحدة بأكثر من طريقة قد يلزم استخدام إحداها دون أخرى أثناء تنفيذ البرنامج، سنذكر بعض هذه الطرائق.

باستخدام الخاصية Cells

ترجع هذه الخاصية كائن مجال يمثل خلية واحدة. وتستخدم للإشارة إلى خلية مفردة بدلالة الرقمين الذين يدلان على ترتيب الصف والعمود في ورقة العمل بين هلالين تفصل بينهما علامة الفاصلة "," كما يلي:

Worksheets("Sheet1").Cells(دليل الصف, رقم العمود)

يمكن أن يكون دليل العمود الرقم الذي يدل على ترتيبه بين الأعمدة ابتداءً من العمود A. أو أن يكون دليل العمود هو الحرف اللاتيني الذي يمثل اسم العمود بين علامتي اقتباس:

مثال: تنفيذ أمر تحديد الخلية B3 باستخدام دليل اسم العمود:

Worksheets("Sheet1").Cells(3, "B").Select

ولتنفيذ نفس الأمر باستخدام دليل ترتيب العمود (2):

Worksheets("Sheet1").Cells(3, 2).Select

تفيد الخاصية Cells خصوصًا في الحلقات التي يكون فيها دليل الصف أو العمود متغيرًا، إذ يمكن كتابة الدليلين باستخدام متغير:

Cells(i, j).Select

مثال: في الإجراء التالي ينتقل التحديد إلى كل خلية في الجدول A1:F5 باستخدام حلقة تكرارية، وتتلون الخلية بحسب رقم الصف. لاحظ الوقت الطويل الذي يستغرقه البرنامج للانتقال والتنسيق، سنستعرض لاحقًا أساليب أكثر سرعة في التنفيذ. يمكن مراجعة المقال استخدام أدوات مايكروسوفت إكسل لتنسيق الخلايا عن طريق الشيفرات VBA والمقال الحلقات التكرارية في مايكروسوفت إكسل باستخدام VBA.

Sub CellsLoop()

001-انتقال-تحديد-الخلايا-في-جدول-وتلوينها.gif

أضفنا إشارة Breakpoint إلى بعض اﻷسطر، ومهمة هذه اﻹشارة هي إيقاف تنفيذ الشيفرة البرمجية VBA مؤقتًا إلى حين إعطاء الأمر يدويًا بمتابعة تنفيذ البرنامج من حيث توقف. تستخدم هذه اﻹشارة لمتابعة أداء البرنامج خطوة بخطوة عند السطر المحدد للتحقق من صحة سير عمل البرنامج، وفي هذه الحالة هنا وضعنا إشارة Breakpoint في نهاية كلا الحلقتين For ليتوقف البرنامج مؤقتًا بعد إكمال دورة حلقة واحدة، إذ نلاحظ أننا حددنا السطر المطلوب ثم ذهبنا إلى القائمة Debug > ToggleBreakpoint، ونستطيع إضافة أي نقاط توقف أخرى بالنقر بجانب الأسطر المطلوب التوقف عندها كما هو موضح بالصورة السابقة.

ولمتابعة تنفيذ البرنامج يلزم إما الضغط على الزر F5 أو النقر على زر Run لمتابعة تنفيذ الإجراء. لفهم الأساسيات أكثر اقرأ المقال مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل.

كما يمكن وضع إشارة Breakpoint بمجرد النقر في المنطقة الرمادية في المكان الذي تظهر فيه إشارة الدائرة بجوار السطر الذي سيتوقف تنفيذ البرنامج عنده.

002-وضع-إشارة-Breakpoint.png

باستخدام الخاصية Range في نمط المرجع A1

ويكون ذلك بكتابة اسم الخلية وفق النمط A1 بين علامتي اقتباس في الخاصية Range.

Worksheets("Sheet1").Range("اسم الخلية وفق النمط A1")

مثال: تنفيذ أمر تحديد الخلية B3 باستخدام الخاصية Range وفق نمط المرجع A1:

Worksheets("Sheet1").Range("B3").Select

ملاحظة: يستخدم الإكسل افتراضيًا نمط المرجع A1، والذي يشير إلى الأعمدة بواسطة أحرف (من A إلى XFD) وإلى الصفوف بواسطة أرقام (من 1 إلى 1048576) . حيث يشار إلى خلية ما في VBA Excel بإدخال حرف العمود متبوعًا برقم الصف بين علامتي اقتباس.

باستخدام الخاصية Range والخاصية Cells

يجب كتابة خلية البداية وخلية النهاية للمجال المطلوب بين هلالين باستخدام الخاصية Cells يفصل بينها فاصلة ","، فإذا كان المجال خلية واحدة، كانت خلية البداية هي نفسها خلية النهاية.

Worksheets("Sheet1").Range(Cells(رقم صف خلية البداية, رقم عمود خلية البداية), Cells(رقم صف خلية البداية, رقم عمود خلية البداية))

قد يكون المجال متغير الطول أثناء تنفيذ الإجراء ويصادف أن تكون خلية البداية هي نفسها خلية النهاية فيشير المجال حينها إلى خلية واحدة.

مثال: لتنفيذ أمر بتحديد الخلية B3 في ورقة العمل الحالية باستخدام الخاصية Range والخاصية Cells:

Worksheets("Sheet1").Range(Cells(3, 2), Cells(3, 2)).Select

الإشارة إلى الأسطر والأعمدة

سوف نذكر طريقتين للإشارة إلى الأسطر والأعمدة لكل طريقة استخدامها بحسب الخصائص التي توفرها كل طريقة:

باستخدام الخاصية Range

يشار إلى كامل الأسطر المتجاورة بكتابة رقم سطر البداية ورقم سطر النهاية مفصولين بعلامة النقطتين ":"، فلتحديد الأسطر من 2 إلى 5:

Worksheets("Sheet1").Range("2:5").select

ولتحديد الصف الرابع فقط:

Worksheets("Sheet1").Range("4:4").select

يشار إلى كامل الأعمدة المتجاورة بكتابة اسم الحرف اللاتيني الذي يمثل عمود البداية واسم عمود النهاية مفصولين بعلامة النقطتين ":"، فلتحديد الأعمدة من B إلى E:

Worksheets("Sheet1").Range("B:E").select

لتحديد العمود F فقط:

Worksheets("Sheet1").Range("F:F").select

003-تحديد-أسطر-وأعمدة-متجاورة-باستخدام-الترميز-A1.gif

باستخدام الخاصيتين Rows و Columns

يشار إلى كامل الصف باستخدام الخاصية Rows وترتيب الصف في ورقة العمل بين قوسين:

Worksheets("Sheet1").Rows(ترتيب الصف)

يشار إلى كامل العمود باستخدام الخاصية Columns وترتيب العمود في ورقة العمل بين قوسين:

Worksheets("Sheet1"). Columns(ترتيب العمود)

يمكن الإشارة إلى العمود بكتابة دليل اسم العمود بدلًا من ترتيبه في الورقة:

Worksheets("Sheet1"). Columns(اسم العمود)

مثال: الإجراء التالي يلون كامل الصف الثاني بالأخضر وكامل العمود الثالث (العمود C) بالأزرق وكامل العمود "E" بالأحمر.

Sub RowsColumnsColor()

004-تلوين-صف-وعمود-باستخدام-Rows_-Columns.gif

إذا لم يحدَّد دليل الصف أو العمود دلت الشيفرة على كافة الأسطر أو الأعمدة.

مثال: يعطي الإجراء التالي أمرًا بتحديد ارتفاع جميع صفوف الورقة إلى 20 وتحديد عرض جميع أعمدة الورقة إلى 20.

Sub allRowsColumns()

005-تحديد-ارتفاع-وعرض-جميع-الصفوف-والأعمدة-باستخدام-rows_Columns.gif

الإشارة إلى مرجع من الخلايا المتجاورة

يشار إلى المرجع المؤلف من خلايا متجاورة باستخدام الخاصية Range بطريقتين:

باستخدام الخاصية Range في نمط المرجع A1

يمكن الإشارة إلى مجال من الخلايا المتجاورة كمرجع VBA بكتابة المجال بين هلالين وفق النمط A1 بين علامتي اقتباس بعد الخاصية Range بكتابة خلية البداية وخلية النهاية للمجال تفصل بينهما علامة النقطتين (:).

Worksheets("Sheet1").Range("عنوان المجال وفق النمط A1")

المثال التالي يحدد الخلايا منA1 إلى B5.

Worksheets("Sheet1").Range("A1:B5").select

باستخدام الخاصية Range والخاصية Cells

بكتابة خلية البداية وخلية النهاية للمجال المطلوب باستخدام الخاصية Cells تفصل بينهما علامة الفاصلة (,).

Worksheets("Sheet1").Range(Cells(خلية البداية), Cells(خلية النهاية))

مثال: يزيد الإجراء التالي طول التحديد بدءًا من الخلية B1 إلى الخلية B10 أثناء التنفيذ وإعطاء كل تحديد لونًا جديدًا.

Sub ChangeColorSelection()

006-تغيير-طول-المجال-وتلوينه.gif

اقتباس

ملاحظة: ذكرنا في مقال مدخل إلى البرمجة باستخدام VBA في مايكروسوفت إكسل أن كائن المجال Range هو كائن فرعي من كائنات ورقة العمل Worksheet، وكائن ورقة العمل هو فرعي من كائنات مصنف العمل Workbook، والذي هو بدوره فرعي من كائنات تطبيق الإكسل Excel Application الذي يقع في أعلى التسلسل الهرمي لكائنات VBA وفق البرمجة الكائنية للّغة.

فللإشارة إلى مجال يجب الكتابة وفق السلسلة الهرمية التالية حيث يفصل بين الكائن والكائن الذي يليه في التسلسل الهرمي بنقطة (.).

Application.workbook ("اسم مصنف الإكسل"). worksheets("اسم ورقة العمل").Range("المجال المطلوب")

يلزم ذكر المسار الهرمي كاملًا إذا كان التعامل مع أكثر مصنف أو أكثر من ورقة عمل، أما في حال كان العمل ضمن نفس المصنف فيمكن استثناء الإشارة إلى كائن مصنف الإكسل، وإذا كان العمل في نفس الورقة النشطة يمكن استثناء الإشارة إلى كائن ورقة العمل، ويشار إلى المجال بالشكل:

. Range("المجال المطلوب")

يجب الانتباه إلى أنه لا يجوز إهمال ذكر اسم الورقة خصوصًا إذا كان البرنامج يتعامل مع أكثر من ورقة عمل أو أن الإجراء يقصد به ورقة عمل بعينها. فيكتب المجال غالبا بالشكل:

worksheets("اسم ورقة العمل").Range("المجال المطلوب")

الإشارة إلى الخلايا المتجاورة باستخدام الترميز المختصر

يُكتب المجال وفق نمط المرجع A1 في VBA داخل أقواس مربعة اختصارًا دون الحاجة لكتابة كلمة Range أو استخدام علامات الاقتباس، كما يمكن كتابة اسم المجال المسمى داخل أقواس مربعة. فمثلًا لتحديد المجال B2:C4 باستخدام الاختصار والنمط A1:

Worksheets("Sheet1").[B2:C4].select

مثال: ينشئ الإجراء التالي كائن مجال وتسميته A2:F5 ثم يحدده باستخدام الترميز المختصر.

Sub ShortcutRangeName()

007-تحديد-مجال-بالاختصار-وباسم-المجال.gif

خاتمة

قد تكون الشيفرة البرمجية طويلة ومعقدة، وقد تفرض علينا المعطيات أسلوبًا معينًا للإشارة إلى المراجع دون غيره، ذكرنا في هذا المقال الأساليب الأساسية للإشارة إلى المرجع في VBA، إذ تأتي مهارة المبرمج بمعرفته لهذه الأساليب، ومتى يستخدم كل أسلوب بطريقة صحيحة.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...