إجراءات "الوظيفة" و "الفرعية" في VBA

وظائف VBA المدمجة

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

يمكن عرض قائمة بهذه الوظائف في محرر VBA:

  • افتح مصنف Excel وابدأ تشغيل محرر VBA (انقر للقيام بذلك ALT + F11) ، ثم اضغط على F2.
  • حدد مكتبة من القائمة المنسدلة أعلى يسار الشاشة VBA.
  • ستظهر قائمة بفئات ووظائف VBA المضمنة. انقر فوق اسم الوظيفة لعرض وصفها المختصر أسفل النافذة. ملحة F1 سيفتح صفحة المساعدة عبر الإنترنت لهذه الميزة.

بالإضافة إلى ذلك ، يمكن العثور على قائمة كاملة بوظائف VBA المضمنة مع أمثلة في Visual Basic Developer Center.

الإجراءات المخصصة "Function" و "Sub" في VBA

في Excel Visual Basic ، يتم وضع مجموعة من الأوامر التي تقوم بمهمة معينة في إجراء. المسمى الوظيفي (وظيفة) أو فرعية (روتين فرعي). الفرق الرئيسي بين الإجراءات المسمى الوظيفي и فرعية هو هذا الإجراء المسمى الوظيفي إرجاع نتيجة الإجراء فرعية - ليس.

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

الحجج

يمكن تمرير البيانات المختلفة إلى إجراءات VBA باستخدام الوسائط. يتم تحديد قائمة الوسائط عند الإعلان عن إجراء. على سبيل المثال ، الإجراء فرعية في VBA يضيف عددًا صحيحًا محددًا (عدد صحيح) لكل خلية في النطاق المحدد. يمكنك تمرير هذا الرقم إلى الإجراء باستخدام وسيطة ، مثل هذا:

AddToCells الفرعية (i As Integer) ... End Sub

ضع في اعتبارك أن وجود حجج للإجراءات المسمى الوظيفي и فرعية في VBA اختياري. بعض الإجراءات لا تتطلب الحجج.

الحجج الاختيارية

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

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

AddToCells الفرعية (اختياري i كـ عدد صحيح = 0)

في هذه الحالة ، حجة العدد الصحيح i سيكون الافتراضي 0.

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

تمرير الحجج بالقيمة وبالرجوع

يمكن تمرير الوسيطات في VBA إلى إجراء بطريقتين:

  • الأساسية ByVal - تمرير الحجة من حيث القيمة. هذا يعني أنه يتم تمرير القيمة فقط (أي نسخة من الوسيطة) إلى الإجراء ، وبالتالي ستفقد أي تغييرات يتم إجراؤها على الوسيطة داخل الإجراء عند إنهاء الإجراء.
  • الأساسية ByRef - تمرير حجة بالإشارة. بمعنى ، يتم تمرير العنوان الفعلي لموقع الوسيطة في الذاكرة إلى الإجراء. سيتم حفظ أي تغييرات يتم إجراؤها على وسيطة داخل الإجراء عند إنهاء الإجراء.

استخدام الكلمات الرئيسية الأساسية ByVal or الأساسية ByRef في إعلان الإجراء ، يمكنك تحديد كيفية تمرير الوسيطة إلى الإجراء. هذا موضح في الأمثلة أدناه:

AddToCells الفرعية (ByVal i As Integer) ... End Sub
في هذه الحالة ، حجة العدد الصحيح i مرت بالقيمة. بعد مغادرة الإجراء فرعية كلها مصنوعة من i ستفقد التغييرات.
AddToCells الفرعية (ByRef i As Integer) ... End Sub
في هذه الحالة ، حجة العدد الصحيح i مرت بالرجوع. بعد مغادرة الإجراء فرعية كلها مصنوعة من i سيتم تخزين التغييرات في المتغير الذي تم تمريره إلى الإجراء فرعية.

تذكر أن الوسيطات في VBA يتم تمريرها حسب المرجع افتراضيًا. بمعنى آخر ، إذا لم يتم استخدام الكلمات الرئيسية الأساسية ByVal or الأساسية ByRef، ثم سيتم تمرير الوسيطة عن طريق المرجع.

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

إجراء VBA «الوظيفة»

يتعرف محرر VBA على الإجراء المسمى الوظيفيعندما يواجه مجموعة من الأوامر المرفقة بين العبارات الافتتاحية والختامية التالية:

الوظيفة ... وظيفة النهاية

كما ذكرنا سابقًا ، الإجراء المسمى الوظيفي في VBA (على عكس فرعية) إرجاع قيمة. تنطبق القواعد التالية على قيم الإرجاع:

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

هذا موضح بشكل جيد في المثال التالي.

مثال على وظيفة VBA: إجراء عملية حسابية على 3 أرقام

فيما يلي مثال على رمز إجراء VBA المسمى الوظيفي، الذي يأخذ ثلاث حجج من النوع مزدوج (أرقام فاصلة عائمة مزدوجة الدقة). نتيجة لذلك ، يقوم الإجراء بإرجاع رقم آخر من النوع مزدوجيساوي مجموع الوسيطتين الأوليين مطروحًا منه الوسيطة الثالثة:

الوظيفة SumMinus (dNum1 كمزدوج ، dNum2 كمزدوج ، dNum3 كمزدوج) مثل SumMinus مزدوج = dNum1 + dNum2 - dNum3 End Function

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

استدعاء إجراء VBA "الوظيفة"

إذا كان الإجراء أعلاه بسيط المسمى الوظيفي تم إدراجها في وحدة نمطية في محرر Visual Basic ، ويمكن استدعاؤها من إجراءات VBA الأخرى أو استخدامها في ورقة عمل في مصنف Excel.

استدعاء إجراء VBA "الوظيفة" من إجراء آخر

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

رئيسي فرعي () إجمالي خافت كمجموع مزدوج = SumMinus (5، 4، 3) End Sub

استدعاء إجراء VBA "الوظيفة" من ورقة العمل

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

=SumMinus(10, 5, 2)

إجراء VBA «Sub»

يفهم محرر VBA أن هناك إجراء أمامه فرعيةعندما يواجه مجموعة من الأوامر المرفقة بين العبارات الافتتاحية والختامية التالية:

Sub ... End Sub

إجراء VBA "Sub": مثال 1. تغيير المحاذاة إلى الوسط وحجم الخط في نطاق محدد من الخلايا

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

Sub Format_Centered_And_Sized (اختياري iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

هذا الإجراء فرعية ينفذ إجراءات لكنه لا يعطي نتيجة.

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

الإجراء الفرعي لـ VBA: مثال 2: توسيط المحاذاة والخط الغامق في نطاق الخلايا المحدد

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

Sub Format_Centered_And_Bold () Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

استدعاء إجراء "فرعي" في Excel VBA

استدعاء إجراء VBA "Sub" من إجراء آخر

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

الرئيسية الفرعية () Call Format_Centered_And_Sized (20) End Sub

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

الرئيسي الفرعي () Call Format_Centered_And_Sized (arg1، arg2، ...) End Sub

استدعاء إجراء VBA "Sub" من ورقة العمل

إجراء فرعية لا يمكن إدخالها مباشرة في خلية ورقة Excel ، كما يمكن القيام به مع إجراء المسمى الوظيفيلأن الإجراء فرعية لا ترجع قيمة. ومع ذلك ، الإجراءات فرعية، والتي ليس لها حجج ويتم إعلانها على أنها عام (كما هو موضح أدناه) سيكون متاحًا لمستخدمي ورقة العمل. وهكذا ، إذا كانت الإجراءات البسيطة التي نوقشت أعلاه فرعية إدراجها في وحدة نمطية في محرر Visual Basic ، الإجراء Format_Centered_And_Bold سيكون متاحًا للاستخدام في ورقة عمل Excel ، والإجراء Format_Centered_And_Size - لن يكون متاحًا لأنه يحتوي على حجج.

هذه طريقة سهلة لتشغيل (أو تنفيذ) إجراء فرعية، يمكن الوصول إليه من ورقة العمل:

  • صحافة ALT + F8 (اضغط المفتاح قديم وأثناء الضغط عليه ، اضغط على المفتاح F8).
  • في قائمة وحدات الماكرو التي تظهر ، حدد الوحدة التي تريد تشغيلها.
  • صحافة يجري (يجري)

لأداء إجراء فرعية بسرعة وسهولة ، يمكنك تعيين اختصار لوحة مفاتيح لها. لهذا:

  • صحافة ALT + F8.
  • في قائمة وحدات الماكرو التي تظهر ، حدد الذي تريد تعيين اختصار لوحة مفاتيح له.
  • صحافة المعلمات (خيارات) وفي مربع الحوار الذي يظهر ، أدخل اختصار لوحة المفاتيح.
  • صحافة OK وأغلق مربع الحوار الماكرو (دقيق).

انتباه: عند تعيين اختصار لوحة مفاتيح لماكرو ، تأكد من عدم استخدامه كمعيار في Excel (على سبيل المثال ، CTRL + C). إذا قمت بتحديد اختصار لوحة مفاتيح موجود بالفعل ، فسيتم إعادة تعيينه إلى الماكرو ، ونتيجة لذلك ، قد يبدأ المستخدم الماكرو عن طريق الخطأ.

نطاق إجراءات VBA

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

Public Sub AddToCells (i As Integer) ... End Sub
إذا كان إعلان الإجراء مسبوقًا بالكلمة الأساسية عام، فسيكون الإجراء متاحًا لجميع الوحدات النمطية في مشروع VBA هذا.
Private Sub AddToCells (i As Integer) ... End Sub
إذا كان إعلان الإجراء مسبوقًا بالكلمة الأساسية خاص، فسيكون هذا الإجراء متاحًا فقط للوحدة الحالية. لا يمكن استدعاؤه أثناء وجوده في أي وحدة نمطية أخرى أو من مصنف Excel.

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

الخروج المبكر من إجراءات VBA "الوظيفة" و "الفرعية"

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

الوظيفة VAT_Amount (sVAT_Rate As Single) باعتبارها واحدة VAT_Amount = 0 إذا كانت sVAT_Rate <= 0 ثم MsgBox "توقعت قيمة موجبة لـ sVAT_Rate لكن تم استلامها" & sVAT_Rate إنهاء وظيفة الخروج إذا ... إنهاء الوظيفة

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

اترك تعليق