كيفية إنشاء وظيفة محددة من قبل المستخدم في vba؟

ربما تكون إحدى أروع فوائد تعلم VBA هي القدرة على إنشاء وظائفك الخاصة.

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

وهناك شيء واحد يمكنني قوله بثقة وهو أن كل مستخدم VBA ناشئ يريد تعلم كيفية إنشاء وظيفة محددة من قبل المستخدم. ليس انت؟ قل “نعم” في قسم التعليقات، إذا كنت أحد هؤلاء الأشخاص الذين يريدون إنشاء ميزة مخصصة.

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

  1. سأستخدم هنا الكلمات “وظيفة محددة من قبل المستخدم” و”وظيفة مخصصة” و”UDF” بالتبادل. لذا ابق معي، ستصبح نجم موسيقى الروك VBA في الدقائق القليلة القادمة.
  2. لإنشاء تعليمات برمجية لوظيفة VBA المخصصة، يتعين عليك كتابتها، ولا يمكنك تسجيلها باستخدام مسجل الماكرو .

لماذا يجب عليك إنشاء وظيفة Excel مخصصة

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

وقد أدرجت أدناه بعض الأسباب أو المواقف التي يجب عليك فيها استخدام وظيفة مخصصة.

1. عندما لا تكون هناك وظيفة لهذا

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

احسب كلمة udf لتعرف سبب أهمية إنشاء وظيفة مخصصة

2. استبدل صيغة معقدة

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

يمكن أن تساعدك الوظيفة المعرفة من قبل المستخدم على تجنب العمليات الحسابية المطولة

3. عندما لا ترغب في استخدام SUB Routine

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

كيفية إنشاء أول وظيفة محددة من قبل المستخدم في Excel

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

  1. أعلن الإجراء الخاص بك كوظيفة
  2. تحديد الوسائط الخاصة بها ونوع البيانات الخاصة بها
  3. أضف الكود لحساب القيمة المطلوبة

لكن دعني أعطيك:

تحتاج إلى إنشاء دالة يمكنها إرجاع اسم اليوم من قيمة التاريخ. حسنًا، لدينا دالة تُرجع رقم يوم الأسبوع وليس الاسم. هل تفهم ما اقول؟ نعم؟

لذلك، دعونا نتبع الخطوات أدناه لإنشاء أول وظيفة محددة من قبل المستخدم:

  1. أولاً، افتح محرر Visual Basic الخاص بك باستخدام مفتاح الاختصار ALT + F11 أو انتقل إلى علامة التبويب “المطور” وانقر ببساطة على الزر “Visual Basic”.
    افتح محرر vb لكتابة التعليمات البرمجية لـ udf
  2. والشيء التالي هو إدراج وحدة نمطية، لذا انقر بزر الماوس الأيمن على نافذة مشروع VBA، ثم انتقل إلى إدراج، ثم انقر فوق “وحدة نمطية”. (تنبيه: يجب عليك إدخال وظيفة محددة من قبل المستخدم فقط في الوحدات النمطية القياسية. تعد كل من الوحدتين Sheet وThisWorkbook نوعًا خاصًا من الوحدات النمطية، وإذا قمت بإدخال UDF في هاتين الوحدتين، فلن يتعرف Excel على أنك تقوم بإنشاء UDF) .
    أضف وحدة نمطية في محرر vba لكتابة udf
  3. الشيء الثالث هو تحديد اسم للوظيفة وأنا هنا أستخدم “myDayName”. لذلك عليك أن تكتب “Function mydayName”. لماذا الوظيفة قبل الاسم؟ عندما تقوم بإنشاء دالة VBA، فإن استخدام كلمة “Function” يخبر Excel بمعاملة هذا الرمز كدالة (تأكد من قراءة نطاق UDF من قبل في الرسالة). اكتب اسم وظيفة vba مخصصة
  4. بعد ذلك تحتاج إلى تحديد الوسائط لوظيفتك. لذا أدخل الأقواس البادئة واكتب “InputDate As Date”. هنا، InputDate هو اسم الوسيطة والتاريخ هو نوع البيانات الخاص بها. من الأفضل دائمًا تحديد نوع بيانات للوسيطة.
    الخطوة التالية لإضافة وسيطة إلى وظيفة يحددها المستخدم
  5. الآن أغلق الأقواس واكتب “كسلسلة”. هنا تقوم بتحديد نوع بيانات النتيجة التي ترجعها الدالة وكما تريد اسم اليوم وهو نص، لذلك يجب أن يكون نوع بياناته “سلسلة”. إذا كنت تريد أن تكون النتيجة شيئًا آخر غير سلسلة، فتأكد من تعيين نوع البيانات الخاص بها وفقًا لذلك. (myDayName(InputDate As Date) كوظيفة سلسلة).
    بعد ذلك قم بتعيين نوع البيانات لـ UDF
  6. في النهاية، اضغط على ENTER. في هذه المرحلة، يتم تعيين اسم وظيفتك ووسيطتها ونوع بيانات الوسيطة ونوع بيانات الوظيفة وسيكون لديك شيء مثل أدناه في الوحدة النمطية الخاصة بك:
    وظيفة vba المخصصة بعد تعيين وسيطات الاسم
  7. الآن في “الوظيفة” و”الوظيفة النهائية” تحتاج إلى تحديد الحساب أو يمكنك قول عمل UDF هذا. توجد في Excel وظيفة ورقة عمل تسمى “النص” ونحن نستخدمها هنا. ولهذا عليك كتابة الكود أدناه وبهذا الكود تحدد القيمة التي يجب أن ترجعها الدالة. myDayName = WorksheetFunction.Text(InputDate, “dddddd”)
    بعد كتابة الكود لاستخدامه في وظيفة vba المخصصة
  8. الآن أغلق محرر VB الخاص بك وارجع إلى ورقة العمل وفي الخلية B2 أدخل “=myDayName(A2)” ثم اضغط على Enter وسيكون لديك اسم اليوم.
    أدخل وظيفة vba المخصصة في ورقة العمل

تهانينا! لقد قمت للتو بإنشاء أول وظيفة محددة من قبل المستخدم. هذا هو وقت الفرح الحقيقي. أليس كذلك؟ اكتب “الفرح” في قسم التعليقات.

كيف تعمل هذه الوظيفة وإرجاع القيمة في الخلية

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

  • تقوم بإدخاله في خلية كدالة وتحديد قيمة الإدخال.
  • يقوم Excel بتشغيل التعليمات البرمجية الموجودة خلف الوظيفة ويستخدم القيمة التي أشرت إليها.
  • لديك النتيجة في الخلية.

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

working-user-defined-function

نظرًا لأنك حددت “InputDate” كوسيطة للوظيفة وعندما تدخل الوظيفة في الخلية وتحدد تاريخًا، فإن VBA يأخذ قيمة التاريخ هذه ويوفرها لوظيفة النص التي استخدمتها في التعليمات البرمجية.

وفي المثال الذي ذكرته أعلاه، التاريخ الموجود في الخلية A1 هو 01 يناير 2019.

بعد ذلك، تقوم الدالة TEXT بتحويل هذا التاريخ إلى يوم باستخدام كود التنسيق “dddddd” الذي ذكرته بالفعل في كود الدالة. وهذا اليوم الذي يتم إرجاعه بواسطة الدالة TEXT يتم تعيينه إلى “myDayName”.

لذا، إذا كانت نتيجة الدالة TEXT هي يوم الثلاثاء، فسيتم تعيين هذه القيمة إلى “myDayName”.

وهنا ينتهي تشغيل الوظيفة. “myDayName” هو اسم الوظيفة، وبالتالي فإن أي قيمة يتم تعيينها لـ “myDayName” ستكون القيمة الناتجة وستقوم الوظيفة التي أدرجتها في ورقة العمل بإرجاعها في الخلية.

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

كيفية تحسين UDF من أجل الخير

حسنًا، أنت تعرف كيفية إنشاء وظيفة VBA مخصصة.

الآن…

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

هدف…

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

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

 InputDate As Variant

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

 If InputDate = "" Then myDayName = ""

سيؤدي هذا إلى جعل الوظيفة فارغة إذا كانت الخلية التي أشرت إليها فارغة.

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

الكود سيكون:

 If IsDate(InputDate) = False Then myDateName = ""

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

 Function myDayName(InputDate As Variant) As String If InputDate = "" Then myDayName = "" Else If IsDate(InputDate) = False Then myDateName = "" Else myDayName = WorksheetFunction.Text(InputDate, "dddddd") End If End If End Function

وإليك كيفية العمل الآن: أنا متأكد من أنه لا يزال بإمكانك إجراء تغييرات على هذه الميزة، ولكنني متأكد من أنك تفهم وجهة نظري بوضوح.

كيفية استخدام وظيفة VBA المخصصة

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

1. ببساطة في جدول بيانات

لماذا نقوم بإنشاء وظيفة مخصصة؟ بسيط. لاستخدامها في جدول البيانات. يمكنك ببساطة إدخال UDF في جدول بيانات باستخدام علامة التساوي واسم نوع الوظيفة، ثم تحديد وسيطاتها.

إدراج وظيفة مخصصة في جدول بيانات عن طريق الكتابة

يمكنك أيضًا إدخال وظيفة معرفة من قبل المستخدم من مكتبة الوظائف. انتقل إلى علامة تبويب الصيغة ➜ إدراج وظيفة ➜ محدد من قبل المستخدم.

إدراج دالة مخصصة في ورقة عمل من صيغة

من هذه القائمة يمكنك اختيار UDF الذي تريد إدراجه.

2. استخدام الإجراءات الفرعية والوظائف الأخرى

يمكنك أيضًا استخدام وظيفة ضمن وظائف أخرى أو في إجراء “Sub”. يوجد أدناه رمز VBA الذي استخدمت فيه الوظيفة للحصول على اسم اليوم للتاريخ الحالي.

 Sub todayDay() MsgBox "Today is " & myDayName(Date) End Sub

تأكد من قراءة “نطاق UDF” لاحقًا في هذه المقالة لمعرفة المزيد حول استخدام دالة في إجراءات أخرى.

3. الوصول إلى الوظائف من مصنف آخر

إذا كان لديك UDF في مصنف واحد وتريد استخدامه في مصنف آخر أو كافة المصنفات، فيمكنك القيام بذلك عن طريق إنشاء وظيفة إضافية له. اتبع هذه الخطوات البسيطة:

  • أولاً، تحتاج إلى حفظ الملف (الذي يوجد فيه رمز الوظيفة المخصصة) كوظيفة إضافية.
  • للقيام بذلك، انتقل إلى علامة التبويب “ملف” ← حفظ باسم ← “وظائف Excel الإضافية (.xalm).”
احفظ الملف كوظيفة إضافية لاستخدام كافة الوظائف المخصصة في مصنفات العمل الأخرى
  • بعد ذلك، انقر نقرًا مزدوجًا فوق الوظيفة الإضافية وقم بتثبيتها.
انقر فوق "إضافة" لإضافة كافة الوظائف المحددة بواسطة المستخدم في مصنف آخر

هذا كل شيء. يمكنك الآن استخدام كافة وظائف VBA الخاصة بك في أي مصنف.

طرق مختلفة لإنشاء وظيفة VBA مخصصة [مستوى متقدم]

في هذه المرحلة، أنت تعرف كيفية إنشاء وظيفة مخصصة في VBA. ولكن المشكلة هي أنه عندما نستخدم الوظائف المضمنة، فإنها تأتي مع أنواع مختلفة من الوسائط.

لذلك، في هذا القسم من هذا الدليل، سوف تتعلم كيفية إنشاء UDF بأنواع الوسائط المختلفة.

  • بدون أي حجة
  • بحجة واحدة
  • مع عدة حجج
  • استخدام المصفوفة كوسيطة

… تحرك للأمام.

1. بدون أي حجج

هل تتذكر وظائف مثل NOW وTODAY حيث لا تحتاج إلى إدخال وسيطة؟

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

لنقم بإنشاء وظيفة مخصصة يمكنها إرجاع موقع الملف الحالي. وهنا هو الكود:

 Function myPath() As String Dim myLocation As String Dim myName As String myLocation = ActiveWorkbook.FullName myName = ActiveWorkbook.Name If myLocation = myName Then myPath = "File is not saved yet." Else myPath = myLocation End If End Function

تقوم هذه الوظيفة بإرجاع مسار الموقع حيث تم تخزين الملف الحالي وإذا لم يتم تخزين المصنف في أي مكان، فسوف تظهر رسالة تقول “لم يتم حفظ الملف بعد”.

إنشاء دالة محددة من قبل المستخدم بدون وسائط

الآن، إذا كنت تهتم جيدًا برمز هذه الوظيفة، فلن تحتاج إلى تحديد وسيطة (بين قوسين). لقد قمت للتو بتحديد نوع البيانات لنتيجة الوظيفة.

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

ببساطة، القيمة التي تريد استعادتها من الدالة يجب أن يتم حسابها تلقائيًا.

وفي هذه الوظيفة لديك نفس الشيء.

يقوم ActiveWorkbook.FullName بإرجاع موقع الملف ويقوم ActiveWorkbook.Name بإرجاع الاسم. ليس عليك إدخال أي شيء.

2. بحجة واحدة

لقد قمنا بالفعل بتغطية هذا الشيء من خلال تعلم كيفية إنشاء وظيفة محددة من قبل المستخدم. ولكن دعونا نتعمق قليلاً وننشئ وظيفة مختلفة. هذه هي الوظيفة التي قمت بإنشائها قبل بضعة أشهر لاستخراج عنوان URL من رابط تشعبي .

 Function giveMeURL(rng As Range) As String On Error Resume Next giveMeURL = rng.Hyperlinks(1).Address End Function

الآن في هذه الوظيفة لديك وسيطة واحدة فقط.

وظيفة مخصصة بسيطة لاستخراج URL من ارتباط تشعبي

عندما تقوم بإدخال هذا في خلية ثم تحدد الخلية التي يوجد بها ارتباط تشعبي، فسوف تقوم بإرجاع عنوان URL للارتباط التشعبي. الآن في هذه الوظيفة يتم العمل الرئيسي عن طريق:

 rng.Hyperlinks(1).Address

لكن rng هو ما تحتاج إلى تحديده. قل “سهل” في قسم التعليقات إذا وجدت أن إنشاء UDF أمر سهل.

3. مع عدة حجج

عادةً، تحتوي معظم وظائف Excel المضمنة على وسائط متعددة. لذلك من الضروري أن تتعلم كيفية إنشاء دالة مخصصة باستخدام وسائط متعددة.

لنأخذ مثالاً: تريد إزالة أحرف معينة من سلسلة نصية وتريد الاحتفاظ ببقية الجزء.

حسنًا، لديك وظائف مثل RIGHT وLEN التي ستستخدمها في هذه الوظيفة المخصصة. لكن هنا لا نحتاج لذلك. كل ما نحتاجه هو وظيفة مخصصة باستخدام VBA.

إذن، هذه هي الوظيفة:

 Function removeFirstC(rng As String, cnt As Long) As String removeFirstC = Right(rng, Len(rng) - cnt) End Functio

حسنا ثم أنظر:

دالة vba مع وسائط متعددة

في هذه الدالة لديك وسيطتان:

  • rng: في هذه الوسيطة، يجب عليك تحديد الخلية التي تريد إزالة الحرف الأول من النص منها.
  • cnt: وفي الوسيطة تحتاج إلى تحديد عدد الأحرف المراد إزالتها (إذا كنت تريد إزالة أحرف متعددة من النص).

عندما تقوم بإدخاله في خلية، فإنه يعمل كما يلي:

3.1 إنشاء دالة معرفة من قبل المستخدم باستخدام الوسائط الاختيارية والمطلوبة

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

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

ماذا تعتقد؟

قل “نعم” في قسم التعليقات إذا كنت تتفق معي في هذا.

حسنا ثم انظر. لجعل الوسيطة اختيارية، ما عليك سوى إضافة “اختياري” قبلها. مثل هذا تماما:

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

4. استخدم المصفوفة كوسيطة

هناك عدد قليل من الوظائف المضمنة التي يمكن أن تأخذ وسيطات الصفيف ويمكنك أيضًا إنشاء وظيفة VBA المخصصة الخاصة بك للقيام بذلك.

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

 Function addNumbers(CellRef As Range) Dim Cell As Range For Each Cell In CellRef If IsNumeric(Cell.Value) = True Then Result = Result + Cell.Value End If Next Cell addNumbers = Result End Function

في كود الدالة أعلاه، استخدمنا نطاقًا صحيحًا من A1:A10 بدلاً من قيمة واحدة أو مرجع خلية.

وظيفة vba مخصصة لإضافة رقم القائمة

باستخدام حلقة FOR EACH، سيتم التحقق من كل خلية في النطاق وجمع القيمة إذا كانت الخلية تحتوي على رقم.

نطاق الوظيفة المعرفة من قبل المستخدم

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

1. الجمهور

يمكنك جعل وظيفتك المخصصة عامة بحيث يمكنك استدعاؤها في كافة أوراق العمل الموجودة في المصنف. لجعل الوظيفة عامة، ما عليك سوى استخدام كلمة “عامة”، كما هو موضح أدناه.

أضف pubilc قبل اسم الوظيفة المخصصة لـ vba

لكن الوظيفة هي وظيفة عامة بشكل افتراضي إذا لم تجعلها خاصة. في جميع الأمثلة التي تناولناها، كلها عامة.

2. خاص

عندما تجعل إحدى الوظائف خاصة، يمكنك استخدامها في الإجراءات الموجودة في نفس الوحدة.

أضف خاصًا قبل اسم الوظيفة المخصصة vba

لنفترض أنه إذا كان لديك UDF الخاص بك في “Module1″، فيمكنك استخدامه فقط في الإجراءات الموجودة في “Module1”. ولن يظهر في قائمة وظائف ورقة العمل (عند استخدام العلامة = ومحاولة كتابة الاسم) ولكن لا يزال بإمكانك استخدامه عن طريق كتابة اسمه وتحديد الوسائط.

حدود الوظيفة المحددة من قبل المستخدم [UDF]

UDFs مفيدة للغاية. لكنها محدودة في حالات معينة. فيما يلي بعض الأشياء التي أريدك أن تلاحظها وتتذكرها عند إنشاء وظيفة مخصصة في VBA.

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

هل هناك فرق بين الوظيفة المضمنة والوظيفة المحددة من قبل المستخدم؟

أنا سعيد لأنك سألت. حسنًا، للإجابة على هذا السؤال، أريد أن أشارككم بعض النقاط التي أعتقد أنها مهمة بالنسبة لكم.

  1. أبطأ من المدمج: إذا قارنت سرعة الوظائف المضمنة ووظائف VBA، فستجد أن الأولى سريعة. السبب وراء ذلك هو أن الوظائف المضمنة مكتوبة بلغة C++ أو FORTRAN.
  2. صعوبة مشاركة الملفات: غالبًا ما نشارك الملفات عبر البريد الإلكتروني والسحابة. إذا كنت تستخدم أيًا من الوظائف المخصصة، فستحتاج إلى مشاركة هذا الملف بتنسيق “xlam” حتى يتمكن شخص آخر أيضًا من استخدام وظيفتك المخصصة.

ولكن كما قلت أعلاه في “لماذا يجب عليك إنشاء وظيفة Excel مخصصة”، هناك مواقف محددة يمكنك فيها اختيار وظيفة VBAcustom.

خاتمة

يعد إنشاء وظيفة محددة من قبل المستخدم أمرًا بسيطًا. كل ما عليك فعله هو استخدام “Function” قبل الاسم لتعريفها كدالة، وإضافة وسائط، وتعيين نوع بيانات الوسائط، ثم تعيين نوع البيانات للقيمة المرجعة.

رسم توضيحي بسيط لفهم كيفية إنشاء وظيفة يحددها المستخدم

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

ولكن الآن قل لي شيئا واحدا.

UDFs مفيدة، ما رأيك؟

يرجى مشاركة آرائكم معي في قسم التعليقات. أحب أن أسمع منك، ومن فضلك لا تنسى مشاركة هذا المنشور مع أصدقائك، أنا متأكد من أنهم سيقدرون ذلك.

الدروس ذات الصلة

اضف تعليق

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *