اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر (معدل)

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

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

نستكمل سويا السلسلة الدرس الأول من الجزء الرابع ( 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
قام بنشر

السلام عليكم

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

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

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 اقواس مضاعفة

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

معليش اخي لو انت سألت نفسك ليش يسمح ب نطاقين وليس 3 او 4 او 5

اخي العزيز لأن لمقصود ليس 2 او 3 او4

ولكن المقصود من الى يعني اثنين (From --- To)

تحياتي

  • Like 1
قام بنشر (معدل)

السلام عليكم

الاخ/ابوهاجر المصري ------------- المحترم

الله يبارك فيك اخي على هذا المجهود المبذول جعله الله في ميزان حسناتك

:clapping::clapping::clapping::clapping::clapping::clapping:

==========================================

بالنسبة لتحميل الصور بامكانك تحميلها كمرفق في المشاركة

وبعد التحميل اذهب الى القائمة التي مكتوب فيها (الوصول للمرفقات الحالية)

افتحها وستجد ثلاثة اختيارات :

اختار :

(ادخل الملف المرفق في صندوق النص )

بعد ما تحدد في صندوق النص موقع الادخال بالتاشير عليه

post-11314-1236196863.jpg

هذا علشان ما تتعب نفسك في تحميلها الى اماكن اخرى

اخوك خبور خير

تم تعديل بواسطه خبور خير
  • Like 1
قام بنشر

أخي ابو هاجر

جهد تشكر عليه

ربنا يقدرك و تكمل موضوعوك للأخر إن شاء الله

و مداخلات جميلة من الاخ عمودي

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

و الاخ خبور طريقة جميلة لتحميل الصور

و اقتراح صغير للخ ابو هاجر

انه في اخر كل شرح ترفق ملف الشرح للموضوع

منها حيسهل الموضوع على الاخوة في متابعة الموضوع بعيدا عن النت

و اسف للإطالة

و دمتم في حفظ الله و رعايته

قام بنشر (معدل)

السلام عليكم ..

أول شي بتشكرك على أسلوبك السلس و الحلو بالشرح..

بس في عندي مشكلة...

عمبحاول أكتب الاكواد اللي انت حاططها بس ماعمبشوف أي تغييرات على ورقة الاكسل..

ماعمبعرف كيف أشغل الكود...ياريت تدلني...

شكراً الك مرة تانية...

post-46098-1236241635.jpg

تم تعديل بواسطه قصي المغترب
قام بنشر (معدل)

أخي قصي

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

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

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

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

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

تم تعديل بواسطه أبو هاجر المصري
قام بنشر

نستكمل سويا الجزء الرابع وهذا هو الدرس الثاني منه ( 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

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

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

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

قام بنشر

السلام عليكم

تعد البيانات المنطقية بسيطة ، فهي إما قيمة حقيقية أو مزيفة ( True or False ) ، كما يمكنها أن تعبر عن القيمة ( True ) بـ ( 1 ) وعن القيمة ( False ) بـ ( 0 )

أذا حنتكلم عن VBA فأعتقد

true = -1

false = 0

تحياتي

قام بنشر

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

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

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

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

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

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

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

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

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

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

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

قام بنشر

السلام عليكم

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

لتوضيح الشي ذكرت True =1 , وفي تصحيحي True=-1 انا ذكرت انه اذا حنتكلم عن VBA يعني مش في معادلات الخلايا

امثلة

TRUE +TRUE=2 خطاء

TURE+TRUE=-2

TRUE *1 =1 خطاء

TRUE*1 = -1

True + 5=6 خطاء

True + 5=4

Dim var As Boolean
var = True
If var = 1 Then
    MsgBox "var=1"
Else
    MsgBox "var <>1"
End If
النتيجة الرسالة الثانية
Dim var As Boolean
var = True
If var = -1 Then
    MsgBox "var=-1"
Else
    MsgBox "var <>-1"
End If
النتيجة الرسالة الأولى

تحياتي

قام بنشر (معدل)

أخي أحمد يعقوب

بمجرد دخولك الموضوع بتشرفه حقيقي

أخي amoudi

جزاك الله خيرا على التوضيح

أشكرك كثيرا ومنكم نستفيد

وياريت لو تبقى على طول تعلق على الاضافة بتاعتي

لما فيه الخير للجميع

تم تعديل بواسطه أبو هاجر المصري
قام بنشر

السلام عليكم

اخي ابوهاجر اشكرك على سعة صدرك

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

للمعلومية

Dim condition As Boolean
condition = False

بشكل افتراضي اول ما نعرف متغير من نوع Boolean حيأخد القيمة False

تحياتي

قام بنشر

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

اخى ابو هاجر

موضوع رائع

و اذا اردت اضافه قد تكون مفيده فاليك المزيد :

اغلب استخدامى Boolean عند التعامل مع UserFor و مايتضمنه من OptionButton التى تقوم بتحديد الاجابه اذا كانت True أو False و ربط هذه الاجابه باستدعاء داله أو بيانات قمت بتحديدها مسبقا و أمر الاستدعاء هذا هام جدا فى vba و يساعدك فى أختصار الكود بكتابته مره واحده ثم استدعاءه من اى مكان بكود واحد 0

ستقوم بادراج UserForm و سنعيد تسميته من خانه Name الى frm_Main

اضافه OptionButton و سنسميه opt_True

اضافه OptionButton و سنسميه opt_False

اضاقه TextBox و سنسميه txt_Name

اضافه مفتاح أو Button و سنسميه btn_Start

مع ملاحظه ان اعاده التسميه هام جدا عند التعامل مع عدد كبير من المشاريع , و نقوم بكتابه اول ثلاثه احرف بخط صغير ثم _ ثم الاسم الذى تريده و من الافضل ان يكون معبر لاننا فى العاده ننسى مع كثره الاكواد 0

و سنقوم باضافه هذا الكود

Private Sub UserForm_Activate()
    opt_True.Value = True
    txt_Name.Text = "Hi"
End Sub
هذا الكود يعمل تلقائيا عند تشغيل الفورم السطر الاول يجبر الفورم بتنشيط مفتاح True السطر الثانى بكتب فى TextBox كلمه Hi سنقوم كتابه كود الاستدعاء بمفتاح Start
Private Sub btn_Start_Click()
    If opt_True = True Then
        MsgBox (txt_Name)
    Else
        MsgBox "You Did Not Select"
    End If
End Sub

الشرح

اذا كانت مفتاح True نشيط قم باستدعاء ماهو موجود ب txt_Name

و يمكنك تغيير ماشئت ب txt_Name

اذا كانت مفتاح False نشيط قم باظهار رساله You Did Not Select

مرفق ملف

السلام عليكم

True.rar

قام بنشر

أخي ابو هاجر

مبارك الترقية

و شكرا على جهوداتك

و مداخلات رائعة من الاستاذ عامود و الاستاذ هادي

و هذه المداخلات ستثري الموضوع

و دمتم

قام بنشر

اخي ابو هاجر

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

الف مبروك الترقية

تستحقها عن جدارة لهذا الموضوع المميز جدا

قام بنشر

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

* الأخ amoudi ماشاء الله عليك من غيرك فعلا الومضوع ده يبقى ناقص .... جزاك الله خيرا على الاضافات الممتعة ، ومعانا دائما

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

* الأخ justice شكرا لك كثيرا ، وهذه المداخلات هي جزء لا يتجزأ من الموضوع بل ومكمل ليه بالفعل ..

* الأخ aah_aah2008 جزاك الله خيرا ، وان شاء الله تشاركنا بآراءك وموضوعاتك الطيبة

* الأخ أحمد يعقوب جزاك الله خيرا ، ومنتظرينك تمتعنا برضة بتعليقك على الموضوع

الأخوة الأعزاء نستكمل سويا الجزء الرابع وهذا هو الدرس الثالث

4) المصفوفات ( Arrays )

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

- على سبيل المثال يمكنك تحديد مجموعة من 7 سلاسل متغيرة من البيانات ليمثلوا عدد الأيام في الأسبوع ، وإذا قمت بتسمية المصفوفة NumDays ، يمكنك الإشارة إلى اليوم الأول في الأسبوع ( NumDays(1) ) واليوم الثاني ( NumDays(2) ) .. وهكذا

** إعلان المصفوفة ..

- قبل أن تتمكن من استخدام المصفوفة ، يجب عليك الإعلان عنها أولا مثل متغير في VBA بـ Dim أولا أو بالتصريح العام ، إفتراضيا فإن VBA يحدد القيمة ( 0 ) كأقل فهرس ، وبالتالي تحتاج إلى تحديد عدد العناصر بالمصفوفة عن طريق تحديد فهرس أول رقم وفهرس آخر رقم بالمصفوفة ، والمثال التالي يوضح كيفية الإعلان عن عدد الأيام في الأسبوع ...

Dim NumDays(1 to 7) As Integer
- عندما تعلن عن مصفوفة ، يمكنك أن تحدد فقط القيمة العليا .. - كما يفترض VBA أن القيمة الصغرى هي ( 0 ) ، والمثالين التاليين يعينان نفس عدد العناصر ( 100 ) ..
Dim MyArray(0 to 99) As Integer
Dim MyArray(99) As Integer
- إذا كنت تريد من VBA أن يحدد القيمة ( 1 ) بأنها القيمة الصغرى في المصفوفة ، فإنه يجب عليك أن تضيف الكود التالي في قسم الإعلانات لديك ..
Option Base 1
- وتم هنا افتراض القيمة ( 1 ) كقيمة صغرى للمصفوفة من الآن ، وتمثل المصفوفة أعلاه 99 عنصرا بعد هذا الكود . ** تحديد قيم مجموعة من العناصر في مصفوفة .. افترض أننا بصدد تحديد القيمة ( 5 ) للفهرس الثالث في مصفوفة اسمها ( MyArray ) سيكون الكود كالتالي ..
MyArray(3) = 5
** المصفوفات متعددة الأبعاد .. لقد ألقينا نظرة على المصفوفات ذات البعد الواحد ، كما أن VBA يتيح لك الحصول على ما يصل إلى 60 بعد ، المثال التالي يعلن ( 5 ) أعداد في مصفوفة ذات بعدين ..
Dim MyArray(1 to 5, 1 to 5) As Integer 
- يمكنك التفكير في أن هذه المجموعة تحتل المصفوفة ( 5 x 5 ) ، وإذا كنا نريد إسناد القيمة ( 5 ) إلى الفهرس الذي موضعه ( الصف الثاني والعمود الخامس ) من المصفوفة فإننا نستخدم الكود التالي ..
MyArray(2, 5) = 5
- وبعبارة أخرى ، تم تخزين القيمة المتغيرة ( 5 ) في ( الصف الثاني و العمود الخامس ) من المصفوفة ( MyArray ) - وللمصفوفات ثلاثية الأبعاد ، يتم التفكير فيها على أساس أنها مصفوفة مكعبة ، تصور مصفوفة مكونة من أكثر من ثلاث أبعاد ، في الحقيقة هي شيء غاية في الصعوبة ، ولكن لا تقلق من البعد الرابع وما بعده فثق تماما أنك لن تحتاجه . ** المصفوفات الديناميكية ... - حتى الآن فقد قمنا بالإعلان عن مصفوفات محددة العناصر ، ولكن إذا أردت الإعلان عن مصفوفة بدون تحديد عناصرها ..
Dim MyArray() As Integer
- وهذه هي الطريقة لعمل مصفوفة ديناميكية ، عن طريق وضع قوسين فارغين بعد اسم المصفوفة .. - ولتغيير حجم المصفوفة ، يجب عليك استخدام تعبير ( ReDim ) لتخبر الـ VBA كم عدد عناصر المصفوفة ، وفي أغلب الأحيان ، فإن عدد عناصر المصفوفة يتحدد من خلال تشغيل برنامجك ، وتعبير ( ReDim ) يمكن استخدامه أي عدد من المرات لتغيير حجم المصفوفة كلما احتجت ذلك . - على سبيل المثال ، لو كنت بحاجة إلى تغيير حجم مصفوفة إلى ( 10 * 10 ) ..
ReDim MyArray(10,10) As Integer

- الآن فإنك قمت بتغيير الحجم أو العناصر بمصفوفة ديناميكية ، وكذلك لتعرف جيدا أنه عند إعادة تعيين عناصر مصفوفة ديناميكية باستخدام ( ReDim ) فإنك تمحي كل القيم المخزنة حاليا في جميع العناصر ..

- وسوف يتم مناقشة جزئية المصفوفات بشكل مفصل في فصل قادم بإذن الله ...

** معلش يا جماعة هو جزء بسيط لكنه مهم جدا ، والدرس القادم بإذن الله عن المدخلات والمخرجات في VBA

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

  • Thanks 1
قام بنشر

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

و هذا مثال مايكروسوفت الذى تجده بHelp

Example

This example uses the Array function to return a Variant containing an array.

Dim MyWeek, MyDay

MyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")

' Return values assume lower bound set to 1 (using Option Base

' statement).

MyDay = MyWeek(2) ' MyDay contains "Tue".

MyDay = MyWeek(4) ' MyDay contains "Thu

".

وقد قمت بالتعديل عليه لاظهار ايام الاسبوع عن طريق Array بالكود التالى

Sub DOIT()
    Dim MyWeek, MyDay
    MyWeek = Array("Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
    For i = 0 To 6
        MyDay = MyWeek(i)
        MsgBox (MyDay)
    Next i
End Sub

مع ملاحظه اننا قمن بمناداه ايام الاسبوع بعد تعريفها MyDay بوضعها بين قوسين

مرفق ملف

السلام عليكم

Array.rar

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information