كيفية استخدام المتغيرات في إجراءات Excel الفرعية في Visual Basic for Applications

مقدمة

توضح هذه المقالة كيفية استخدام المتغيرات في الإجراءات الفرعية ل Microsoft Excel في Microsoft Visual Basic for Applications.

المزيد من المعلومات

المتغيرات في إجراء فرعي

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

  • كيفية الإعلان عن المتغيرات.
  • الإجراءات والمشاريع التي يمكنها استخدام المتغير.
  • عمر المتغير.

الإعلان عن متغير في ماكرو

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

    Dim x As Integer, y As Integer

مع تحديد x وy كأعداد صحيحة، فأنت تخبر Visual Basic بتخصيص ذاكرة كافية لمتغير عدد صحيح (2 بايت لكل من x وy) وأن المعلومات المخزنة في x أو y هي رقم كامل بين -32768 و32767.

ملاحظه: إذا قمت بتعريف أكثر من متغير واحد باستخدام عبارة Dim واحدة، يجب تحديد نوع البيانات لكل متغير.

إذا لم تحدد نوع البيانات لكل متغير، كما هو الحال في التعليمات البرمجية Visual Basic التالية، يتم إعداد المتغير y فقط كمتغير عدد صحيح. سيكون المتغير x نوع متغير:

    Dim x, y As Integer

للحصول على معلومات إضافية، راجع نوع بيانات المتغير أدناه.
 

لإجراء اختبار متغير، اتبع الخطوات التالية:

  1. احفظ أي مصنفات مفتوحة وأغلقها، ثم افتح مصنفا جديدا.

  2. ابدأ تشغيل محرر Visual Basic (اضغط على ALT+F11).

  3. في القائمة إدراج ، انقر فوق الوحدة النمطية.

  4. اكتب التعليمات البرمجية التالية:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "قيمة x هي " & x & _
        Chr(13) & "قيمة y هي " & y
    End Sub

  5. قم بتشغيل الماكرو Variable_Test . تتلقى الرسالة التالية:

    the value of x is 10
    the value of y is 100

  6. انقر فوق موافق.

  7. في الماكرو Variable_Test قم بتغيير السطر التالي:

    x = 10

  8. ل:

    x = "error"

  9. قم بتشغيل الماكرو Variable_Test .

ستتلقى خطأ في وقت التشغيل لأن "الخطأ" ليس عددا صحيحا، وتحاول تعيين قيمة السلسلة هذه إلى متغير العدد الصحيح x.
 

ملخص نوع البيانات

هذه هي أنواع البيانات المتغيرة الشائعة:

أنواع البيانات المتغيرة الشائعة

نوع بيانات المتغير

إذا لم تحدد نوع بيانات عند الإعلان عن متغير، أو لم تقم بتعريف متغير على الإطلاق، فإن Visual Basic يحدد تلقائيا نوع البيانات المتغير لهذا المتغير. فيما يلي مزايا المتغيرات التي تم الإعلان عنها كنوع البيانات هذا:

  • يمكن أن تحتوي المتغيرات على قيم سلسلة أو تاريخ أو وقت أو قيم منطقية أو رقمية.
  • يمكن للمتغيرات تحويل القيم التي تحتوي عليها تلقائيا.

العيب هو أن المتغيرات المتغيرة تتطلب 16 بايت على الأقل من الذاكرة. يمكن أن تكون 16 بايت من الذاكرة كبيرة في الإجراءات الكبيرة أو في الوحدات النمطية المعقدة.

لمعرفة كيفية عمل ذلك في الماكرو Variable_Test، اتبع الخطوات التالية:

غير التعليمات البرمجية في الماكرو Variable_Test إلى:


Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

قم بتشغيل الماكرو Variable_Test .

لن تتلقى خطأ لأنه يمكنك تعيين أي شيء للمتغيرات المتغيرة x وy.

ملاحظه: يمكنك أيضا ترك السطر التالي وسيظل الماكرو يعمل كما يتم التعامل مع المتغيرين x وy على أنهما أنواع بيانات Variant:

    Dim x, y

نطاق متغير

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

نطاق على مستوى الإجراء

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

للتحقق من عدم رؤية متغير ذي نطاق على مستوى الإجراء خارج الإجراء حيث يتم الإعلان عنه، اتبع الخطوات التالية:

  1. إدراج وحدة نمطية جديدة في مشروعك.

  2. اكتب كلا الماكرو التاليين في هذه الوحدة النمطية:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, as seen by Macro1 is " & x 'يشغل السطر التالي Macro2 Macro2 End Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End Sub

  3. قم بتشغيل الماكرو1، وستتلقى الرسالة التالية:

    x, as seen by Macro1 is 10

  4. انقر فوق موافق، وستتلقى الرسالة التالية:

    x, as seen by Macro2 is

  5. انقر فوق موافق.

لا يعرض Macro2 قيمة للمتغير x لأن المتغير x محلي إلى Macro1.

نطاق مستوى الوحدة النمطية الخاص والعام

يمكنك تعريف المتغيرات في قسم الإعلانات في وحدة نمطية (في أعلى الوحدة النمطية، وقبل كل الإجراءات الفرعية)، وتعيين نطاق المتغير الخاص بك باستخدام العبارة Public أو عبارة Dim أو العبارة Private. إذا وضعت العبارة Public أمام المتغير الخاص بك، فسيكون المتغير الخاص بك متاحا لجميع وحدات الماكرو في جميع الوحدات النمطية في المشروع. إذا وضعت إما عبارة Dim أو العبارة Private أمام المتغير الخاص بك، فإن المتغير الخاص بك متاح فقط لوحدات الماكرو في الوحدة النمطية حيث يتم الإعلان عنه.

للاطلاع على الفرق بين العبارة Public وع العبارة Dim، اتبع الخطوات التالية:

  1. احفظ أي مصنفات مفتوحة وأغلقها، ثم افتح مصنفا جديدا.

  2. ابدأ تشغيل محرر Visual Basic.

  3. إدراج وحدة نمطية في مشروعك.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
         x = 10
         MsgBox x
         Macro_1b
    End Sub
    Sub Macro_1b()
         x = x * 2
         MsgBox x
         Macro2
    End Sub
    
  5. إدراج وحدة نمطية أخرى في مشروعك.

  6. اكتب التعليمات البرمجية التالية في هذه الوحدة النمطية:
    Sub Macro2()
        x = x * 3
        MsgBox x
    End Sub

  7. تشغيل ماكرو Macro_1a في الوحدة النمطية الأولى.

  8. مع تعريف المتغير x على أنه "Public x As Integer"، يمكن لجميع وحدات الماكرو الثلاثة في المشروع الوصول إلى قيمة x. يعرض مربع الرسالة الأول قيمة 10. يعرض مربع الرسالة الثاني قيمة 20 (لأن x مضروب في 2 في Macro_1b). يعرض مربع الرسالة الثالث قيمة 60 (لأنه تم تغيير قيمة x إلى 20 في Macro_1b ثم تم ضربها في 3 في Macro2).

  9. تغيير سطر الإعلان في الوحدة النمطية الأولى من:

       Public x As Integer

    ل:

       Dim x As Integer

  10. قم بتشغيل الماكرو Macro_1a .

  11. مع تعريف المتغير x على أنه "Dim x As Integer"، يمكن فقط لوحدات الماكرو في الوحدة الأولى الوصول إلى قيمة x. لذلك يعرض مربع الرسالة الأول قيمة 10، ويعرض مربع الرسالة الثاني قيمة 20، (لأن x مضروب في 2 في Macro_1b) ويعرض مربع الرسالة الثالث قيمة 0 (لأن الماكرو2 لا يرى قيمة x ويتم استخدام القيمة غير المهينة للصفر بواسطة الماكرو 2).

  12. تغيير سطر الإعلان في الوحدة النمطية الأولى من:

      Dim x As Integer

    ل:

        Private x As Integer

  13. قم بتشغيل الماكرو Macro_1a .

  14. يتم عرض مربعات الرسائل نفسها باستخدام نطاق العبارة الخاصة أثناء استخدامها لعبارة Dim. المتغير x له نفس النطاق، خاص بالوحدة النمطية حيث يتم الإعلان عنه.

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

مدة بقاء متغير

يعرف الوقت الذي يحتفظ فيه المتغير بقيمته باسم مدة بقائه. قد تتغير قيمة المتغير على مدى عمره ولكنه سيحتفظ بقيمة. أيضا، عندما يفقد متغير النطاق، فإنه لم يعد له قيمة.
 

تهيئة قيمة متغير

عند تشغيل ماكرو، تتم تهيئة جميع المتغيرات إلى قيمة. تتم تهيئة متغير رقمي إلى صفر، ويتم تهيئة سلسلة طول متغير إلى سلسلة ذات طول صفري ("")، ويتم ملء سلسلة طول ثابتة برمز ASCII 0. تتم تهيئة المتغيرات المتغيرة إلى فارغة. يتم تمثيل متغير فارغ بمقدار صفر في سياق رقمي وسلسلة ذات طول صفري ("") في سياق سلسلة.

المتغيرات على مستوى الإجراء

إذا كان لديك متغير تم تعريفه في ماكرو باستخدام عبارة Dim، يحتفظ المتغير بقيمته طالما أن الماكرو قيد التشغيل. إذا كان هذا الماكرو يستدعي وحدات ماكرو أخرى، يتم الاحتفاظ بقيمة المتغير (غير متوفرة لوحدات الماكرو الأخرى على الرغم من) طالما أن وحدات الماكرو الأخرى هذه قيد التشغيل أيضا.

لتوضيح كيفية عمل المتغيرات على مستوى الإجراء، اتبع الخطوات التالية:

  1. إدراج وحدة نمطية جديدة في مشروعك.

  2. اكتب كلا الماكرو التاليين في هذه الوحدة النمطية:

    Sub Macro1()
        'تعيين x كمتغير مستوى الإجراء
       Dim x As Integer
       MsgBox "القيمة الأولية ل x هي " & x
       x = 10
        MsgBox "x is" & x
        'السطر التالي يعمل الماكرو2
        ماكرو2
        MsgBox "x لا يزال" & x
    End Sub
    الماكرو الفرعي2()
        MsgBox "x، كما يراها Macro2 هي " & x
    End Sub

  3. تشغيل الماكرو1.

  4. تتلقى الرسالة التالية:

        the initialized value of x is 0

  5. انقر فوق موافق، وستتلقى الرسالة:

     x is 10

  6. انقر فوق موافق، وستتلقى الرسالة التالية:

    x, as seen by Macro2 is

  7. انقر فوق موافق.

  8. لا يعرض Macro2 قيمة للمتغير x لأن المتغير x محلي إلى Macro1. تتلقى الرسالة التالية:

    x is still 10

  9. انقر فوق موافق.

  10. تشغيل الماكرو1.

تتلقى نفس الرسائل الموضحة في الخطوات من 3 إلى 6 لأنه بمجرد توقف الماكرو1 عن التشغيل في الخطوة 6، فقدت قيمة المتغير x. لذلك، عند إعادة تشغيل الماكرو1 في الخطوة 7، تعرض الرسالة الأولى قيمة x على أنها صفر (القيمة التي تمت تهيئتها).

كلمة أساسية ثابتة

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

لمعرفة كيفية عمل الكلمة الأساسية الثابتة، اتبع الخطوات التالية:

1.

Change the code in Macro1 to:

Sub Macro1()
    'set x as a procedure level variable
    Static x As Integer
       MsgBox "the initialized value of x is " & x
    x = x + 10
    MsgBox "x is " & x
End Sub
  1. تشغيل الماكرو1.

  2. ستتلقى الرسالة:

    the initialized value of x is 0

  3. انقر فوق موافق، وستتلقى الرسالة:

    x is 10

  4. انقر فوق موافق.

  5. قم بتشغيل الماكرو1، وتتلقى الرسالة التالية:

    the initialized value of x is 10

  6. انقر فوق موافق، وستتلقى الرسالة التالية:

    x is 20

  7. انقر فوق موافق.

تختلف القيم التي تظهر في الرسائل في المرة الثانية لأنه يتم تعريف المتغير x كمتغير ثابت ويحتفظ المتغير بقيمته بعد تشغيل Macro1 في المرة الأولى.

ملاحظه: إذا كان لديك متغير على مستوى الوحدة النمطية، فإن عمره هو نفسه كما لو كان متغيرا ثابتا على مستوى الإجراء.

للتحقق من عمر متغير على مستوى الوحدة النمطية، اتبع الخطوات التالية:

1.

Change the code in the module that contains Macro1 to the following:

Dim x As Integer  'create a module-level variable
Sub Macro1()
   MsgBox "the initialized value of x is " & x
   x = x + 10
   MsgBox "x is " & x
End Sub
  1. قم بتشغيل الماكرو1، وستتلقى الرسالة التالية:

    the initialized value of x is 0

  2. انقر فوق موافق، وستتلقى الرسالة التالية:

    x is 10

  3. انقر فوق موافق،

  4. قم بتشغيل الماكرو1، وستتلقى هذه الرسالة:

    the initialized value of x is 10

  5. انقر فوق موافق.

  6. تتلقى الرسالة التالية:

    x is 20

  7. انقر فوق موافق.

تختلف القيم التي تظهر في الرسائل في المرة الثانية لأن المتغير x يتم تعريفه كمتغير ثابت ويحتفظ بقيمته بعد تشغيل الماكرو1 في المرة الأولى.
 

إعادة تعيين مشروع لإعادة تعيين المتغيرات

إذا كنت تريد إعادة تعيين القيمة لمتغير ثابت أو لمتغير على مستوى الوحدة النمطية، فانقر فوق الزر إعادة تعيين على
Standard شريط الأدوات، أو انقر فوق إعادة تعيين في القائمة تشغيل.

إذا قمت بذلك لمشروع Macro1 ثم أعد تشغيل Macro1، تتم تهيئة قيمة المتغير x مرة أخرى إلى الصفر وتتلقى الرسالة الأولى:

    the initialized value of x is 0