المدمج في الوظائف الرياضية البصرية. ميزات المدمج في Visual Basic. اكتب check وظائف

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

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

بناء الجملة:

اسم وظيفة ()
"بيانات VBA.
وظيفة نهاية.

الوظيفة هي الكلمة الأساسية تعلن عن بداية الوظيفة.

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

Arglist - قائمة الحجج هذه الوظيفة، عنصر اختياري.

اكتب - أي نوع من قيمة وظيفة العودة. إذا لم يتم تعريف النوع، فإن النتيجة التي ترجع إجراءات الوظيفة لديها نوع من البديل.

الاسم \u003d التعبير - تعيين وظيفة تشير إلى VBA، والتي يجب أن تعيد القيمة الوظيفة، عنصر اختياري. ومع ذلك، يجب عليك دائما تضمين مشغل الواجب في إجراءات الوظيفة.

وظيفة النهاية - الكلمات الرئيسية التي تنهي الوظيفة.


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

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


فيما يلي إدراج استخدام إجراءات أبسط وظيفة، مما يؤدي إلى إزالة الثغرات الأولية والأخيرة وحسسب عدد الأحرف في التعبير.



بدون استخدام الوظيفة، ستبدو القائمة مثل هذا:



من هذا المثال البسيط، أعتقد أن الفكرة الأساسية لاستخدام الوظائف التي تعمل بوظيفة الوظيفة واضحة - تحسين قابلية قراءة رمز البرنامج واختصارها (بمعنى آخر، يتم كتابة إجراءات الوظيفة عند نفس رمز "القطعة" هو أكثر من 2-3 مرات في رمز البرنامج). في الواقع، إذا كانت وظيفة إجراءاتنا تتألف من سطر واحد، ولكن دعنا نقول، من أصل 10 خطوط؛ وسيستخدم رمز البرنامج هذا الإجراء 5 مرات، فإن إجمالي القائمة في البرنامج سيكون أقل من 38 خطا.


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

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

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

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

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

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

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

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

الحجج

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

الفرعية Addtocells (أنا كعدد صحيح) ... نهاية الفرعية

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

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

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

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

الفرعية addtocells (اختياري أنا كعدد صحيح \u003d 0)

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

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

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

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

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

مع الكلمات الرئيسية byval. أو byref. في إعلان الإجراء، يمكنك أن تسأل كيف يتم نقل الوسيطة إلى الإجراء. يتم عرض هذا أدناه الأمثلة:

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

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

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

محرر VBA يتعرف على الإجراء دور.

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

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

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

هذا ممتاز مصور في المثال التالي.

مثال إجراءات VBA "وظيفة": نحن نفذوا عملية رياضية مع 3 أرقام

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

Summinus Function (DNUM1 مزدوجة، DNUM2 مزدوجة، DNUM3 مثل Summinus مزدوج \u003d DNUM1 + DNUM2 - وظيفة نهاية DNUM3

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

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

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

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

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

Sub Main () Dim Threat Total كإجمالي مزدوج \u003d Summinus (5، 4، 3) نهاية الفرعية

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

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

Summinus (10، 5، 2)

إجراء VBA "Sub"

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

الفرعية ... نهاية الفرعية

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

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

sub format_centered_and_asized (overnsize اختياري كأذندة \u003d 10) اختيار. HorizontArignment \u003d XLCenter Selfection.verticalyment \u003d XLCenter

هذا الإجراء الفرعية. يؤدي الإجراءات، ولكن لا يعيد النتيجة.

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

VBA إجراءات "SUB": مثال 2. محاذاة في الوسط وتطبيق الخط الغامق على الخط في النطاق المخصص من الخلايا

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

Sub Format_Centered_and_Bold () Selection.horizontArignment \u003d XLCenter Selection.verticaligienment \u003d XLCenter Selection.font.bold \u003d نهاية TRUE

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

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

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

Sub Main () Call Format_Centered_and_sized (20) نهاية الفرعية

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

Sub Main () Call Format_Centered_and_sized (Arg1، Arg2، ...) نهاية الفرعية

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

إجراء الفرعية. لا يمكن إدخالها مباشرة في خلية ورقة Excel، كما يمكن القيام به مع الإجراء دور.لأن الإجراء الفرعية. لا يعيد قيمة. ومع ذلك، الإجراءات الفرعية.عدم وجود حجج وأعلن كما عام (كما سيتم عرض أدناه)، ستكون متاحة لمستخدمي ورقة العمل. وبالتالي، إذا كانت الإجراءات البسيطة التي تمت مناقشتها أعلاه الفرعية. إدراجها في الوحدة النمطية في محرر Visual Basic، ثم الإجراء format_centered_and_bold. ستكون متاحة للاستخدام في قائمة عمل دفتر Excel، والإجراء format_centered_and_sized. - لن تكون متاحة، كما له حجج.

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

  • انقر Alt + F8. (اضغط على المفتاح بديل. وإلقاء الضغط عليه الضغط عليه، اضغط على المفتاح F8.).
  • في قائمة وحدات الماكرو التي تظهر، حدد الشخص الذي تريد تشغيله.
  • انقر نفذ (يركض)

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

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

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

نطاق إجراء VBA

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

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

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

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

دالة VAT_AMOUNT (SVAT_RATE باعتبارها واحدة) مثل VAT_AMOUNT \u003d 0 إذا svat_rate<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function

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

الجدول 6.1. الوظائف الرياضية المدمجة
دور وصف
عضلات المعدة قيمه مطلقه
atn. arctanens.
كوس. أرقام جيب التمام
إكسب إرجاع الرقم E (2.718282)، أقيمت لدرجة وظيفة الحجة.
يصلح إرجاع الجزء الكسري من الرقم وإرجاع الكل. نتيجة لذلك، للأرقام الإيجابية، يكون الرقم أقل من الإدخال (الإصلاح (2.5) إرجاع 2)، لسالب - أكبر (إصلاح (-2.5) العودة -2)
int. إرجاع الجزء الكسري من الرقم وإرجاع الكل. للإيجابية، فإن الرقم أقل دخلت (2.5) سيعود 2)، للسلبي - فقط أصغر (int (-2.5) العودة -3).
سجل. عائدات اللوغاريتم الطبيعي أعداد
rnd. إرجاع عدد عشوائي من النوع الأول، وهذا الرقم يتراوح بين 0 و 1. لتهيئة مولد أرقام عشوائية، استخدم التوجيه العشوائي - يجب أن يسمى قبل الاتصال rnd..
SGN. تم تصميم الوظيفة لتحديد علامة الرقم. إذا كان الرقم إيجابيا - إرجاع 1. للحصول على صفر، فستظهر الوظيفة 0 لعدد سالب -1.
الخطيئة. التجويف
SQR. الجذر التربيعي
تان. الظل

دعونا نفكر في مثال. أضف إلى مستند Microsoft Word، اتصل به CMD_CALC، ونحن نكتبها كحساسبة وإضافة التعليمات البرمجية التالية (سرد 6.1) توضيح عمل الوظائف المدروسة.

Dim dblnumber كمضاعف "متغير يستخدم في حسابات Varresult Disp" Variant Type Dblnumber \u003d Val (INPUTBOX ("أدخل الرقم"))) "احسب القيمة المطلقة للرقم" الأول "أولا تعيين نتيجة Varresult متغير" التالي - الانسحاب نتيجة موقعة في "الرسائل" سوف نستخدم علامة "+" ل "تسلسل الصف، في حالات أخرى" سنصل الوظائف مباشرة "في msgbox" e "يرجى ملاحظة أننا نقوم بتحويل" القيم الرقمية إلى السلاسل باستخدام String Function varresult \u003d ABS (dblnumber) msgbox ("القيمة المطلقة" + _ str (dblnumber) + "يساوي" + str (varresult) "arctangent msgbox (" arctangence "+ _ str (dblnumber) +" يساوي "+ _ str ( Atn (dblnumber))) "جيبشوما جيبكس (" جيبشويز "+ _ str (dblnumber) +" يساوي "+ _ _ str (cos (dblnumber)))" E في درجة رقم MsgBox المدخل ("الرقم E إلى الدرجة "+ _ str (dblnumber) +" يساوي "+ _ str (exp (dblnumber)))" إصلاح msgbox ("متعة العملية المدن FIHE for "+ _ str (dblnumber) +" يساوي "+ _ str (fix (dblnumber)))" int msgbox ("نتيجة وظيفة int ل" + _ str (dblnumber) + "يساوي" + _ شارع (int (dblnumber))) "logarithm الطبيعي msgbox (" logarithm الطبيعي "+ _ str (dblnumber) +" يساوي "+ _ str (سجل (dblnumber)))" نحصل على عدد قليل من أرقام عشوائية "الرقم الأول - من 0 إلى 1 "الثاني - من 0 إلى 10." ثالث - من 25 إلى 100 "الرابع - ككل من 0 إلى 34 عشوائي msgbox (" مجموعة من الأرقام العشوائية: "+ _ str (rnd ()) +"، " _ str (rnd () * 10) + "،" + _ str (rnd () * 75 + 25) + "+ _ str (int (rnd () * 34)))" وظيفة SGN MsgBox ("SGN's النتيجة ل "+ _ str (dblnumber) +" يساوي "+ _ str (sgn (dblnumber))" msgbox ("الجيوب الأنفية" + _ str (dblnumber) + "+" + _ _ str (sin (dblnumber)) "square msgbox جذر ("الجذر التربيعي" + _ str (dblnumber) + "يساوي" + _ str (sqr (dblnumber))) "msgbox msgbox (" mashent "+ _ _ str (dblnumber) +" يساوي "+ _ TR (تان (dblnumber))) سرد 6.1. انقر فوق Processer Processer CMD_CALC أزرار

لاحظ الخوارزمية للحصول على رقم عشوائي موجود في نطاق محدد باستخدام الوظيفة rnd.وبعد لنفترض أننا بحاجة إلى الحصول على عدد عشوائي من 15 إلى 40. نبدأ، عددا من 0 إلى 40. من الواضح أننا سنحتاج إلى هذا التحدي لهذا: rnd () * 40.

إلى "رفع" مستوى أصغر عدد عشوائي تم إرجاعه بواسطة التعبير، إلى 15 عاما، سنفعل ما يلي.

أولا، نقوم بحساب الفرق 40 و 15 - سنكون ننجح 25. وهذا يعني الحصول على عدد عشوائي من 0 إلى 25، يمكنك استخدام المكالمة rnd () * 25.

ثانيا، أضف إلى عدد عشوائي الناتج 15. الآن التعبير للحصول على عدد عشوائي من 15 إلى 40 يبدو وكأنه هذا: rnd () * 25 + 15.

تحقق من هذا البيان على صحة. دور rnd.، كما تعلمون، إرجاع أرقام عشوائية من 0 إلى 1. إذا ترجع الوظيفة 0 - ستكون نتيجة حساب التعبير مساوية 15 (0 * 25 + 15). إذا عودت الوظيفة 1 - ستكون النتيجة تساوي 40 (25 * 1 + 15). القيم الوسيطة rnd. سوف يعطيون الأرقام العشوائية المرغوبة بين 15 و 40.

اضغط على زر CMD_LEN (إدراج 6.2) سيحتوي على حل للمهمة التالية: لإبلاغ المستخدم بطول النص الذي تم إدخاله. من الواضح، لحل هذه المهمة، سنحتاج إلى وظيفة LEN.

"dim str_inpstr كأداة سلسلة الإدخال سلسلة" متغير لتخزين طول الطول الموجود طول lng_strlen dim_inpstr lng_inptr \u003d inputbox ("أدخل سلسلة") "حساب طول lng_strlen \u003d طول سلسلة لين (str_inpstr) msgbox (" طول المدخل خط: _ "+ _ str_inpstr +" _ يساوي "+ str (lng_strlen) + _" الرموز ") سرد 6.2. مثال باستخدام وظيفة LEN

في التين. 6.2. يمكنك أن ترى نتيجة حساب طول السلسلة.


تين. 6.2.

الآن سنتعامل مع تحويل الرموز - LCASE ووظائف UCASE (قائمة 6. 3. 3.).

"تخزين Variab vit_inpstr كصف سلسلة الإدخال" متغير صف سلسلة "متغير لتخزين سلسلة مخفيفة تغيير Str.Newstr كسلسلة Str_inpstr \u003d Inputbox (" أدخل النص ")" في str_newster، سيتم إدخال السلسلة "التي يتم استبدال جميع الحروف الكبيرة بكل خط str_newstr \u003d LCACE (str_inpstr) msgbox ("string string:" + str_newster) "الآن في str_newstr، ستكون هناك نفس السلسلة" التي أصبحت جميع الحروف مثقلة بواسطة str_newstr \u003d ucase (str_inpstr) msgbox ("السطر المطلوب:" + str_newstr) سرد 6.3. مثال على استخدام وظائف LCASE و UCE

في قائمة الانتظار - أحرف القطع - متوسط، LTRIM، RTRIM، يسار، الميزات اليمنى (إدراج 6.4.) من بين هذه الوظائف هي أقوى منتصف استخدامها، يمكنك القيام بالكثير من الأشياء.

"تخزين متغير DIM STR_INPSTR كسلسلة" متغير تخزين الأحرف المقطوعة DIM_NEWSTR كسلسلة "تعيين سلسلة من المريحة التي ستكون مناسبة للعمل str_inpstr \u003d" Hello، Alexander "" وظائف إزالة الأشقاء "عند سحب سلسلة قبل ذلك بدأت "والرمز النهائي" _ "_" من أجل "مرئية أفضل" أو لا توجد فجوات MSGBOX غير المفقودة ("نحن نعمل مع هذه السلسلة:" + _ "_" + str_inpstr + "_") "Ltrim - تعيين نتائج "معلومات المتغير والعرض" العمل "معلومات متغيرة وعرضها في msgbox str_newstr \u003d ltrim (str_inpstr) msgbox (" نتائج ltrim: "+ _" _ "+ str_newster +" _ ")" rtrim msgbox ("rtrim نتيجة:" + _ "_" + Rtrim (str_inpstr) + "_") "تقليم msgbox (" تقليم نتيجة: "+ _" _ "+ تقليم (str_inpstr) +" _ ")" _ ")" اليسار - قطع من أحرف STR_INPSTR 12 "من المقاصة مسبقا" من المساحات الأولية ل STR_NEWSTR \u003d اليسار (LTRIM (strim (strim_inpstr)، 12) msgbox ("الأحرف ال 12 الأولى على اليسار:" + _ str_newstr) "الأيمن - بالمثل، قص 9 أحرف إلى str.newstr \u003d اليمين \u003d اليمين (rtrim (strim (strim (strim (strim (strim (strim (strim (strim (strim (strim fertstr)، 9) msgbox (" أول 9 أحرف إلى اليمين: "+ _ str_newster)" وظيفة منتصف - للبدء في سحب حرف واحد "من موقف الصف الثاني والخامس عشر "النزول بشكل مبادلة من المساحات الزائدة" في البداية وفي نهاية str_newster \u003d mid (trim (str_inpstr)، 2، 1) msgbox ("الحرف الثاني من السلسلة المدخلة:" + _ str_newstr) str_newstr \u003d MID (TRIM (TRIM (STR_INPSTR)، 15، 1) MSGBOX ("الخط الخامس عشر تم إدخال الرمز:" + _ str_newster) "سحب 5 أحرف، بدءا من 15 Str_Newster \u003d منتصف الرمز (تقليم (str_inpstr)، 15، 5) msgbox (" خمسة أحرف سلسلة من الموضع الخامس عشر: "+ _ str_newstr) سرد 6.4. مثال استخدام ميزات لقطع الأحرف

الآن النظر في أمثلة الوظائف

دور. اسم ([قائمة_ الحجج])
[تعليمات]
[اسم = التعبير]
[تعليمات]
[اسم = التعبير]
وظيفة نهاية.

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

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

يمكن أن يكون سبب الوظيفة بأحد الطرق التالية:

  • اتصل به من إجراء آخر؛
  • قم بتضمينها في صيغة ورقة العمل؛
  • تشمل بتنسيق التنسيق الشرطي؛
  • اتصل به في نافذة Debug VBE ( فوري.). عادة ما يتم تطبيق هذه الطريقة في مرحلة الاختبار (الشكل 3).

تين. 3. استدعاء وظيفة في نافذة التصحيح

على عكس الإجراءات، لا يتم عرض الوظائف في مربع الحوار. دقيق (قائمة مطور –> الرمز –> وحدات الماكرو؛ أو Alt + F8).

حجج الوظائف

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

وظائف دون الحجج

يحتوي Excel على العديد من الوظائف المدمجة التي لا تحتوي على حجج، على سبيل المثال، adhesis، اليوم، TDAT. من السهل إنشاء وظائف مستخدم مماثلة. على سبيل المثال:

وظيفة المستخدم ()
"إرجاع اسم المستخدم
المستخدم \u003d application.username.
وظيفة نهاية.

عند إدخال Formula \u003d المستخدم ()، ترجع الخلية اسم المستخدم الحالي (الشكل 4). ملاحظة: عند استخدام الوظيفة دون وسيطة في صيغة ورقة العمل، يجب عليك تحديد الأقواس الفارغة.

تين. 4. Formula \u003d المستخدم () إرجاع اسم المستخدم الحالي

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

تطبيق صحيح.

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

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

وظيفة staticrand ()
"إرجاع رقم عشوائي، غير متغير عند إعادة حساب الصيغ
staticrand \u003d rnd ()
وظيفة نهاية.

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

وظيفة واحدة وظيفة

تين. 5. جدول اللجنة

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

إذا (و (D1\u003e \u003d 0؛ D1<=9999,99);D1*0,08;ЕСЛИ(И(D1>\u003d 10،000؛ D1<=19999,99);D1*0,105; ЕСЛИ(И(D1>\u003d 20000؛ D1<=39999,99);D1*0,12;ЕСЛИ(D1>\u003d 40000؛ D1 * 0.14)))

هذه الصيغة غير ناجحة لعدة أسباب. أولا، من الصعب، ليس من السهل الاتصال به، وفي المستقبل تحرير. ثانيا، يتم تحديد القيم بدقة في الصيغة، ولهذا السبب يصعب تغييرها. من الأفضل استخدام HDP (الشكل 6).

تين. 6. استخدام وظيفة PRD لحساب العمولة

حتى أفضل (ثم لا تحتاج إلى استخدام جدول مطابق) إنشاء وظيفة مخصصة:

عمولة الوظيفة (المبيعات)
const tier1 \u003d 0.08
const tier2 \u003d 0.105
const tier3 \u003d 0.12
const tier4 \u003d 0.14
"حساب اللجان من المبيعات
حدد مبيعات الحالة.
الحالة 0 إلى 9999.99: عمولة \u003d مبيعات * المستوى 1
الحالة 10000 إلى 19999.99: العمولة \u003d المبيعات * المستوى 2
القضية 20000 إلى 39999.99: عمولة \u003d مبيعات * Tier3
القضية هي\u003e \u003d 40000: عمولة \u003d مبيعات * Tier4
نهاية الاختيار.
وظيفة نهاية.

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

عمولة (B2)

وظيفة DoubleCell ()
DoubleCell \u003d Range ("al") * 2
وظيفة نهاية.

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

وظيفة DoubleCell (خلية)
DoubleCell \u003d الخلية * 2
وظيفة نهاية.

وظيفة مع اثنين من الحجج

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

لجنة الوظيفة 2 (المبيعات، سنوات)
"حساب لجنة المبيعات القائمة على
"طول التجربة
اللجنة 2 \u003d اللجنة (المبيعات) + _
(العمولة (المبيعات) * سنوات / 100)
وظيفة نهاية.

وظيفة مع الوسيطة في شكل صفيف

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

وظيفة Sumarray (قائمة) مزدوجة
خافت البند كما البديل
sumarray \u003d 0.
لكل عنصر في القائمة
إذا كانت الورش وظيفي.isnumber (البند) ثم _
Sumarray \u003d Sumarray + Item
العنصر التالي.
وظيفة نهاية.

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

وظيفة مع الحجج الاختيارية

العديد من وظائف Excel المضمنة لها حجج اختيارية. مثال - وظيفة LEVSMB التي ترجع الأحرف من الحافة اليسرى من الخط. لديها بناء الجملة التالي:

levsimv ( النص، count_simvolov.)

الحجة الأولى إلزامية، على النقيض من الثانية. إذا لم يتم تحديد الوسيطة الثانية، تقترح Excel القيمة 1.

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

دالة User2 (أحرف كبيرة اختيارية مثل البديل)
إذا ismissing (الأحرف الكبيرة) ثم الأحرف الكبيرة \u003d خطأ
user2 \u003d application.username.
إذا كانت الأحرف الكبيرة ثم user2 \u003d ucase (user2)
وظيفة نهاية.

إذا كانت الوسيطة خاطئة أو حذفها، فسيتم إرجاع اسم المستخدم دون أي تغييرات. إذا كانت الوسيطة صحيحة، فسيتم إرجاع اسم المستخدم إلى رموز الحالة العليا (باستخدام وظيفة UCASE VBA). انتبه إلى مشغل الوظائف الأول - أنه يحتوي على وظيفة ISMISSING VBA، والتي تحدد وجود حجة. إذا كانت الحجة مفقودة، فإن المشغل يعين المتغير الأحرف الكبيرة إلى False (افتراضي).

وظيفة VBA عودة صفيف

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

ميزة Monthames هي مثال بسيط على تطبيق وظيفة الصفيف في وظيفة المستخدم.

وظيفة MonthNames ()
HoneNames \u003d صفيف ("يناير"، "فبراير"، "مارس"، _
"أبريل"، "مايو"، "يونيو"، "يوليو"، "أغسطس"،
" سبتمبر اكتوبر نوفمبر ديسمبر "
وظيفة نهاية.

تتم إرجاع ميزة Monthnames مجموعة أفقية من أسماء الأشهر. في ورقة العمل، حدد 12 خلية، أدخل الصيغة \u003d MonthNames () واضغط وبعد إذا كنت بحاجة إلى إنشاء مجموعة رأسية من أسماء الأشهر، قم بتمييز النطاق العمودي، وأدخل Formula \u003d Tracs (MonthNames ()) واضغط .

وظيفة إرجاع قيمة الخطأ

  • xLERRDIVO (للخطأ # الأعمال / 0!)؛
  • xlerrna (للخطأ # N / D)؛
  • xLERRNAME (خطأ # الاسم؟)؛
  • xlerrnull (emfed # فارغة!)؛
  • xLERRNUM (للعناف # رقم!)؛
  • xLERRREF (للخطأ # مرجع!)؛
  • xLERRVALUE (للخطأ # يعني!).

فيما يلي ميزة RemoveVowels المحولة (انظر المثال في البداية). يتم استخدام تصميم IF-Ten لأداء إجراء بديل في الحالة عندما تكون الوسيطة ليست نصية. تستدعي هذه الميزة وظيفة Excel Etext تحدد ما إذا كانت الوسيطة تحتوي على النص. إذا كانت الخلية تحتوي على نص، فستظهر الوظيفة نتيجة طبيعية. إذا كانت الخلية لا تحتوي على نص (أو فارغ)، فستظهر الوظيفة خطأ # يعني!

وظيفة RemoveVowels3 (TXT) كمغير
"حذف جميع رسائل حرف العلة من وسيطة TXT
"إرجاع خطأ # يعني!، إذا كانت الوسيطة ليست سلسلة
خافت أنا طويلة
refectvowels3 \u003d "
إذا application.worksheetfunction.istext (TXT) ثم
لأني \u003d 1 إلى لين (TXT)
إن لم يكن uces (منتصف (txt، i، 1)) مثل "" ثم
RemoveVowels3 \u003d refectvowels3 & mid (txt، i، 1)
إنهاء إذا
بعدها انا.
آخر.
RemoveVowels3 \u003d CIVERR (XLERRVALUE)
إنهاء إذا
وظيفة نهاية.

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

وظيفة مع عدد غير محدد من الحجج

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

وظيفة Simplesum (ParamArray Arglist () Variant)
الخلية القاتمة مثل النطاق
قاتيم arg كما البديل
لكل arg في arglist
لكل خلية في arg
Simplesum \u003d Simplesum + خلية
الخلية التالية.
القادم arg.
وظيفة نهاية.

وظائف تصحيح الأخطاء

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

  • ضع وظيفة MSGBOMS في أماكن مهمة لمراقبة قيم المتغيرات الفردية.
  • اختبار الوظيفة عن طريق الاتصال به من الإجراء، وليس في صيغة ورقة العمل. يتم عرض الأخطاء في عملية التنفيذ بالطريقة المعتادة.
  • تحديد نقطة التوقف في الوظيفة وعرض وظيفة خطوة بخطوة. في هذه الحالة، يمكنك استخدام جميع أدوات التصحيح القياسية. لإضافة نقطة توقف، ضع المؤشر في المشغل الذي تقرر فيه إيقاف التنفيذ مؤقتا، وحدد الأمر تصحيح. –> تبديل نقطة توقف. (تصحيح –> وقف النقطة) أو انقر. .
  • استخدم أحد المشغلين المؤقتين طباعة واحد أو متعددين في البرنامج لعرض القيم في النافذة. فوري. محرر VBA. على سبيل المثال، لمراقبة القيمة المتغيرة للسورة، استخدم الطريقة التالية:

تين. 7. استخدم نافذة Debug لعرض النتائج عند إجراء وظيفة.

في هذه الحالة، يتم عرض قيم اثنين من المتغيرات، CH و I في نافذة Debug ( فوري.) كلما وجد برنامج تشغيل Debug.Print في البرنامج. ضع المؤشر إلى أي إجراء اختبار () واضغط F5. في التين. 7 يوضح النتيجة للحالة عندما تقبل الوظيفة حجة TUSCONARIZONA.

باستخدام طريقة الماكرات

يمكنك استخدام طريقة الماكرات الخاصة بكائن التطبيق، والذي يسمح لك بتمكين وظائف وظائف Excel المضمنة. تتيح لك هذه الطريقة:

  • إضافة وصف وظيفة (بدءا من Excel 2010؛
  • حدد فئة الوظائف؛
  • أضف وصفا لحجج الوظيفة.

Sub Provefunction ()
Dim Funcname كسلسلة
خافت funcdesc كسلسلة
خافت funccat طالما
dim arg1desc كسلسلة، arg2desc كسلسلة
funcname \u003d "رسم"
funcdesc \u003d "محتويات مجموعة عشوائية"
functcat \u003d 5 "الروابط والمصفوفات
ARG1DESC \u003d "النطاق الذي يحتوي على القيم"
arg2desc \u003d "(اختياري) إذا كاذبة أو غائبة، _
لا يتم إعادة حساب وظيفة RND. "
ARG2DESC \u003d ARG2DESC & "إذا كان هذا صحيح، يتم إعادة حساب وظيفة RND"
Arg2DESC \u003d ARG2DESC & "مع أي تغيير على ورقة."
تطبيق. macrooptions _
ماكرو: \u003d funcname، _
الوصف: \u003d funcdesc، _
الفئة: \u003d funccat، _
الحجارة: \u003d صفيف (ARG1DESC، ARG2DESC)
نهاية الفرعية.

في التين. 8 يظهر مربعات الحوار ماجستير في الوظائف و وظيفة الحججبعد تنفيذ الإجراء Provefunction ().

تين. 8. نوع مربعات الحوار ماجستير في الوظائف و وظيفة الحجج لدالة المستخدم

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

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

باستخدام الوظائف الإضافية لتخزين وظائف المستخدم

إذا كنت ترغب في ذلك، يمكنك توفير وظائف المستخدم المستخدمة بشكل متكرر في ملف الوظيفة الإضافية. الميزة الرئيسية لهذا النهج هي كما يلي: وظائف يمكن تطبيق الوظائف في الصيغ دون محدد اسم الملف. لنفترض أن لديك وظيفة مستخدم zapspaces؛ يتم تخزينها في ملف myfuncs.xlsm. لتطبيقه في صيغة كتاب عمل آخر (غير myfuncs.xlsm)، يجب عليك إدخال الصيغة التالية: \u003d myfuncs.xlsm! zapspaces (a1: c12).

إذا قمت بإنشاء وظيفة إضافية بناء على ملف MyFuncs.xlsm وسيتم تحميل الوظيفة الإضافية هذه في جلسة تشغيل Excel الحالية، يمكن تخطي الرابط إلى الملف من خلال إدخال الصيغة التالية: \u003d Zapspaces (A1: C12) وبعد سيتم النظر في إنشاء المكملات الغذائية بشكل منفصل.

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

باستخدام وظائف وظائف ويندوز

يمكن ل VBA اقتراض طرق من الملفات الأخرى التي لا علاقة لها ب Excel أو VBA، على سبيل المثال، ملفات DLL (مكتبة الارتباط الحيوي - مكتبة متصلة ديناميكيا) التي يتم استخدامها بواسطة Windows والبرامج الأخرى. نتيجة لذلك، يظهر VBA القدرة على تنفيذ العمليات التي لا تتجاوز الطرق المقترضة من حدود قدرات اللغة.

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

قبل استخدام وظيفة Windows API، يجب الإعلان عنها في الجزء العلوي من وحدة البرنامج. إذا كانت الوحدة النمطية للبرنامج ليست وحدة نمطية VBA قياسية (I.E. المستخدم, ملزمة أو هذا الكتاب)، يجب الإعلان عن وظيفة API خاصة.

وظيفة API AD لديها بعض الصعوبة - يجب إعلان الوظيفة دقيقة قدر الإمكان. يشير مشغل الإعلان إلى VBA كما يلي:

  • التي وظيفة API التي تستخدمها؛
  • في أي مكتبة هناك وظيفة API؛
  • وظائف واجهة API.

بعد الإعلانات، يمكن استخدام وظيفة API في برنامج VBA.

النظر في مثال لوظيفة API التي تعرض اسم مجلد Windows (باستخدام عبارات VBA القياسية هذه المهمة مستحيلة في بعض الأحيان). لتبدأ، سنعلق وظيفة API:

أعلن وظيفة Ptrsafe GetWindowsDirectorya Lib "Kernel32" _
(byval lpbuffer كسلسلة، byval nsize طالما

تتم إرجاع هذه الميزة وجود حججتين اسم المجلد الذي تم تثبيت نظام تشغيل Windows. بعد استدعاء هذه الوظيفة، سيتم تخزين مجلد Windows في متغير LPBUffer، وطول سلسلة الطول الموجود في متغير NSIZE.

يعرض المثال التالي النتيجة في نافذة الرسائل:

subwindowsdir ()
خافت WinPath كسلسلة * 255
خافت ويندر كسلسلة
WinPath \u003d الفضاء (255)
Windr \u003d اليسار (WinPath، GetWindowsDirectorya
(WinPath، Len (WinPath)))
msgbox windriir، vBinformation، "دليل Windows"
نهاية الفرعية.

أثناء عملية التنفيذ، يعرض الإجراء showwindowsdir نافذة الرسالة مع موقع مجلد Windows.

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

وظيفة Windowsdir () كسلسلة
"اسم مجلد ويندوز
خافت WinPath كسلسلة * 255
WinPath \u003d الفضاء (255)
Windowsdir \u003d اليسار (winpath، getwindowsdirectorya _
(WinPath، Len (WinPath)))
وظيفة نهاية.

بعد إعلان هذه الميزة، يمكنك الاتصال به من إجراء آخر: MsgBox WindowsDir (). يمكنك أيضا استخدام هذه الميزة في صيغة ورقة العمل: \u003d WindowsDir ().

انتباه! لا تفاجأ بالفشل في النظام عند استخدام وظائف Windows API في VBA. احفظ عملك مقدما قبل الاختبار.

تحديد حالة المفتاح

لنفترض أنك كتب ماكرو VBA الذي سيتم تنفيذه باستخدام الزر الموجود على شريط الأدوات. من الضروري أن يتم تنفيذ هذا الماكرو بشكل مختلف، إذا كان المستخدم بعد النقر فوق الزر يحمل المفتاح وبعد لمعرفة عن كيبروك يمكنك استخدام وظيفة GetKeyState API. تقارير وظيفة GetKeystate ما إذا كان المفتاح المحدد يتم الضغط عليه. تحتوي الوظيفة على وسيطة واحدة، nvirtKey، والتي تقدم رمز المفاتيح التي تهتم بها.

فيما يلي برنامج يكشف أنه عند تنفيذ إجراء حدث Button_Click، تم الضغط على المفتاح وبعد لاحظ أنه لتحديد حالة المفتاح يتم استخدام ثابت (تلقي قيمة سداسية عشرية)، والذي يستخدم بعد ذلك كوسيطة وظيفة GetKeystate. إذا قام GetKeystate بإرجاع قيمة أقل من 0، فهذا يعني أن المفتاح الضغط عليه مفتاح خلاف ذلك غير مضغوط. يمكن ترتيب فحص مماثل لمفاتيح CTRL و ALT (الشكل 10).

تين. 10. التحقق من التحول، CTRL ومفاتيح البديل

يمكن العثور على رمز وظيفة VBA في ملف Excel المرفق.

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

يحتوي ملف نصي على إعلانات وثوابت Windows API. يمكنك فتح هذا الملف في محرر نصوص ونسخ الإعلانات المناسبة إلى وحدة VBA.

وفقا لمواد الكتاب. - M: الهليكتيك، 2013. - P. 287-323.

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

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

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

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

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

ما الفرق بين الإجراء (SUB) من الوظيفة (وظيفة)؟

الفرق الرئيسي هو أن الإجراء (SUB) يستخدم لأداء مجموعة من الأوامر، وليس المقصود بإرجاع قيمة (أو صفيف من القيم).

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

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

إنشاء وظيفة مستخدم بسيطة في VBA

دعونا إنشاء وظيفة مستخدم بسيطة على VBA ومعرفة كيفية عمل كل شيء هناك.

فيما يلي رمز الوظيفة الذي يترك الأرقام فقط من النص، وانقبام قيم الرسالة.

أرقام الوظائف (النص كسلسلة) كقاهية طويلة أنا نتيجة قاتمة طويلة كسلسلة ل i \u003d 1 to len (نص) إذا كان isnumeric (منتصف (نص، أنا، 1)) ثم النتيجة \u003d النتيجة & منتصف (النص، أنا، 1 ) الأرقام التالية \u003d CLNG (نتيجة) وظيفة نهاية

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

الآن دعونا نرى كيف تعمل الوظيفة، وحاول استخدامها في الورقة:

قبل تفكيك الوظيفة نفسها، نلاحظ لحظات ممتعة ظهرت بعد الإبداع:

  • لقد أصبح متاحا، مثل أي وظيفة مدمجة أخرى (كيفية إنشاء وظيفة مخفية، دعونا نقول لاحقا).
  • عند إدخال علامة "\u003d" والبدء في إدخال اسم الوظيفة، فإن Excel يعرض جميع المشكلات ويظهر ليس فقط الوظائف المدمجة، ولكن أيضا مخصص.

نحن تفكيك خطوة بخطوة

الآن دعونا يغرق بشدة ومعرفة كيفية إنشاء هذه الميزة. تبدأ الوظيفة من الخط

أرقام الوظيفة (كنص سلسلة) طالما

كلمة دور. يتحدث عن بداية الوظيفة، ثم يذهب اسمها، في حالتنا أعداد.

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

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

الجزء الأخير من السطر الأول طالما. يحدد نوع البيانات الذي يرجع دالة. في حالتنا، ستعود الوظيفة القيم الصحيحة. ليس من الضروري أيضا.

الصف الثاني والثالث من الوظيفة تعلن عن متغيرات داخلية إضافية وسوف نستخدمها.

خافت أنا نتيجة قاتمة طويلة كسلسلة

عامل أنا. سيتم استخدامنا لتعداد الشخصيات. متغير نتيجة لتخزين النتيجة الوسيطة الوظيفة.

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

لأني \u003d 1 إلى لين (نص)

Len هي وظيفة تحدد عدد الأحرف.

الصف الرئيسي من الوظيفة هو التحقق مما إذا كان رمز النص التالي هو الرقم وإذا كان الجواب نعم - ثم حفظه في متغير النتائج

إذا isnumeric (منتصف (نص، أنا، 1))، ثم النتيجة \u003d النتيجة & منتصف (النص، I، 1)

لهذا نحتاج إلى وظيفة isnumeric.- تعود حقيقي.إذا كان النص هو الرقم و خطأ شنيعغير ذلك.

دور منتصفيأخذ النص من الحجة أنا.الرمز (القيمة 1 يشير إلى أن الوظيفة منتصفرمز واحد فقط يأخذ) /

دور التالي - إغلاق الدورة ل كل شيء واضح هنا.

الأرقام \u003d CLNG (نتيجة)

نحن نقوم بتحويل متغير النص إلى هذه السلسلة. نتيجةالتي تحتوي على جميع أرقام الحجة نصالمعنى العددي. ونحن نقول ما نوع النتيجة يجب أن وظيفتنا أعداد.

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

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