اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

أبو هاجر المصري

03 عضو مميز
  • Posts

    144
  • تاريخ الانضمام

  • تاريخ اخر زياره

مشاركات المكتوبه بواسطه أبو هاجر المصري

  1. أشكرك كثيرا يا اخ عمودي

    بس حقيقة موضوع الإشارة السالبة دة معرفش والله لان انت عارف اني في الأول وفي الآخر بتعلم VBA ودي ترجمة

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

    أنا المعلومة صح أم خطا فأنا زي الجميع

    وأرجو يا جماعة الخير اللي يصحح كلمة أو نص أو كود أو عبار لا يوجه الخطأ واللوم لي أنا

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

    مش أكثر ولا أقل وإذا حد شايف إن الموضوع غير مهم أو غير مجدي يقول وانا عند رغبتكو

    بس أنا الصراحة شايف ناس بتستفيد

    أقصد اللي يحب يصحح معلومة تبقى للكل ويوضح دي ليه غلط والصح إيه

    هنعمل كده علشان ده يعني وربنا مع الجميع

    وتحياتي لك أخي عمودي تاني مرة

  2. نستكمل سويا الجزء الرابع وهذا هو الدرس الثاني منه ( 4-2 )

    3) أنواع البيانات

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

    Dim myInt As Integer
    - هنا أنت تريد للمتغير ( myInt ) أن يحتوي فقط على عدد ( Integer ).. ** أنواع البيانات العددية ... - تعد أنواع البيانات العددية موجودة بالجدول أسفل ( Integer – Long – Single – Double ) ، فلو أنك أعلنت عن متغير على هيئة ( Integer أوLong ) فإنها يمكن أن تشمل أو تمثل كل الأعداد الصحيح داخل النطاق المحدد ، ولا يمكنها أن تمثل الكسور أو القيم العائمة أو المنحرفة ، ولتدخل تلك القيم داخل نطاق المتغير فعليك استخدام ( Single – Double ) بدلا من ذلك . - انتبه جيدا للقيمة العددية للمتغير الذي أعلنت عنه ، فإن القيمة لو كانت كبيرة جدا على نوع المتغير المستخدم ، فسوف يقف برنامجك . - على سبيل المثال ، فالكود التالي سوف يولد الخطأ التالي ( overflow error ) لأن القيمة 60000 تعتبر خارج النطاق المسموح لنوع قيمة المتغير العددي ...
    Dim myInt As Integer
    myInt = 60000
    untitled.bmp - عليك أن تكون حذرا عند خلط أنواع البيانات العددية لأنك قد لا تحصل على النتيجة المرجوة ، فالكود أسفل سيتم تنفيذه بدون أخطاء أو مشاكل ، ولكن الناتج سيكون ( 11 ) بعد التنفيذ ، وليس ( 10.8 ) كما توقعت ، فحسب القيمة المخزنة للإجابة ( answer ) فإنها يتم تقريبها إلى أقرب عدد صحيح ..
    Dim answer As Integer   
    Dim num1 As Single
    Dim num2 As Integer
    num1 = 2.7
    num2 = 4
    answer = num1 * num2
    - ولتفادي ذلك الخطأ ، غير قيمة ( answer ) إلى نوع البيانات ( Single ) كالتالي :
    Dim answer As Single 
    Dim num1 As Single
    Dim num2 As Integer
    num1 = 2.7
    num2 = 4	
    answer = num1 * num2
    - يمكنك الاستعانة بالماكرو أو الأكواد للقيام بالكثير من العمليات الحسابية ، يمكنك إضافة أو طرح أو قسمة أو ضرب أو تربيع أو تكعيب المتغيرات العددية ، أو ترفعهم لأي أس تريده ، أنظر الجدول أسفل لتعرف الرموز المشهورة التي يمكن أن تستخدمها في العمليات الرياضية في VBA .. أشهر الرموز الرياضية المستخدمة في VBA .. Additionإضافة / + Subtractionطرح / - Multiplicationضرب / * Divisionقسمة / / Exponentialأس / ^ يمكنك القيام بأي عملية حسابية للمتغيرات العددية ، والتالي بعض الأمثلة لذلك :
    Dim num1 As Integer
    Dim num2 As Integer
    Dim answer As Integer
    num1 = 4
    num2 = 2
    answer = num1 + num2 ‘ answer Holds 6
    answer = num1 - num2 ‘ answer Holds 2
    answer = num1 * num2 ‘ answer Holds 8
    answer = num1 / num2 ‘ answer Holds 2
    answer = num1 ^ 2 ‘ answer Holds 16
    answer = 2 ^ num2 ‘ answer Holds 4
    - وأعتقد أنك ستواجه الكثير من هذه العمليات الحسابية في برامجك .. ** أنواع سلسلة البيانات String - لتصف بيانات ( نصية أو رموز ) ، يجب أن تكون نوع البيانات للمتغيرات ( String ) ، هكذا يمكن أن تكون البيانات نصا أو عددا أو حرفا أو رمزا ( كعلامات الترقيم ) ، وتحديدا ، فإن أي شيء يمكن كتابته بلوحة المفاتيح يمكن تعيينه والوصول إليه عن طريق نوع بيانات String ، على سبيل المثال :
    Dim myName As String
    myName = “Peter Anderson”
    - هناك نوعان من سلسلة البيانات ، طول متغير وطول ثابت ، فالمثال أعلاه يعتبر من نوع البيانات ذات الطول المتغير ، لأن myName يمكنها أن تكون أي نص وأي أحرف ( أنظر الجدول أعلاه ) ، وفيما يلي مثال للإعلان عن سلسلة ثابتة الطول
    Dim myString As String * 10
    myString = “ABCDEFGHIJKL”
    - هنا فسلسلة المتغير myString يمكنها فقط أن تكون عبارة عن 10 رموز ، عند تشغيل الكود فإن فقط أول عشرة رموز في المثال سيتم تخزينها في أي متغير ( ABCDEFGHIJ ) ، الطول الثابت عادة ما يستخدم كجزء من نوع بيانات تعريف المستخدم ( User-Defined ) وفي معظم الحالات ، فمن المستحسن استخدام الطول المتغير لسلسلة البيانات حيث لا تعرف طول السلسلة المخزنة في المتغير . - عند إعلان طول سلسلة ثابتة ، لا تستخدم الفاصلة في الأرقام التي تحدد حجم السلسلة ، وفي الواقع فإنك لا تستخدم أبداً الفواصل فيما يخص القيم الرقمية في VBA . ** التاريخ كنوع بيانات .. - ماذا تفعل لو كنت تريد أن تحسب عدد الأيام بين تاريخين معينين ؟ حسنا .. أنت تقوم بالإعلان عن متغير ونوع بياناته عبارة عن تاريخ ، ولو استخدمت السلسلة String للإعلان عن متغير لتاريخ فلا يمكنك إجراء الحسابات عليها .
    Dim Today as Date
    Dim LastTime As Date =  # 6/6/2007#    ‘here the variable is a fix dateهنا المتغير تاريخ ثابت 
    Dim NumDay As Integer
    Today  = Now	
    NumDay = Today – LastTime
    - عند تشغيل هذا الكود ، فإن NumDay سيخزن عدد الأيام التي انقضت منذ ( 6/6/2007 ) ولذلك فإن بيانات التاريخ تعطيك النتائج التي تريدها بشكل أكثر مرونة .. - في VBA يتم وضع التواريخ والأزمنة بين علامتي (# ) كالموضح بالمثال أعلاه . - يتم عرض بيانات التاريخ والوقت للمتغيرات طبقا لإعدادات التاريخ والوقت في نظامك ، ولذلك فهي تعتمد على إعدادات التاريخ والوقت للجهاز الذي يتم تشغيل البرنامج عليه . ** أنواع البيانات البديلة أو المتنوعة (Variant ) .. - أنواع البيانات البديلة قابلة للمقارنة مع الفئة العامة لتنسيق الأرقام مع جداول البيانات في تطبيق إكسيل ، ويتم الإعلان عنها كالتالي :
    Dim myUnknown
    Dim myUnknown2 As Variant
    - يمكنك استخدام نوع المتغيرات البديلة لحجز أي نوع من البيانات ما عدا سلسلة البيانات ذات الطول الثابت ، فهذه الطريقة تعطي المبرمج مزيدا من المرونة ، ولكن إذا بالغ في استخدامها فإنها تصبح خطيرة وتنفيذ البرنامج يكون أكثر بطئا ، ومن غير المستحسن استخدامها بسبب هذا السبب ، فعلى سبيل المثال ..
    Dim myVar As Integer
    myVar = 5
    myVar = “Five”
    - سيؤدي هذا إلى حدوث خطأ عدم توافق (mismatch error ) في محاولة إدخال السلسلة ( Five ) داخل متغير عددي ، ولحل هذه المشكلة قم بتغيير المتغير myVar للقيمة البديلة أو المتنوعة ( Variant ) ، وبذلك سيتم تنفيذ الكود ، والمتغير ( myVar ) سيحتجز القيمة (Five ) عند الاكتمال ، الكود التالي سيعمل بدون مشاكل ..
    Dim myVar
    myVar = 5
    myVar = “Five”
    - هذا الكود يمكن المتغير ( myVar ) من أن يأخذ القيمة العددية ( 5 ) ولو لفترة قصيرة ، قبل أن يتخلى عن هذه القيمة ويأخذ القيمة ( Five ) في النهاية ، ومع الكود أعلاه أيضا احتمال وقوع مشاكل ووقوف البرنامج عن العمل , حيث أنه لا يمكن استخدام القيمة ( Five ) في العمليات الحسابية وسينعكس ذلك على أداء برنامجك وربما لتوقفه . - أيضا فإن استخدام قيم البيانات المتنوعة سيجعل من الصعب جدا تصحيح برنامجك ، على الرغم من أنه مغري لاستخدام البدائل كوسيلة لتجنب الأخطاء التي توقف عمل البرنامج ( كالمثال أعلاه ) ، في الواقع فإن استخدام هذا النوع من البيانات يجعل برنامجك غير محكم ويمكن أن يتسبب في أخطاء منطقية يصعب العثور عليها . ** أنواع البيانات المنطقية Boolean .. - تعد البيانات المنطقية بسيطة ، فهي إما قيمة حقيقية أو مزيفة ( True or False ) ، كما يمكنها أن تعبر عن القيمة ( True ) بـ ( 1 ) وعن القيمة ( False ) بـ ( 0 ) ، ويتم استخدامها عادة عند التعامل مع هياكل البرمجة التي تستخدم الشروط ، ( وسوف يتم توضيح ذلك في جزء لاحق من الدورة ) ، وإعلان متغير منطقي يتم على النحو التالي ...
    Dim condition As Boolean
    condition = False
    ** نوع بيانات الثوابت Constants - قد تحتاج في بعض الأحوال إلى استخدام متغير لا تتغير قيمته أثنا تنفيذ إجراءات برنامجك ، وفي هذه الحالة فمن الممارسات الجيدة أن تعلن عن تلك المتغيرات بأنها ثابتة ، هذا يجعل الكود من السهل عليه قراءتها ومن السهل أيضا عليه تغيير قيمتها إن احتجت ذلك ، كاستخدام نطاقات مسماه في صيغ جداول البيانات ..
    Const PI As Double = 3.14159
    Dim circumference As Single
    Dim diameter As Single
    diameter = 9.33	
    circumference = PI* diameter

    أعذرونا على التقصير

    في الدرس القادم ( المصفوفات ) إعلانها – تحديد القيم فيها – المصفوفات متعددة الأبعاد – ديناميكية المصفوفات ...

    شكرا لكم ، وأسألكم الدعاء

  3. أخي قصي

    واضح انك مش متابع الشرح من البداية

    عموما في طريقتين لعمل ماكرو يتم تنفيذه على الاكسيل

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

    2- كتابة الأكواد زي ما انت عامل ، بس دي ليها اصول وقواعد ، أهم شئ تعرف الكمبيوتر انت بتعمل ايه اصلا يعني تكتب بداية الكود وعنوان الماكرو وبعدين خطواتك واجراءاتك خلال الماكرو ككل ، وبعدين نهاية طبعا .

    انصحك تقرا الجزء اللي فات كويس وتابع معانا وبرضة لو فيه اي حاجة انا معاك والاخوة كمان مش هيقصروا لو انت لسة في سنة اولى vba انا في تانية مش اكتر

  4. بسم الله الرحمن الرحين

    الأخ يعقوب والأخ نزار جزاكم الله خيرا

    نستكمل سويا السلسلة الدرس الأول من الجزء الرابع ( 4/1 )

    الجزء الرابع المتغيرات وأنواع البيانات والثوابت Variables, Data Types, and Constants

    في هذا الجزء سوف تتعلم التالي :

    * أنواع المتغيرات .

    * توجيه مدخلات المستخدمين .

    * المصفوفات .

    * التفاعل مع المستخدمين .

    - كما أن برنامج إكسيل يركز على جداول البيانات ، فمن الطبيعي أن أبدأ الموضوع المتعلق بالمتغيرات بأن أطلب منك التفكير في التالي : ما هي أنواع البيانات الممكن إدخالها في خلايا جدول البيانات ؟ وكيف يمكنك استخدامها ؟ أنت تعرف أنه يمكنك إدخال الأرقام والنصوص في أي خلية من خلايا جداول بيانات إكسيل ...

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

    1) إعلان المتغيرات Declaring Variables

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

    Dim myVar As Integer

    - واسم المتغير هنا ( myVar ) ، وكما ترى فهو :

    1- يبدأ بحرف أبجدي . 2- لا يتجاوز 255 حرف . 3- لا يحتوى على فواصل .

    - لا تستخدم علامات الترقيم أو الحروف غير الاعتيادية الأخرى في اسم المتغير .

    - استخدام الرمز underscore ( _ ) يسمح به ويعمل بشكل جيد لفصل العديد من الكلمات الواردة في اسم متغير واحد ، ومثال على ذلك ( Car_Type ) .

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

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

    526055424.jpg

    2) مجال المتغير Variable Scope

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

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

    104321845.jpg

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

    - في هذا الإجراء سيقون المتغير myVar4 بزيادة قيمته في كل مرة يتم فيها استدعاءه إلى أن يتم التنفيذ .

    - والمتغيران تم إعلانهما عن طريق الكلمات Dim و Private و Public ، وكلمتي (Private و Public ) يستخدمان للإعلان عن متغير عام ، والمتغير myVar5 تتضح رؤيته لأي من إجراءات الموديول ، في حين أن myVar4 فقط يمكن الوصول إليه بعد إجراء تفعيل ورقة العمل Activate() ، وتعد تلك المتغيرات التي تم إعلانها في قسم الإعلانات العامة عن طرق بكلمة Public تشير إلى شمولية أو عمومية ذلك المتغير .

    - لذلك فإن الكلمات الرئيسية ( Dim , Private ) لها نفس الوظيفة عند إعلان المتغير في القسم العام في أي موديول ، أما الكلمة الرئيسية Public يمكن استخدامها للإعلان عن متغير شامل ( global ) في أي موديول قياسي أو موديول خاص بكائن .

    • Like 1
  5. السلام عليكم

    اخي ابو هاجر

    مشكور على مجهودك الكبير

    لي ملاحظة على هذا الجزء قد يفهم بشكل خاطي .

    - السطر الثالث والأخير == يقوم بتحديد شكل الخط إلى أسود من خلال خاصية الخط Font Object وتطبيقها على نطاقين من الخلايا في ورقة العمل النشطة ، والنطاقان هما (B1:C1 ، E1:F1 ) ، ومسموح لك فقط بإرجاع نطاقان اثنين فقط كحد أقصى ، وإضافة نطاق ثالث إلى القوسين يرجع القيمة الخطأ run-time error .

    للتوضيح ال RANGE

    (B1:C1 ، E1:F1 )

    عبارة عن المدى من الخلابا B1:C1 الى مدى من الخلايا E1:F1 فهو الى وليس و

    يعن نقدر نقول Range(Start,End) eg وال End اختياري

    فالموضوع ليس يقبل اثنين او ثلاثة ولكنه من الى فقط

    فلو وضعت(" Range("A1","Z1 فمعناه من A الى Z وليس AوZ

    لكن لو كتبت(" Range("A1,Z1 فمعناه A وZ

    وبهذا ممكن تكتب( "Range("A1,B2,C3:C10,D8,AB5,F3:G8

    يعني مدى متقطع

    ارجو اكون وفقت اوصل معلومة

    تحياتي

    هو كلامك مظبوط بس هو كان المقصود ان اي نطاق بين علامتين تنصيص اكثر من مرتين غير مقبول وجرب انت بنفسك

    ** يعني تحدد أكثر من خلية بالنطاق كالتالي :

    Range("A13,A18,D14:D18,E21,F14,F9,C11:F11").Select

    يمشي تمام اخترت اكثر من خلية ونطاقة من الخلايا ضمن التحديد

    ** وكمان ينفع كده :

    Range("A1:E9").Select

    طبعا ده عادي نطاق عبارة عن من الى

    ** لكن اللي كان مقصود التالي :

    Range("G20", "G19").Select اختيار مفيهوش مشاكل

    Range("G20", "G19", "F8").Select هو دة اللي كان القصد انه ميصلحش لانه محدد 3 نطاقات بين 3 اقواس مضاعفة

    ارجو ان يكون التوضيح وصل ، ولو فيه اي غلط ياريت توضحه لينا

    • Like 1
  6. من غير تجميع دروس ولا شئ انا يا جماعة برفع على الموقع الدروس المنتهية عندي بالفعل وكنت هخلي الملفات في آخر درس على أساس أنسقها تمام وأصحح الأخطاء وبعدين أرفعها على الموقع، على العموم هي دي الملفات المرفوعة حاليا نفس اللي على الموقع تماما ، وكل ما انتهي من جزء هرفع ملفه على الموضوع وفي الآخر هراجعهم كلهم واصحح أخطائهم وارفعهم مجموعين باذن الله تعالى ، ودعواتكم

    اليكم الجزء الاول

    ___________.rar

  7. بسم الله الرحمن الرحيم

    نستكمل أيها الأخوة الأفاضل الجزء الثالث من الجزء الثالث 3/3

    I) استخدام خصائص الخلايا ... Using the Cells Property

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

    Cells(2,2).Select
    هنا فقد اخترت الخلية ( B2 ) في ورقة العمل - لاختيار أو إرجاع خلية في ورقة العمل يجب أن تحددها عن طريق فهرسها أو دليلها ، الفهرس يمكن أن يكون قيمة واحدة تبدأ من الخلايا في أعلى يسار ورقة العمل ( أو أعلى اليمين في النسخة العربية ) ، على سبيل المثال لإرجاع القيمة 5 للخلية D5 ، فإننا يمكننا ذلك عن طريق إما إرجاع فهرس الخلية أو بمدلول الصف والعمود ( مستحسن ) كالتالي :
    Cells(1, 4).Value=5
    Cells(1, ”D”).Value =5
    وذلك هو التدوين المألوف خلال هذه الدورة ، كلا الكودين السابقين سيقومان بإرجاع القيمة ( 5 ) للخلية ( D1 ) على حد سواء لورقة العمل النشطة ، كذلك يمكنك استخدام الأرقام أو السلاسل المرجعية في الإشارة إلى العمود ، ولاحظ أن الإشارة إلى العمود تأتي بعد الإشارة إلى الصف في المثالين ويفصل بينهما فاصلة ( , ) وأنا أوصي باستخدام الطريقة الثانية بالمثال أعلاه حيث أنها تتجنب الغموض في الإشارة إلى العمود ، وقد تكون الإشارة الرقمية أحسن في بعض الأحوال كما سيتبين فيما بعد ، ومع بعض الأمثلة على استخدام خصائص الخلايا في كائنات النطاق :
    Range(“C5:E7”).Cells(2, 2).Value = 100
    Range(“C5:E7”).Cells(2, “A”).Value = 100
    قد تؤدي تلك الأكواد إلى بعض التخبط لديك لأنها تبدو وكأنها ترجع إلى نطاقين مختلفتين ، إلا أن الأمكر ليس كذلك ، ولكن يمكنك استخدام هذه الأمثلة لتوضيح كيف تعمل خصائص الخلايا . - قبل القراءة ، خمن أولا ما هي الخلية في ( ورقة العمل ) التي ستأخذ القيمة ( 100 ) في كلا الكودين ، إذا خمنت أنهما ( B2 ) ، ( A2 ) على التوالي فأنت على خطأ ، فبدلاً من ذلك ، فإن القيمة ( 100 ) ستكون في الخليتين ( D6 ) ، ( A6 ) على التوالي عند استخدام أسطر الأكواد بأعلى ، لماذا ؟؟ لأن خصائص الخلايا استخدمت كائنات نطاق كمرجعية وليس كائنات ورقة العمل ككل (“C5:E7”) ، فأصبح النطاق الحالي كورقة العمل كاملة ، ولذلك فإن الخلية (2, 2) كانت لتشير إلى الخلية B2 لو كان النطاق عبارة عن ورقة العمل ، أما في المثال أعلاه فإنها تشير إلى الصف الثاني والعمود الثاني داخل النطاق ( C5:E7 ) أي الصف السادس والعمود الرابع بورقة العمل ( D6 ) ، وباستخدام السلسلة في خصائص الخلية في الفهرس في المثال الثاني لتقوية اختيار العمود بغض النظر عن النطاق المختار ، يظل الصف كما هو داخل النطاق ، ولكن العمود تم تحديده خارج النطاق ولذلك فإن الفهرس يشير إلى الخلية ( A6 ) . II) طرق ومجموعة خصائص ( الخلايا والصفوف والأعمدة ) ... Method and Properties Range (Cells, Rows and Columns) إليك بعض الأكواد للتجول خلال كائنات النطاق : • Selection , ActiveCell - إن الكائن Selection يشكل ما تم تحديده واختياره ، فيمكن أن يكون خلية مفردة ، أو مجموعة خلايا أو صف أو عمود أو العديد من هذه فعلى سبيل المثال :
    Range("A1:A50").Select
    Selection.ClearContents 
    هذا الكود يقوم بإزالة محتويات الخلايا من A1 إلى A50 ( قيم أو صيغ ) . - أما ActiveCell فهو عبارة عن فكرة مهمة جدا سوف تحتاج لتذكرها عندما تبدأ بتطوير إجراءات أكثر تعقيداً . • Range, Select - لتحديد خلية ..
    Range("B1").Select 
    - لتحديد خلايا متجاورة ..
    Range("A1:A5").Select
    - لتحديد خلال غير متجاورة ..
    Range("C1,E5,F6").Select
    • Columns, Rows, Select, EntireRow, EntireColumn - لتحديد عمود ..
    Columns("A").Select
    - لتحديد مجموعة من الأعمدة المتجاورة ...
    Columns("A:B").Select
    - لتحديد أعمدة غير متجاورة ...
    Range("A:A,C:C,F:F").Select
    - لتحديد صف ...
    Rows("1").Select
    - يمكنك تحديد الأعمدة والصفوف بأحد الطرق التالية :
    ActiveCell.EntireColumn.Select
    ActiveCell.EntireRow.Select
    Range("B1").EntireColumn.Select
    Range("B1").EntireRow.Select
    حيث أن ( EntireColumn ) كامل العمود ، و ( EntireRow ) كامل الصف إذا تم تحديد أكثر من خلية فإن الأكواد التالية ستقوم بتحديد كامل الصف أو العمود التي يشملها ذلك التحديد ..
    Selection.EntireColumn.Select
    Selection.EntireRow.Select
    • Cells, CurrentRegion - لتحديد كل الخلايا
    Cells.Select
    • Offset الطريقة الأكثر استخداما Offset التي تتيح لك التحرك والتنقل أعلى وأسفل يمينا ويسارا .. - على سبيل المثال لو أردت التحرك خليتين إلى اليمين ..
    Activecell.Offset(0,2).Select
    - ولو أردت التحرك خليتين إلى اليسار..
    Activecell.Offset(0,-2).Select
    - إذا أردت التحرك خليتين إلى أسف ..
    Activecell.Offset(2,0).Select
    - إذا أردت التحرك خليتين لأعلى ..
    Activecell.Offset(-2,0).Select
    - إذا أردت تحديد خلية والتحرك ثلاث خلايا لأسفل ..
    Range(Activecell,Activecell.Offset(3,0)).Select
    Range("A1",Range("A1").Offset(3,0)).Select
    • Column, Row, Columns, Rows, Count - لاحظ أن الأكواد التالية تقوم بإرسال النتيجة إلى متغير ..
    myvar = Activecell.Column   ترجع رقم العمود
    myvar = Activecell.Row ترجع رقم الصف  
    
    myvar = Selection.Columns.Count ترجع عدد الأعمدة في التحديد  
    myvar = Selection.Rows.Count ترجع عدد الصفوف في التحديد  
    
    myvar = Selection.CurrentRegion.Rows.Count ترجع عدد الصفوف في المنطقة الحالية للتحديد  
    • Value - عندما تريد أن تدخل قيمة رقمية في خلية ...
    Range("C1").Select
    Selection.Value = 56
    - لاحظ أنه لا يتحتم عليك تحديد الخلية لإدخال قيمة لها ، ففي أي مكان يمكنك كتابة التالي ..
    Range("C1").Value = 56
    - حتى أنه يمكنك تغيير قيمة خلية في ورقة أخرى تحددها أنت ..
    Worksheets("Good").Range("C1").Value = 56
    - يمكنك أيضا إدخال قيمة واحدة لعدة خلايا ..
    Range("A1:B33").Value = 56
    - هذا إذا كانت القيمة المدخلة عبارة عن أرقام ، أما إذا كنت تريد إدخال نص في خلية فعليك استخدام الأقواس المزدوجة ( " " ) ..
    Range("C1").Value  = "Nancy"
    - إذا كنت تريد أن تدخل نصاً داخل أقواس مزدوجة ، فعليك كتابة النص داخل 3 أقواس مزدوجة في الكود ..
    Range("C1").Value  = """Peter"""
    • Formula - كي تدخل صيغة في خلية فأنت في حاجة إلى الكود التالي ..
    Range("A1").Select
    Selection.Formula = "=B8+C8"
    - لاحظ أن علامتي التساوي في الكود تندرج أحداهما داخل الأقواس المضاعفة وتقوم بكتابة الصيغة تماما كأنك داخل ورقة العمل ، مرة أخرى أنت لست في حاجة لتحديد خلية ثم كتابة صيغة بداخلها ..
    Range("A1").Formula = "=B8+C8"
    - أما إذا كتبت الكود التالي ..
    Range("A1:A8").Formula = "=C8+C9"
    فإن الصيغة في الخلية ( A1 ) = C8+C9 ، وفي الخلية ( A2 ) = C9+C10 .. وهكذا ، أما إذا كنت تريد تحديد صيغة معينة ثابتة للخلايا فإنه يتحتم عليك استخدام العلامة ( $ ) لإيقاف ديناميكية الصيغ داخل النطاق المحدد ..
    Range("A1:A8").Formula = "=$C$8+$C$9"
    2) تبسيط إرجاع ( الإشارة إلى ) كائن .. Simplifying object references
    Application.Workbooks(“Book1.xls”).Worksheets(1).Range(“A1”).Value
    - لست بحاجة إلى وصف الخلية أو المدى الذي تريده وصفا كاملاً كالمثال أعلاه ، فإكسيل يوفر لك بعض الاختصارات التي يمكن أن تفيد وتحسن القراءة وتوفر الوقت والكتابة ، بالنسبة للمبتدئين فإن كائنات التطبيق تفترض دائما إهمال الإشارة إلى كائنات التطبيق لاختصار القسم السابق ..
    Workbooks(“Book1.xls”).Worksheets(1).Range(“A1”).Value
    - ولو كان Book1.xls هو المصنف النشط حاليا ، يمكنك اختصار الإشارة إليه أيضا ...
    Worksheets(1).Range(“A1”).Value
    - وكذلك لو كانت ورقة العمل الحالية هي الورقة النشطة فإنه يمكن اختصار الإشارة إليها أيضا ..
    Range(“A1”).Value
    ** العمل مع الكائنات Working with Objects ** - لقد تعلمت من خلال أمثلة عديدة تعرضت للكائنات وكيفية إعداد خصائصها وأساليب وطرق إجراء أحداثها ، وهناك بعض الأدوات القليلة التي قد تكون هامة للغاية عند التعامل مع الكائنات ، على سبيل المثال (With/End ) - بنية الكود أو هيكله يعمل على تبسيط الكود ونوع بيانات الكائنات ، التي تتيح لك الإشارة إلى كائن موجود أو إنشاء كائن جديد ، ولنلق نظرة على المثال أدناه .. • With/End - أنا دائما أوصي باستخدام هذه التركيبة أو البنية لأنها تجعل برنامج أكثر قابلية للقراءة والفهم ، كما سوف ترى في كثير من الأحيان With/End في هيكل الماكرو المسجل ، أنظر في الكود التالي ...
    Range(“A1:D1”).Select
    Range(“A1:D1”).Value = 100
    With Selection.Font
           .Bold = True
           .Name = “Times New Roman”
           .Size = 16
    End With
    With Selection
       .HorizontalAlignment = xlCenter
       .VerticalAlignment = xlCenter
    End With
    - عند التنفيذ ، يقوم هذا الكود باختيار النطاق A1:D1 من ورقة العمل النشطة باستخدام طريقة أو أسلوب Select() method الخاصة بكائنات النطاق أو المدى ، وفي هذه الحالة فإن خصائص الاختيار الخاصة بكائنات الويندوز قد استخدمت لترجع نطاق من الكائنات ، حيث أن خصائص الخط ترجع كائن الخط المرتبط مع النطاق المختار أو المحدد . - والبيان أو التعبير أو الصيغة يمكن أن تكون بنفس السهولة التي كتبت بدون طريقة Select() وخصائص التحديد ، ويتم الادخال عن طريق خصائص النطاق ليتم إرجاع كائن النطاق المرجو ( على سبيل المثال .. With Range(“A1:D1”).Font ) .. - مرة أخرى داخل البنية ، أي خاصية من خصائص الكائنات يمكن إعدادها ووضعها بدون وصف أو تحديد الكائن في كل سطر من أسطر الكود ، والكائنات التابعة وخصائصها يمكن الوصول إليها أيضا ، كل سطر من أسطر البنية يجب أن يبدأ بنقطة ( . ) متبوعا بخاصية أو اسم كائن ، وبعد ذلك الطريقة Method أو الإحالة . - بعد تعيين الخصائص المرغوبة ، والطرق استخدمت لكائن معين فإننا نختم البنية بـ End With . - ويجب عليك ملاحظة أن With/End With المستخدمة في البناء الثانية استخدمت لتنسيق النطاق المحدد رأسيا وأفقيا ، وبهذه الطريقة يبدو الكود الخاص بك مرتبا مقروءا . - لهذا فإن بنية With/End With تعتبر طريقة واضحة ، ومفيدة بشكل خاص عند استخدام عدد كبير من الخصائص والطرق لمعالجة كائن واحد بالتتابع في البرنامج . 3) نوع بيانات الكائن The Object Data Type . - وأخيرا ، فإن موضوع كائنات إكسيل لن يكتمل بدون مناقشة نوع بيانات الكائنات ، إذا وجدت حالات أو اقتراحات متعددة لنفس الكائن في برنامجك يمكنك استخدام المتغيراتvariables بدلا الإشارة بشكل مستمر عن طريق التحديدات المقيدة ، وأيضا فإن المتغيرات يمكنك أن تسند لها دلالة الأسماء ، مما يجل البرنامج أسهل في تفسيره ، ومتغيرات الكائنات عادة مشابهة لأنواع بيانات كائنات VBA الأخرى وذلك يجب أن يعلن ويوضح في الكود ، على سبيل المثال ...
    Dim myObject as Object
    - هنا نعلن عن وجود كائن متغير واسمه (myObject ) ، ومع ذلك فتحديد قيمة لكائن متغير تختلف عن تحديدها لأكثر أنواع البيانات شيوعا ، الكلمة الدليلية Set يجب أن تستخدم لتحديد مهام الكائن المتغير ..
    Set myObject = Range(“B1:C15”)
    - هنا تم تحديد النطاق (B1:C15 ) على أنه ما يمثله المتغير (myObject ) تحديدا ، ويمكن بعد ذلك استخدام خصائص الكائن بالطريقة المعتادة ..
    myObject.Font.Bold = True
    - وهذا يجعل القيمة في النطاق (B1:C15 ) تعرض بخط أسود غامق ، والأكواد أعلاه يمكن كتابتها بشكل أكثر كفاءة كما يلي ..
    Dim myRange as Excel.Range
    Set myRange=Range(“B1:C15”)
    myRange.Font.Bold = True

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

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

    إلى اللقاء مع الجزء القادم ( المتغيرات – أنواع البيانات – الثوابت ... )

  8. الأخ بو عمار مشكور لك جزيلا

    وأرجو من الله أن يكون هذا الموضوع فاتحة خير على الجميع

    الموضوع مهم للغاية ولا يكفي المادة العلمية عايزين من الأخوة المشرفين الدعم

    يعني أمثلة وتطبيقات وحلول وشرح أكواد معينة خبايا وأسرار

    كل الكلام ده يعتبر مادة دسمة غير محدودة من المعلومات

    والهدف واحد باعتقادي ، اللي ميعرفش يعرف والثمن دعوة عن ظهر قلب

  9. أشكر جميع الأخوة الأعزاء على مشاركاتهم ووافر دعائهم

    جزانا وإياكم الخير بإذن الله تعالى

    حبيت أوقل بس كلمة في الأول علشان تلقى شوية إهتمام

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

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

    الأخوة الأعزاء الأفاضل

    نستكمل سويا الجزء الثاني من الجزء الثالث من الدورة 3/2

    د) كائنات ورقة العمل The Worksheet Object .

    تندرج كائنات ورقة العمل تحت كائنات المصنفات في التسلسل الهرمي لمجموعة كائنات برنامج إكسيل ، للتحقق من بعض أحداث ورقة العمل فقد أضيفت الأكواد التالية إلى أحداث SelectionChange() للورقة الأولي sheet1 في المصنف workbook :

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim msgOut As String
    msgOut = “The name of this worksheet is “ & Worksheets(1).Name
    MsgBox (msgOut)
    Worksheets(2).Select
    End Sub
    953530655.jpg إن إجراءات SelectionChange() توجد في الـ module الخاص بورقة العمل ، وهذا الحدث أو الإجراء يفعل حينما يقوم المستخدم بتغيير الاختيارات الحالية لورقة العمل ، اعلم أن الهدف من إجراء حدث SelectionChange() هو نطاق يمثل خلايا يقوم المستخدم بتحديدها ، وسوف نقوم قريبا بشرح كائنات المدى بالتفصيل ولكن لنتجاهلها الآن لأن مثالنا لا يعتمد عليها . الكود في إجراء SelectionChange() مباشر وصريح ، أولا . قمنا بتعيين سلسلة متغيرة String وتم تعيين قيمتها بـ ( اسم ورقة العمل هذه هو ) وهي بدورها متسلسلة مع اسم ورقة العمل التي تم الحصول عليها من خصائص كائنات ورقة العمل ، وكامل مسار الكائن لا يستخدم لإعادة تسمية ورقة العمل ، وفي هذا الكود فإنه لن يتم تنفيذه إلا عندما يقوم المستخدم بإحداث تغيير في ورقة العمل الأولى sheet1 من مجمع كائنات أوراق العمل . لذا فإن مسار الكائن يتنقل خلال كائنات المصنف . وهذا هو السبب في إمكانية استخدام أرقام فهرسة مع خصائص أوراق العمل داخل كائنات المصنف من دون اهتمام لإرجاع الورقة الخاطئة ، وبعد عرض السلسلة في مربع الرسالة فإن طريقة Select() لكائنات ورقة العمل تستخدم لتحديد ورقة العمل الثانية في مجموعة كائنات ورقة العمل . وبعد ذلك فإن الكود قد أضيف إلى Worksheet_Activate() لمجموعة إجراءات الورقة الثانية . ويتم تنفيذ إجراء تفعيل الورقة الثانية بعد أن يقوم المستخدم أولا باختيار ورقة العمل ، أو في هذه الحالة يتم اختيارها بالكود البرمجي (Worksheets(2).Select) ، والكود في الأساس هو نفس الكود السابق ...
    Private Sub Worksheet_Activate()	
    Dim msgOutput As String
    msgOutput = “This worksheet is “ & Worksheets(2).Name
    MsgBox (msgOutput)
    End Sub
    
    إن إجراء Worksheet_Activate() لا يتم تنفيذه إذا تم فتح المصنف أولا ، حتى لا يكون المقصود بروتينية تنفيذ الإجراء عند بدء تشغيل المصنف ، هذا الإجراء ينبغي أن يوضع في قائمة أحداث Workbook_Open() ... إن مجمع كائنات ورقة العمل هي تقريبا متماثلة مع مجمع كائنات المصنف ، وكائنات الاثنين كثيرا ما يستخدمان بشكل تبادلي كما في المثالين السابقين ، ويعتبر الفرق بينهما أن كائنات ورقة العمل يمكنها أن تتضمن أي ورقة رسم بياني مفتوحة بالمصنف ، لذا إن كنت ترغب أن يتم فتح أوراق الرسم البياني في المصنف ، يجب عليك الوصول إلى ورقة العمل باستخدام مجمع كائنات ورقة العمل ، وإلا فإن مجمع الكائنات يكفي . هـ) الطرق وخصائص ورقة العمل Methods and Properties of the Worksheet اختر ورقة في نافذة مشروع VBA ، يمكنك أن ترى 11 خاصية من خواص ورقة العمل في نافذة عرض الخصائص ، هذه الخصائص تعطيك إمكانية تحديد القيم الخاصة بالكائن مع بداية عمل البرنامج ويمكنك تعديلها بعد ذلك من خلال إجراءات VBA متى أردت ذلك . - هناك 3 خصائص من خصائص ورقة العمل ستحتاجها في أغلب الأحيان : 1- الاسم ( الاسم بين قوسين ) .... الاسم Name 2- الاسم ( بدون أقواس ) مثل عنوان الصفحة الذي يظهر على تبويب إكسيل ... العنوان مثل caption 3- والصفات المرئية .... visible property - لتغيير عنوان يمكنك ذلك عن طريق نافذة الخواص ، أو في الإكسيل عن طريق النقر بالزر الأيمن ثم إعادة تسمية . - يمكنك تغيير عنوان ورقة العمل بالكود التالي :
    Worksheets("Sheet1").Name= "Good"
    - خاصية visible يمكنها أن تكون قيمة من 3 قيم ممكنة ( أي 3 اختيارات لها ) ، أول قيمتين هما ( true & false ) أي أن تكون الورقة ظاهرة أو مخفية كالتالي :
    Worksheets("Good ").Visible= True
    Worksheets("Good 1").Visible= False
    - تذكر أن الدوال التي في الخلايا يتم حسابها حتى ولو كانت صفحاتها مخفية ، ولكن قبل أن تتمكن من فعل أي شيء برمجيا عليك أولا أن تقوم بتغيير وضع الورقة من مخفية إلى ظاهرة :
    Worksheets("Good ").Visible = True
    Worksheets("Good "). Select
    Range(“A1”).Value = 10
    القيمة الثالثة التي يمكن أن تأخذها خاصية visible هي أن تكون الورقة مخفية للغاية بمعنى :
    Worksheets("Good ").Visible = xlVeryHidden
    في هذه الحالة ليس فقط ستكون ورقة العمل مخفية ولكنك حتى لن ترى اسمها ضمن أسماء ورقات العمل حتى لو ذهبت إلى (Format/Sheets/Unhide ) فإنك لن تجدها ضمن أسماء أوراق العمل ، حيث أن value xlVeryHidden لا يمكن أن تتغير إلا برمجيا ، وهذا يعني أن المستخدم فقط الذي يمكنه الوصول إلى VBA يمكنه تغيير الكود ومن ثم معاينة الورقة ، فلو كانت أكوادك محمية بكلمة مرور فإن المستخدم الذي يعرف كلمة المرور فقط هو الذي يمكنه الوصول إلى الأكواد والتعديل فيها ، ويمكنك استخدام الخاصية Visible لإخفاء المعلومات السرية ( كتفاصيل البطاقات الائتمانية ، والبيانات الشخصية ) أو حتى إخفاء أوامر أو إجراءات لا تريد المستخدم أن يعدل فيها .
    Worksheets("Good ").Visible = True
    Worksheets("Good "). Select
    Range(“A1”).Value = 10
    وأخفها مرة أخرى :
    Worksheets("Good ").Visible = xlVeryHidden
    تذكر أن المعادلات والصيغ التي تشير إلى خلايا تقع داخل الأوراق المخفية تعمل حتى ولو كانت أورارق العمل مخفية للغاية . قد ترغب في حذف أوراق أو صفحات فهذا هو الكود :
    Worksheets("Good ").Delete
    وقد ترغب بإضافة صفحات جديدة
    WorkSheets.Add
    وهنا سيقوم VBA بإضافة ورقة جديدة قبل الورقة النشطة أما إذا كنت أكثر تحديدا أين تضيف وكم تضيف من أوراق ، فستستخدم أحد الإجراءات التالية : لو كنت تود إضافة ورقة قبل ورقة اسمها Good سيكون الكود هكذا :
    Sub exercise2()
        Sheets.Add after:=Sheets("Good")
    End Sub
    لو كنت تود إضافة 3 ورقات قبل ورقة اسمها Good سيكون الكود هكذا :
    Sub exercise2()
        Sheets.Add after:=Sheets("Good "), Count:=3
    End Sub
    إضافة ورقة في بداية المصنف ، لاحظ اختفاء علامة الاقتباس عند الإشارة إلى ترتيب الورقة :
    Sub exercise2 ()
        Sheets.Add after:=Sheets(1)
    End Sub 
    وإذا كنت تريد إضافة ورقة بآخر المصنف ، عليك بعد ورقات العمل عن طريق Sheets.Count ، واستخدام القيمة ( قيمة العدد ) كرتبة للورقة الجديدة التي تريد إضافتها :
    Sub exercise2 ()
        Sheets.Add After:=Sheets(Sheets.Count)
    End Sub
    لاحظ أننا استعضنا عن رقم او رتبة او ترتيب الورقة بتعداد أوراق العمل ..... و) كائنات النطاق أو المدى The Range Object ... يمكنك استخدام كائنات المدى التي تمثل مجموعة من خلية أو أكثر من خلية متجاورة في ورقة عمل إكسيل ، وهذا مفيد للغاية ، لأن هذا يسمح لنا باستغلال خصائص خلية أو مجموعة من الخلايا في ورقة العمل ، قد تجد نفسك تقوم باستخدام كائنات المدى في كل برنامج تكتبه عن طريق VBA لتطبيق إكسيل . أنظر إلى تلك الأمثلة من الأكواد التي تستخدم كائنات المدى :
    Range(“B1”).Value=”Column B”
    Range(“B1:G1”).Columns.AutoFit
    Range(“B1:C1”, “E1:F1”).Font.Bold = True

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

    - لاحظ أن المسار الطويل للكائنات قد حذف في الأمثلة أعلاه ، ومن ثم فإن أسطر الأكواد المذكورة بأعلى ستعمل على ورقة العمل الحالية -

    - السطر الأول == يدرج النص (Column B ) في الخلية B1 ، وذلك عن طريق خاصية تحديد القيمة للكائن . فخصائص كائنات النطاق استخدمت لإرجاع القيمة لخلية واحدة كما في هذا المثال ، لقد شاهدت بالفعل العديد من الأمثلة عن خصائص القيمة سابقا Value property على الرغم من وجود خصائص قيمة للعديد من الكائنات ، فإن كائنات المدى هي الأكثر شيوعا .

    - السطر الثاني == عند استخدام الطريقة التلقائية AutoFit() method لتعديل ضبط الأعمدة في مدى معين ، فإنك بذلك تسمح بعرض محتويات الخلايا كاملة دون تداخل في الأعمدة المجاورة ، وهذا يعادل استخدام القوائم في الإكسيل Format, Column, AutoFit ...

    - السطر الثالث والأخير == يقوم بتحديد شكل الخط إلى أسود من خلال خاصية الخط Font Object وتطبيقها على نطاقين من الخلايا في ورقة العمل النشطة ، والنطاقان هما (B1:C1 ، E1:F1 ) ، ومسموح لك فقط بإرجاع نطاقان اثنين فقط كحد أقصى ، وإضافة نطاق ثالث إلى القوسين يرجع القيمة الخطأ run-time error .

    - الأمثلة أعلاه وضحت طريقتين فقط من طرق استخدام خصائص كائنات المدى (AutoFit(), Columns, and Font ) ، وإذا كنت من المستخدمين العاديين لإكسيل فإنك تعتقد أن هناك العديد من الطرق وغيرها من الخصائص المتعلقة بتنسيق خلايا جداول البيانات .

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

    هذا وميعادنا إن شاء الله في الجزء الثالث من الجزء الثالث وهو عن ( استخدام خصائص الخلايا وطرق ووسائل المدى وترحيل البيانات ) فانتظرونا فلدينا المزيد بإذن الله

    والسلام عليكم ورحمة الله وبركاته

  10. السلام عليكم ورحمة الله

    أخواني الأعزاء نستكمل مع بعض سلسلة الدروس

    الجزء الثالث ( الكائنات ومجموعات الكائنات في إكسيل Collection Objects and Objects )

    في هذا الجزء سوف تتعلم التالي :

    * الأجسام – الكائنات ( Objects ) .

    * مجموعة كائنات VBA ( VBA Collection Objects ) .

    * كائنات التطبيق ( The Application Object ) .

    * كائنات المصنف والويندوز ( Workbook and Window Objects ) .

    * كائنات ورقة العمل ( The Worksheet Object ) .

    * كائنات النطاق – المدى ( The Range Object ) .

    1) ما هي الكائنات ( Objects ) ..؟

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

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

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

    في إكسيل أنا متأكد من أنك على دراية بالكثير من الكائنات ، فهناك كائنات للمصنف ككل وكائنات لورقة العمل وكائنات للمدى والنطاق وكائنات للرسم البياني وغيرها الكثير والكثير ، هذه الكائنات Objects هي لبنات لبناء برنامج بـ BVA .

    أ) مجموعة كائنات VBA ..( VBA Collection Objects )

    لفهم ما هي مجموعة كائنات VBA يمكنك التفكير بالسيارة ، اللون والحجم والشركة والإطارات والهيكل كلها كائنات منفصلة في ذاتها ولكنها كلها مجتمعة عبارة عن السيارة . ولذلك فإن مجموعة كائنات VBA هي عبارة عن مجموعة الكائنات المختلفة في البرنامج .

    على سبيل المثال فإن أي كائن لورقة العمل يتبع لكائنات المصنف ككل ، وكذلك فإن مجموعة كائنات المصنفات تشمل مجموع كائنات كل المصنفات المفتوحة ، والشكل أسفل يبين نافذة إكسيل بها ثلاث مصنفات مفتوحة أي أن مجموعة كائنات المصنفات في الشكل عبارة عن جميع الكائنات الموجودة في book1+book2+book3 مجتمعة ..

    360637971.jpg

    التسلسل الهرمي للأجسام والكائنات في إكسيل

    Application تطبيق

    Workbooks المصنفات

    Workbook المصنف

    Sheets صفحات

    Worksheet ورقة عمل

    Range نطاق

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

    ب) كائنات التطبيق The Application Object .

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

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

    ويمكنك معالجتها كالتالي :

    Application.Width = 800 
    Application.Height = 550 
    ** ومثال آخر ، فإنك قد ترغب في إخفاء شريط الصيغ ، ويكون كذلك :
    Application.DisplayFormulaBar = False
    عموما أنت بحاجة لاستخدام كائنات التطبيق في أغلب الأحيان لتحديد الخصائص المتعلقة بمظهر برنامج إكسيل ، منها ما هو مبين أعلاه أو كالتالي :
    Application.Calculation = xlManualلإيقاف عملية الحسابات التلقائية وجعلها يدويا                                     
    Application.EditDirectlyInCell = Falseلإيقاف عملية تحرير الخلايا                                                     
    Application.DefaultFilePath = “D:\My Documents”لتحديد مسار الملفات الافتراضي                             
    - كما قد تكوت في حاجة إلى تصفية كائنات التطبيق ( مفيدة جدا ) لضمان سرعة العمل ..
    Application.ScreenUpdating = False
    ب) كائنات المصنفات وكائنات النوافذ The Workbook and Window Objects. قد لا تكون على دراية بكائنات النوافذ ، فكائنات النوافذ تشير إلى جميع النوافذ داخل نفس المصنف أو البرنامج الحالي ، فداخل تطبيق إكسيل فإن نافذة مجموعة كائنات تحتوي على كل نوافذ المصنفات المفتوحة ، ونافذة الكائنات تفهرس وفقا لطبقاتها ، ففي الشكل السابق يمكنك استرجاع BOOK2 عن طريق الكود التالي :
    Application.Windows(2).Activate
    وذلك لأن BOOK2 يعتبر في منتصف كائنات نوافذ المصنفات الثلاثة المفتوحة ، فبعد أن يتم استرجاع BOOK2 إلى مقدمة الطبقات فإن من شأنها أن يتغير مؤشرها أو فهرستها إلى الرقم ( 1 ) عند استخدام نافذة مجمع الكائنات Windows Collection Objects، هذا يختلف عن الوصول إلى BOOK2 باستخدام مجمع كائنات المصنفات Workbooks collection object . - دعونا نلقي نظرة أكثر تفحصا لمجمع كائنات المصنفات Workbooks collection Object عن طريق مثال ، لا يوجد غير عدد قليل ومحدود من خصائص وطرق Workbooks collection Object كما أن مهامها ووظائفها Functions مباشرة ، قم بإضافة الكود التالي للمصنف :
    Public Sub exampleWorkbooks()
    Dim j As Integer
    For j = 1 To 3
    Workbooks.Add        ‘add a new workbook
    Next j
    Workbooks(Workbooks.Count).Activate      ‘activate book3
    End Sub
    - Dim .......... مجهول - Integer ..... عدد صحيح تام - لتنفيذ هذا الإجراء عليك أن تختار exampleWorkbooks عن طريق قائمة الماكرو في الإكسيل ، سوف ترى على الفور ثلاث مصنفات جديدة فتحت في إكسيل ، وبعد ذلك سيتم تنشيط BOOK3 . - هذه طريقة مباشرة نسبيا ، وقد شاهدت أنت اثنين مثلها (the Add() method, Count property and the Activate() method). ، عامة فإن جميع هذه الأساليب والمعالجات للأجزاء المكونة للعمليات المبرمجة فإنها سوف توضح بشكل أكثر تفصيلا لاحقا مع مختلف الكائنات الأخرى ، سوف تجد أن كثيرا من الكائنات المجمعة collection objects تشترك في كثير من الخصائص والطرق properties and methods ، هذا ليس غير اعتيادي ويجب أن تدرك أنه يتوقف على الكائن الذي تقوم باستخدامه ، والمعايير التي إما أن تكون متاحة أو مطلوبة لتلك المكونات قد تختلف . أنظر في إجراءات VBA التالية ، التي توضح كيفية استخدام طريقة close() في كائنات المصنفات ، والكود يمكن وضعه في موديول الكائن أو القياسي :
    Public Sub CloseWorkbooks()
    Workbooks(Workbooks.Count).Close SaveChanges:=False
    Workbooks(1).Close SaveChanges:=False
    End Sub
    وسيقوم الإجراء بإغلاق أول وآخر مصنف مفتوح في إكسيل دون دفع المستخدم لحفظ التغييرات . - في المثال أعلاه طريقة close() استخدمت في كائنات المصنفات Workbook Object ، وليس في مجموعة كائنات المصنفات Workbooks collection object ، إذا كنت ترغب في إغلاق جميع المصنفات في وقت واحد يجب عليك استخدام close() method مع مجموعة كائنات المصنفات .... - الكود أدناه سيغلق مجموعة المصنفات ..
    Workbooks.Close

    في هذه الحالة لن تكون هناك خيارات متاحة ، ولذلك سيكون المستخدم حازما وجادا في إنقاذ المصنف المحدد حاليا ..

    **** آسف جدا لعدم اكتمال هذه الجزئية ، ذلك أنني فعلا مشغول جدا هذه الأيام عامة ، سوف ألحق الجزء الباقي من هذا الدرس في أقرب وقت ممكن وهو << ( كائنات ورقة العمل ، طرق وخصائص ورقة العمل ، كائنات المدى ، استخدام خواص الخلايا ، طرق وخصائص المدى ( الخلايا والصفوف والأعمدة ) >>

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

    • Like 1
  11. أخي أوفيس 2003

    هناك طريقتان :

    1- عند عمل الزرد نفسه يخرج مربع حوار يتم من خلاله تعيين الماكرو .

    2- تنقر بالزر الأيمن للفارة على زر الأمر في ورقة العمل تخرج قائمة فيها اختيار تعيين ماكرو ، ومن ثم تختار الماكرو المراد تعيينه . واذا لم يظهر اختيار تعيين ماكرو انقر في ورقة العمل في مكان فارغ وارجع مرة اخرى للزر بضغطة واحدة يمين عليه .

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

  12. بسم الله الرحمن الرحيم

    والله يا جماعة أحرجتوني كتير جدا بالكلمات الجميلة والأهم منها الدعوات اللي فعلا أنا محتاجها جدا

    بصراحة مكنتش متخيل الاستجابة دي كلها وده اللي هيخليني بإذن الله إن شاء الله أكمل معاكو الدورة لآخرها إن شاء الله

    شكرا لكم جميعا وأفكركم بس إني أتعلم معكم تماما ، ولا تنسونا من دعواتكم

    الدرس الثاني

    الجزء الثاني ( الماكــرو Macro )

    في هذا الجزء سوف تتعلم :

    ** عملية تسجيل الماكرو ..

    ** كيفية جعل مهمة معينة عملية أوتوماتيكية ..

    1) تسجيل أول ماكرو لك ...

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

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

    أ) حدد المدى على ورقة العمل ثم اختر تسجيل ماكرو جديد... ( من قائمة أدوات ثم ماكرو ثم تسجيل ماكرو جديد )

    737849461.jpg

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

    252598110.jpg

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

    525082635.jpg

    د) لإيقاف عملية تسجيل الماكرو ، انقر على زر إيقاف التسجيل (مستطيل أزرق داكن) على شريط أدوات تسجيل ماكرو.

    781619651.jpg

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

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

    قم بالضغط على [Alt] + [F11] في نفس الوقت لفتح محرر VBA ، قم بتوسيع مستعرض وحدات المشروع Module1 في مجلد Project Explorer بالنقر على علامة (+) .

    358123772.jpg

    انقر نقرا مزدوجا فوق مجلد Module1 حتى يمكنك أن ترى الماكرو ..

    وكما يبين الشكل فإن :

    1- اسم الماكرو هو (SetBackgroundColor )

    2- رقم اللون المختار كخلفية ( 36 )

    3- نمط الخلفية (solid ) أي سادة .

    ملاحظة مهمة :

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

    2) تشغيل الماكرو الذي قمت بتسجيله ..

    يمكننا تشغيل الماكرو داخل VBE ، ولكننا الآن سنقوم بتشغيل الماكرو داخل ورقة العمل .

    أ) في أي ورقة عمل قم بتحديد نطاق معين ..

    637700264.jpg

    ب) تشغيل الماكرو المسجل عن طريق اختيار قائمة أدوات --- ماكرو --- وحدات ماكرو أو اضغط على [Alt] + [F8] في نفس الوقت

    388157360.jpg

    ج) يتم عرض مربع حوار ماكرو . ولما كان هناك واحد فقط في وحدات الماكرو ، افتراضيا الماكرو الوحيد ، يتم اختيار SetBackgroundColor. وهو اسم الماكرو الذي قمنا بتسجيله ، انقر على زر تشغيل لتشغيل الماكرو .

    116860387.jpg

    د) سيتم تلوين الخلايا الآن باللون الأصفر الفاتح كما نريد .

    552428097.jpg

    هـ) يمكنك تعديل الماكرو ، وذلك من خلال محرر VBA ، ثم نستعرض أكواد الماكرو ( نافذة الأكواد ) ومن ثم نعدل في البرمجة الخاصة بهذا الماكرو ففي مثالنا هذا يمكننا تغيير ColorIndex = 3 أي أن اللون بدلا من أن يصبح أصفر فاتح يصبح أحمر مثلا .

    و) يمكننا كذلك أن نضيف ماكرو في شريط الأدوات ، وذلك من خلال عمل زر أمر ( قائمة عرض View– أشرطة الأدوات Toolbars – -- مربع أدوات التحكمControl Toolbox. ) ، ثم بعد ذلك اختيار زر أمر ، وبعد ذلك عمل هذا الزر على ورقة العمل ، بمجرد عمل هذا الزر سيطلب البرنامج تعيين ماكرو من قائمة وحدات الماكرو ليكون الخاص بهذا الزر ( أي أننا نخصص ماكرو معين يتم تشغيله بمجرد الضغط على هذا الزر )

    389679870.jpg

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

    956891419.jpg

    ح) الآن بمجرد ضغطك على زر الأمر فإنك تعطي أمر بتشغيل الماكرو الذي سجلته .

    ملحوظات هامة :

    1-يمكنك استخدام ماكرو التنفيذ المتكرر ، وذلك بإضافة سطر أمر لكود الماكرو كالتالي : ActiveCell.Offset(1,0).Select

    468108125.jpg

    عند النقر على الزر الآن فإنه بعد تنفيذ أمر تغيير الألوان للخلايا النشطة فإنه سينزل صف واحد لأسفل …

    2- لماذا في بداية تسجيل الماكرو قمنا بتحديد أي نطاق أولا وبعد ذلك قمنا بما فعلناه من خطوات ؟ ذلك أننا بذلك أعطينا أمر للماكرو بأن يتم التطبيق فقط على الخلايا النشطة من ورقة العمل .

    3) الملخص ..

    هكذا قمنا بعمل ماكرو ، وتشغيله ، وربطه بزر على ورقة العمل ، وقمنا بالتنفيذ المتكرر .

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

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

    ومع بعض واحدة واحدة خالص واللي هخلصه ترجمة وتنسيق أعرضه ليكم ، بداية بتعريف VBA , VBE والواجهة والأوامر وكيفية كتابة الأكواد والعمليات البرمجية ، وفي النهاية هعملكو زي مرجع شامل بكل الاوامر الممكنة وتعريف موجز بالامر او الكود وبيعمل ايه ومثال لكل واحد ، والله المستعان

    بندأ وبعون الله في الدرس الاول

    الجزء الأول ( مقدمة إكسيل VBA )

    في هذا الجزء سوف تتعلم :

    ** لماذا إكسيل VBA

    ** محرر أوامر VBE

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

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

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

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

    في نهاية هذه الدورة ، فإننا سوف نتعلم تطوير التطبيقات البسيطة مع اكسل VBA.

    قبل البدء في تعلم كيفية البرمجة باستخدام VBE ، يجب عليك أولاً كيفية استخدام البرنامج اللازم لإنشاء المشاريع الخاصة بك ، إن تطوير البرمجيات بواسطة ( VBA ) مدرج مع كل من برامج ميكروسوفت أوفيس ، مما يوفر لك عددا من الأدوات في تطوير المشروع .

    1) ما هو محرر فيجوال بيزك (Visual Basic Editor ) ؟؟

    عليك استخدام المصنفات ، والصيغ والرسوم البيانية ، وغيرها من الأشياء الجيدة لإكسيل معظم الوقت ، حان الوقت الآن لتوسيع النطاق الخاص بك ، واستكشاف آفاق جديدة تماما من جوانب إكسيل ، إنه محرر الفيجوال بيزك Visual Basic Editor ، عليك معرفة كيفية استخدامه ، وتعكف على مهمة كتابة بعض أوامره .

    إن محرر فيجوال بيزك ( VBE ) هو عبارة عن برنامج منفصل عن طريقه يمكنك كتابة وتعديل VBA أو الماكرو ، وهو يعمل بسلاسة مع إكسيل ، ويمكنك تنشيط هذا المحرر (VBE ) عن طريق الضغط على{ Alt+F11 } عندما يكون إكسيل منشطا ، أو عن طريق استخدام القوائم من أدوات – ماكرو – محرر فيجوال بيزك .. كما بالشكل التالي :

    898165162.jpg

    الشكل يوضح كيفية استدعاء محرر أوامر الفيجوال بيزك( VBE )

    أ) شريط القوائم :

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

    الشكل التالي يوضح واجهة محرر البرامج VBE والتي تحتوي على الكثير من المكونات ..

    213630575.jpg

    ب) مستعرض المشروع (Project Explorer ) :

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

    اضغط على علامة ( + ) الموجودة على يسار اسم المشروع في نافذة عرض المشاريع لتوسيع المشروع .

    211092849.jpg

    ج) نافذة الأكواد ( objects ) :

    يضم VBE أداة أخرى ، تحتوي على نافذة الأكواد Code window أو Module window ، كل object في المشروع يرتبط بنافذة أكواد خاصة به .

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

    116619819.jpg

    د) مستعرض الكائنات (Object Browser ( :

    ويضم VBE أداة أخرى ، تحتوي على نافذة الكائنات المتاحة لك خلال المشروع ، للوصول إلى مستعرض الكائنات ، اضغط F2 في شاشة VBE ، أو من قائمة عرض ( VIEW ) – مستعرض الكائنات (Object Browser ) القائمة المنسدلة في الأعلى قائمة تحتوي على مكتبة بها جميع وجوه الكائنات المتاحة حاليا .,. إذا كنت ترغب في تصفح كائنات إكسل ، حدد إكسل من القائمة المنسدلة.

    542872990.jpg

    هـ ) نافذة الخصائص (Properties Window ) :

    الشكل يوضح نافذة الخصائص لأحد الكائنات بالمشروع ، وهو على سبيل المثال (CommandButton1 ) أو زر أمر 1 ، فعندما تريد تغيير عنوان هذا الزر فإنك تغير في إعدادات Caption لهذا الزر وتضع أي عنوان تريده مثل ( اضغط هنا – خروج – حفظ ... ) يمكنك ايضا أن تلعب مع بعض الخصائص الأخرى مثل الخط ، الطول لون الخلفية العرض ، والارتفاع لتغيير مظهر CommandButton1 .

    473501956.jpg

    موجز سريع :

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

    ومنتظر ردودكم أكمل والا لأ لانها بصراحة أول مرة أعمل موضوع بالشكل ده ...

    • Like 6
  14. أضم صوتي لصوت الأخ رشدي

    يا جماعة الخير ايها الاساتذة العظام اكسبوا ثواب واعملوا موضوع يناقش عملية البرمجة بالـ VBA عن طريق الاكسيل

    موضوع جميل ، ويبان فيه الكفاءة والخبرة ، وانتو ماشاء الله عليكم اساتذة في الموضوع ده

    المشكلة ان كل الكتب الخاصة بالموضوع ده على النت انجليزي

    يبقى يا تترجموا يا تشرحوا

    والسلام عليكم ورحمة الله وبركاته

×
×
  • اضف...

Important Information