فبا باي ريف | تمرير الوسيطة باستخدام وظيفة Excel VBA ByRef

وسيطة دالة Excel VBA ByRef

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

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

كيفية تمرير الوسيطة باستخدام حجة VBA ByRef؟

يمكنك تنزيل نموذج VBA ByRef Excel هذا من هنا - نموذج VBA ByRef Excel

مثال 1

للحصول على مثال ، انظر إلى رمز VBA أدناه.

كود 1:

 الإجراء الفرعي 1 () خافت k كعدد صحيح k = 50 إجراء 2 k MsgBox k End Sub 

كود 2:

 الإجراء الفرعي 2 (ByRef k As Integer) k = k + 10 End Sub 

في الإجراء الأول ، أعلنت أن المتغير "k" هو عدد صحيح.

ثم قمت بتعيين القيمة لهذا المتغير على أنها 50.

بعد ذلك أضفت سطرًا جديدًا مثل

الإجراء 2 ك

هذا هو اسم الإجراء الثاني. في هذا الإجراء ، أعلنت أن المتغير الموجود داخل الأقواس هو String في VBA ولكني استخدمت كلمة "ByRef".

 ByRef k As Integer 

هنا قمت بتعيين قيمة المتغير "k" كـ

ك = ك + 10

حسنًا ، سأقوم الآن بتشغيل الكود خطوة بخطوة بالضغط على المفتاح F8.

اضغط على المفتاح F8 مرتين أخريين وضع المؤشر على المتغير "k" لترى قيمة المتغير "k".

نظرًا لأننا قمنا بتعيين القيمة على أنها 50 ، فإنها تعرض القيمة على أنها 50. الآن قامت بتسليط الضوء على السطر Procedure2 k وهو اسم الإجراء الثاني.

إذا قمت بالضغط على المفتاح F8 الآن فسوف يخرج من الإجراء الحالي وينتقل إلى الإجراء الثاني.

الآن بما أننا استخدمنا كلمة ByRef فقد حملت قيمة المتغير "k" من الإجراء أعلاه.

اضغط على مفتاح F8 مرتين وسيعود إلى الإجراء الفرعي السابق. إذا لاحظت في الإجراء الثاني ، فقد قمت بتطبيق المعادلة على النحو التالي k = k + 10. أي أن قيمة "k" هي 50 ثم تضيف 10 إلى ذلك ، أي 60 في المجموع.

الآن يتم تشغيل الكود في الإجراء الأول وفي هذا الإجراء ، تكون قيمة المتغير "k" هي 50. ولكن اضغط على مفتاح F8 وشاهد النتيجة في مربع رسالة.

حصلنا على النتيجة 60 بدلاً من القيمة الافتراضية 50 في هذا الإجراء.

سبب حصولنا على 60 لأنه في الإجراء الثاني قمنا بتطبيق "ByRef" لذلك ، فقد حملت نتيجة المعادلة (k = k + 10) إلى الإجراء الحالي.

هنا تكون قيمة المتغير الأول "k" هي 50 وفي قيمة متغير الإجراء الثاني "k" هي k + 10 أي 60 يتم نقلها إلى الإجراء الأول.

في الإجراء الأول ، كانت القيمة الأصلية للمتغير "k" 50 ، لذلك قام By Ref بتغيير القيمة الأصلية من 50 إلى 60 عن طريق تنفيذ المعادلة k = k + 10 أي k = 50 +10 = 60.

المثال رقم 2

الآن ألق نظرة على مثال آخر.

الكود 1:

 Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'تم تغيير MyNumber بواسطة إجراء Change_ByRef MsgBox "رقمي هو الآن:" & MyNumber End Sub 

الكود 2:

 Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 End Sub 

يعمل هذا تمامًا مثل الكود السابق.

مبدئيًا ، قيمة المتغير "MyNumber" هي 1. ثم نسمي الإجراء أدناه باسمه

 استدعاء Change_ByRef (MyNumber)

في هذا الإجراء ، تكون قيمة المتغير 14.

لذلك ، عندما يعود إلى الإجراء السابق ، فإنه سيخصص القيمة الجديدة للمتغير كـ 14.


$config[zx-auto] not found$config[zx-overlay] not found