دورات هندسية

 

 

تمرين 2 - vba وإكسل: إضافة تابع مخصص

صفحة 1 من 3 12 3 الأخيرةالأخيرة
النتائج 1 إلى 10 من 24
  1. [1]
    عبد الجواد
    عبد الجواد غير متواجد حالياً

    عضو متميز

    تاريخ التسجيل: Aug 2006
    المشاركات: 507
    Thumbs Up
    Received: 10
    Given: 0

    تمرين 2 - vba وإكسل: إضافة تابع مخصص

    السلام عليكم:

    في هذا التمرين البسيط سنستعرض كيف يمكننا الدخول إلى لغة Visual Basic for Application (اختصاراً VBA) المرفقة مع برنامج الإكسل، وكيفية إضافة توابع جديدة إلى إكسل.
    يعتبر برنامج الإكسل من أهم البرامج التي تعين المهندس في حساباته اليدوية لسهولته ولاعتماده مبدأ الجداول الممتدة، ويمكننا من خلاله إدخال علاقات رياضية معقدة يتم تنفيذها تلقائياً فور تغيير أي خلية.
    يحوي إكسل كثيراً من التوابع والأدوات المفيدة ولكن مع هذا قد ينقصنا تابع ما أو أداة ما، وهذا أمر طبيعي، لذلك زودت مايكروسوفت هذا البرنامج بلغة برمجة وهي VBA لتمكن المستخدم من كتابة توابعه وأدواته بنفسه.
    في هذا التمرين سنتعرض للنقاط التالية:
    - الدخول إلى VBA
    - كتابة تابع جديد واستخدامه في إكسل

    المستوى : مبتدئ

    المهارات المطلوبة:
    - معرفة بسيطة بلغة Visual Basic أي (VB)
    - معرفة باستخدام أوامر إكسل الأساسية.

    1- الدخول إلى VBA من إكسل:
    تأكد أن برنامج إكسل يعمل ونافذته الرئيسية مفعلة، ثم اضغط Alt+F11، وهي نفس طريقة تشغيل VBA من أوتوكاد.
    تظهر نافذة VB.
    أضف وحدة برمجية Module من قائمة Insert فيتم إضافة وحدة برمجية Module فارغة اسمها Module1 كما هو موضح في الشكل.


    2- إضافة تابع مخصص:
    يحوي إكسل العديد من التوابع الجاهزة، كما أنه يؤمن لنا إمكانية كتابة التوابع ضمن الخلايا بأسلوب سهل وواضح.
    ولكن قد يكون التابع معقداً جداً أو أنه غير مستمر، أي أنه يحوي شروطاً كما هو موضح في المثال أدناه، أو أننا نريد استخدام التابع عدداً كبيراً من المرات، فتكون كتابة التابع ضمن الخلايا أمراً صعباً أو مملاً أحياناً.
    قد يقول قائل، يمكننا النسخ واللصق، هذا صحيح، ولكن ماذا لو وجدنا خطأً في التابع نفسه، سنعيد العملية مرة أخرى كما أن إعادة تدقيق التابع ستكون صعبة جداً بسبب أنه سيكون غير مفهوم أحياناً.
    لنفرض مثلاً أننا نريد إدخال التابع f وهو تابع إلى x و y ويأخذ القيم:

    كود:
    x<=100		=> f(x,y) = x^2 + 2 * y
    x>100, y<10	=> f(x,y)= 6*x – 4 * x * y
    x>100,y>=10	=> f(x,y)= x^3 + x * y^2
    لا بد أن العملية صعبة باستخدام إكسل لوحده حيث أننا إذا أردنا وضع التابع السابق في خلية واحدة سنحتاج إلى عبارتي If متداخلتين، أو أننا سنحتاج إلى فصل عبارات If في عدة خلايا.
    ولكن ماذا لو كان لدينا تابعاً في إكسل اسمه (f(x,y ونستخدمه كما نستخدم التابع Sin أو Max مثلاً.
    يمكننا ذلك باستخدام VBA ببساطة.
    في صفحة الوحدة البرمجية التي قمنا بإضافتها سابقاً أضف تابعاً اسمه f (الاسم اختياري) وله مدخلين هنا x و y كما يلي:

    كود:
    10 Public Function f(x As Single, y As Single) As Single    
    90 End Function
    ملاحظة: إن الأرقام الموجودة في بداية الأسطر هي أرقام للأسطر، وهو أسلوب قديم متبع في اللغات القديمة، وقد استخدمته هنا فقط كمرجع لتوضيح عملية إضافة سطر ما بين سطرين كما سيتبين لاحقاً، وليس من الضروري كتابة هذه الأرقام في VBA، كما أنه لا يوجد تسلسل معين يجب الالتزام به لأن VBA تنفذ الأسطر حسب ترتيب كتابتها وليس حسب ترتيب أرقامها.
    عند كتابة السطر رقم 10 وضغط Enter يقوم VBA بإضافة السطر 90 تلقائياً.
    قمنا في السطر 10 بتعريف تابع (Function) اسمه f على أنه عام (Public) أي يمكن الوصول إليه من أي مكان في البرنامج ومن إكسل أيضاً، وقمنا بتعريف المدخلات (أو البارامترات Parameters) وهي x و y على أنها أعداد حقيقة (Single)، كما أن التابع يعيد قيمة حقيقية (Single) كما هو واضح في نهاية السطر 10.
    نضيف الأسطر التالية بين السطرين 10 و 90:

    كود:
    20    If x <= 100 Then
    30        f = x ^ 2 + 2 * y
    40    ElseIf x > 100 And y < 10 Then
    50        f = 6 * x - 4 * x * y
    60    ElseIf x > 100 And y >= 10 Then
    70        f = x ^ 3 + x * y ^ 2
    80    End If
    في السطر 20 أضفنا أول شرط وهو حالة كون x<=100، فإذا تحقق هذا الشرط يقوم البرنامج بتنفيذ السطر الذي يليه مباشرة (السطر 30) حتى يصل إلى عبارة Else أو End If التابعتين لنفس العبارة الشرطية فينتقل بعدها إلى السطر الذي يلي End If التابعة إلى نفس الشرط وهي هنا في السطر 80، أما إذا لم يتحقق الشرط ينتقل البرنامج إلى أول عبارة Else أو ElseIf تابعة لنفس الجملة الشرطية وهي هنا في السطر 40، فإن تحققت نفذ ما فيها ثم ينتقل إلى End If وإلا ينتقل إلى عبارة Else أو ElseIf التي تليها وهكذا.
    يمكننا اختصار الأسطر السابقة بالتفكير التالي:
    نلاحظ من الشرطين في السطرين 20 و 40 أن تحقق الشرط في 60 هو حتمي في حال عدم تحقق الشرطين السابقين لذلك يمكننا استبدال السطر 60 السابق بالسطر التالي:

    كود:
    60    Else
    أو يمكننا تغيير كتابة الشروط إلى الشكل التالي:

    كود:
    20    If x <= 100 Then
    30        f = x ^ 2 + 2 * y
    40    Else
    50        If y < 10 Then
    60            f = 6 * x - 4 * x * y
    65        Else
    70            f = x ^ 3 + x * y ^ 2
    75        End If
    80    End If
    ونلاحظ هنا تداخل عبارتين شرطيتين معاً، وأترك لكم دراستهما.
    ملاحظة: جميع الطرق السابقة متكافئة تماماً، ويمكن اعتماد أي منها.
    الآن بعد أن قمنا بتعريف التابع يمكننا استخدامه ببساطة في إكسل كما نستخدم أي تابع آخر، كما هو موضح في الشكل:


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

    كود:
    10 Public Function RectAs(Moment As Single, Width As Single, Depth As Single, Cover As Single, fy As Single, fc As Single) As Single
    
    20 End Function
    ملاحظة: عبارة تعريف التابع السابقة تكتب على سطر واحد.

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

    كود:
    =RectAs(B5;A1;A2;A3;A4;A5)
    بدلاً من كتابة عدة معادلات في عدة خلايا.
    كما أننا يمكننا إدخال شرط التسليح الأصغري والأعظمي ضمن البرنامج، وكل ذلك في VBA وليس في إكسل نفسه.

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

    من مواضيع عبد الجواد :


    0 Not allowed!


    الصور المرفقة
    الملفات المرفقة

  2. [2]
    عبد الجواد
    عبد الجواد غير متواجد حالياً
    عضو متميز


    تاريخ التسجيل: Aug 2006
    المشاركات: 507
    Thumbs Up
    Received: 10
    Given: 0
    ملاحظة: مرفق مع التمرين أعلاه ملف الإكسل الحاوي على البرنامج، بعد فتحه قم بتفعيل الماكرو كما هو موضح في الصورة، ثم اختر Enable This ******* من النافذة التي ستظهر.



    وأيضاً الملف المرفق يحوي ملف وورد يحوي هذا التمرين لتسهيل طباعته.

    روابط لتمارين سابقة:
    تمرين 1: استخدام vba وأوتوكاد

    0 Not allowed!


    الصور المرفقة

  3. [3]
    م محسن
    م محسن غير متواجد حالياً
    عضو فعال جداً
    الصورة الرمزية م محسن


    تاريخ التسجيل: Dec 2007
    المشاركات: 365
    Thumbs Up
    Received: 15
    Given: 0
    شكراااا جزيلاا وبااااارك الله فيك وجزاك الله خير الجزاء

    0 Not allowed!



  4. [4]
    سيد طه محمد
    سيد طه محمد غير متواجد حالياً
    عضو متميز
    الصورة الرمزية سيد طه محمد


    تاريخ التسجيل: Apr 2007
    المشاركات: 725
    Thumbs Up
    Received: 37
    Given: 0
    ما شاء الله مهندس عبد الجواد ..............شرح جميل و مبسط
    تستحق التقدير و التقييم...... تقبل تحياتي

    0 Not allowed!



  5. [5]
    كوردستان
    كوردستان غير متواجد حالياً
    عضو متميز
    الصورة الرمزية كوردستان


    تاريخ التسجيل: Feb 2007
    المشاركات: 686
    Thumbs Up
    Received: 8
    Given: 0
    شكراااا جزيلاا وبااااارك الله فيك وجزاك الله خير الجزاء

    0 Not allowed!


    اللهم أعنا على ذكرك وشكرك وحسن عبادتك
    اللهم توفنا مسلمين والحقنا بالصالحين
    اللهم صلي على محمد وعلى آل محمد
    http://www.computermaniaweb.co.cc/2minutes.htm

  6. [6]
    محمود مهران
    محمود مهران غير متواجد حالياً
    عضو


    تاريخ التسجيل: May 2006
    المشاركات: 24
    Thumbs Up
    Received: 0
    Given: 0
    بارك الله فيك
    شرح جميل جدا

    0 Not allowed!



  7. [7]
    محفوظ ي
    محفوظ ي غير متواجد حالياً
    عضو


    تاريخ التسجيل: Sep 2008
    المشاركات: 28
    Thumbs Up
    Received: 0
    Given: 0
    بارك الله فيك اخي على المجهود الرائع

    0 Not allowed!



  8. [8]
    JiJ
    JiJ غير متواجد حالياً
    عضو متميز
    الصورة الرمزية JiJ


    تاريخ التسجيل: Nov 2008
    المشاركات: 65
    Thumbs Up
    Received: 0
    Given: 0
    شكرا جزيلا لك .. تطبيقات جميلة ومفيدة

    0 Not allowed!


    مهندسة في بداية الطريق

  9. [9]
    أبو نادر
    أبو نادر غير متواجد حالياً
    عضو متميز
    الصورة الرمزية أبو نادر


    تاريخ التسجيل: Jul 2006
    المشاركات: 1,112
    Thumbs Up
    Received: 123
    Given: 307
    عمل عظيم وجهود مباركة بإذن الله



    جزاك الله خيرا

    0 Not allowed!


    لا تنسونى بدعوه بظهر الغيب لعلها دعوه من القلب فيقبلها رب العزه والجلال

  10. [10]
    ابراهيم الكابساوى
    ابراهيم الكابساوى غير متواجد حالياً
    عضو
    الصورة الرمزية ابراهيم الكابساوى


    تاريخ التسجيل: May 2009
    المشاركات: 14
    Thumbs Up
    Received: 1
    Given: 0
    شكرا على هذه المشاركة

    0 Not allowed!



  
صفحة 1 من 3 12 3 الأخيرةالأخيرة
الكلمات الدلالية لهذا الموضوع

عرض سحابة الكلمة الدلالية

RSS RSS 2.0 XML MAP HTML