تخطي إلى المحتوى الرئيسي
الدعم
تسجيل الدخول باستخدام حساب Microsoft
تسجيل الدخول أو إنشاء حساب.
مرحباً،
تحديد استخدام حساب مختلف!
لديك حسابات متعددة
اختر الحساب الذي تريد تسجيل الدخول باستخدامه.

مقدمة

تصف هذه المقالة كيفية استخدام المتغيرات في 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 يتم التعامل معها ك أنواع بيانات متغيرة:

    Dim x, y

نطاق متغير

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

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

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

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

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

  2. اكتب وحدات الماكرو التالية في هذه الوحدة النمطية:
      الماكرو الفرعي1() Dim x As Integer x = 10 MsgBox "x، كما هو مشاهد بواسطة الماكرو1 هو " & x 'يقوم السطر التالي بتشغيل Macro2 End Sub Macro2() MsgBox "x، كما هو مشاهد بواسطة الماكرو2 هو " & x End Sub

  3. تشغيل الماكرو1، وستحصل على الرسالة التالية:

    x, as seen by Macro1 is 10

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

    x, as seen by Macro2 is

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

لا يعرض الماكرو2 قيمة للمتغير x لأن المتغير x محلي للماكرو1.

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

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

لمعرفة الفرق بين العبارة "عام" و"خافت"، اتبع الخطوات التالية:

  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 المعلن باسم "عام x كقيمة عدد صحيح"، يمكن لكل وحدات الماكرو الثلاثة في المشروع الوصول إلى قيمة x. يعرض مربع الرسالة الأول القيمة 10. يعرض مربع الرسالة الثاني القيمة 20 (لأن x مضروبة في 2 في Macro_1b). يعرض مربع الرسالة الثالث القيمة 60 (لأنه تم تغيير قيمة x إلى 20 في Macro_1b ثم تم ضربها في 3 في الماكرو2).

  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()     'set x as a procedure level variable
       Dim x As Integer
       MsgBox "القيمة الأولية ل x هي " & x
       x = 10
        MsgBox "x is " & x
        'يقوم السطر التالي بتشغيل الماكرو2
        الماكرو2
        MsgBox "x لا يزال" & x
    End Sub
    Sub Macro2()
        MsgBox "x، كما هو مشاهد بواسطة الماكرو2 هو " & 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. لا يعرض الماكرو2 قيمة للمتغير x لأن المتغير x محلي للماكرو1. ستصلك الرسالة التالية:

    x is still 10

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

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

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

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

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

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

  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
  2. تشغيل الماكرو1.

  3. ستصلك الرسالة:

    the initialized value of x is 0

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

    x is 10

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

  6. تشغيل الماكرو1، وستحصل على الرسالة التالية:

    the initialized value of x is 10

  7. انقر فوقموافق ، وستحصل على الرسالة التالية:

    x is 20

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

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

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

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

  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
  2. تشغيل الماكرو1، وستحصل على الرسالة التالية:

    the initialized value of x is 0

  3. انقر فوق موافق، وسوف تظهر الرسالة التالية:

    x is 10

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

  5. تشغيل الماكرو1، وسوف تحصل على هذه الرسالة:

    the initialized value of x is 10

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

  7. ستتلقى الرسالة التالية:x is 20

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

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

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

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

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

    the initialized value of x is 0

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.

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

هل كانت المعلومات مفيدة؟

ما مدى رضاك عن جودة اللغة؟
ما الذي أثّر في تجربتك؟
بالضغط على "إرسال"، سيتم استخدام ملاحظاتك لتحسين منتجات Microsoft وخدماتها. سيتمكن مسؤول تكنولوجيا المعلومات لديك من جمع هذه البيانات. بيان الخصوصية.

نشكرك على ملاحظاتك!

×