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

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

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

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

تقبلوا منى وافر الاحترام والتقدير

*************************************************************************************************************

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

الاخوه الكرام

بعد فترة انقطاع عن تقديم سلسلة علمنى كيف اصطاد بسبب الانشغال من الانتهاء ببرنامج EMA بشكله الجديد

وبعد ان انتهيت منه بحمد لله 

 أقدم لكم اليوم بمشيئة الله 

شروحات عن الفورم Form 

من البدايه حتى الاحتراف بأذن الله 

الدرس الاول 

 1- الدخول الى محرر الاكواد ( Visual Basic ) بالضغط على Alt+ f11 

سيظهر معك الصوره التاليه 

large.4.png.7854c87caff5ccb9204442905199

2- لو نظرنا الى الصوره السابقه سنجد كلمة Insert  عليها دائره حمرا قم بالضغط على كلمة Insert ستظهر لك الصوره التاليه

large.2.png.7d548bfa6f5387fa38bf0a3701ce

 3 - اضغط على UserForm  كما هو مبين بالصوره اعلاه  سيظهر لك الصوره التاليه

medium.6.png.d009df904e842bfba8f8eaf75ec

4- فى الصوره السابقه لو نظرنا لها سنجد شريط الادوات كما هو موضح بالصوره التاليه

large.3.png.7ae9d9bfa4d885e935d8e293c290

5-صندوق ادوات التحكم  ToolBox كما هو موضح بالصوره التاليه

large.5.png.3a9f0ea13621b2865d3bf7d6aaad

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

اولا :- المؤشر ( Pointer ) ***  استعمال هذة الاداة ليتيح لك الانتقال الى مود الاختيار ما بين عناصر التحكم الموجودة على الفورم لتحريكها او التحكم فى حجمها .. هناك        بعض اصدارات من الاكسيل عندما تختار ان تضيف زر مثلا ... يبقى المؤشر على الفورم فى وضع الاضافة/ فكلما ضغطت على الفورم بعد ذلك  يضيف زر جديد وهكذا .... والحل عندها الضغط على المؤشر للهروب من هذة الدائرة المفرغة ( المرجع الاستاذ /اسامه البراوى )

ثانيا :- العنوان ( Lable ) *** هى أداه تستخدم لكتابه عنوان 

ثالثا :- صندوق النص ( Text Box )  *** وهى اداه تسمح للمستخدم بكتابة نص او رقم أو اى شئ بداخلها

رابعا:- أداة السرد والحوار ( ComboBox)  *** وهى أداه يمكن اضافة لها قائمة محدد يسمح للمستخدم الاختيار منها وهى مثل القائمة المنسدله بالاكسيل

خامسا :- صندوق القوائم ( ListBox ) *** وهى اداه تشبه وعاء يحتوى على بيانات يمكن اضافه هذا المحتوى من Text Box او ComboBox ثم ترحيل هذا المحتوى                                                           الى شيت الاكسيل أو رفع محتوى من شيت الاكسيل وعرضه بـ ListBox 

سادسا :- صندوق الفحص (Check Box) *** تستخدم لعمل عدة صناديق فحص واختيار واحد او اكثر منهما 

سابعا:- زر الاختيار (Option Box ) *** تستخدم هذه الاداه فى عرض عدة بدائل امام المستخدم لاختيار احدهما فقط 

ثامنا:- زر التبديل (Toggle Button) *** هى اداه تشبه المفتاح الكهربائى له خيارين أما on أو Off  ولكن بالاكسيل هذه الاداه لها خيارين أما true وأما false

تاسعا:-الاطار (Frame) *** ويستخدم لعمل اطار لمجموعه عناصر 

عاشرا:- زر الامر (Command Button) *** هو زر يتم من خلال تنفيذ الكثير من الاكواد او التعليمات البرمجيه

احدى عشر :- شريط التبويب ( Tab Strip) *** تتيح للمستخدم من عرض ادواته على شكل صفحات عرض 

اثنى عشر :- شريط الصفحات (Multi Page)*** تتيح للمستخدم من عرض ادواته على شكل صفحات عرض

ثلاثة عشر :- شريط الانزلاق (Scroll Bar) *** هى اداه لها شكلان شكل عمودى واخر افقى وهى تشبه بحد كبير الاداه Spin Button 

اربعة عشر :- زر التدوير ( Spin Button) *** هى اداه تستخدم لزياده قيمة معينه او نقصانها ويتم تحديد قيمة عليا وقيمة سلفه ومقدار هذه القيم

خامس عشر :- صوره( Image) *** وهى اداه تتيح للمستخدم من ادراج صوره بداخلها

وان شاء الله كما قلت سوف نقوم بشرح كل جزء بدرس خاص

****************************************************************************************************

5- خصائص الفورم ( Properties Window)

انظر للصوره التاليه

large.12.png.55532905d85e1398ca6ef9be819

هل يمكن اضافة ادوات تحكم جديدة ؟

نعم

 بالضغط على الزر الايمن فى اى مكان فاضى او مليان فى التول بوكس

سيظهر لك Additional Controls كما هو مبين بالصوره التاليه 

large.7.png.59c52b60440e77bd0dafb280f94e

وعند الضغط على Additional Controls ستجد الصوره التاليه

large.8.png.1d81f3ad3044bdcb9f486d3bf6c9

فى الصوره السابقه ستجد على اليسار فى الاسفل Show  وتحتها مربع به علامه صح لو قمت بحذف علامة صح من المربع ستجد القائمة على اليمين ظاهر بها كل عناصر التحكم انظر للصور التاليه بعد االه علامه الصح

large.9.png.db31fb87d159859eff93936bcf3b

فى الصوره السابقه خامس خيار ضع علامه صح Calendar Control 12.0  ثم اضغط اوك ستجد ان عنصر التحكم  Calendar Control 12.0 موجود بصندوق عناصر التحكم كم هو موضح بالصوره

large.10.png.613b3993059c7aed46c46d0eb3c

فى الصوره السابقه لو نظرت الى صندوق التحكم ستجد ان عنصر Calendar Control 12.0 ظاهر كما هو موضح بالدائره الحمراء الصغيره اضغط على هذه الايقونه ثم اذهب الى الفورم وقم بالرسم التقويم ستجده كما هو محاط بالدائره الاحمراء الكبيره فى الصوره السابقه 

وبكدا يبقى عرفنا ازاى نضيف عنصر تحكم جديد الى صندوق التحكم

 

والى لقاء اخر بأذن الله فى سلسه علمنى كيف اصطاد

تقبلوا تحياتى

**************************************************************

اليوم بمشيئة الله هنتكلم عن اول عنصر تحكم وهو اللـ Label 

هنتناول الموضوع على ثلاث مراحل

1-كيفية انشاء وتصميم الـ Label  على الفورم

2-كيفية التعامل والتحكم بخصائص الـ Label  من شاشة الخصائص فى مرحلة التصميم

3- كيفية التعامل والتحكم بخصائص الـ Label  من شاشة الخصائص فى لغة البرمجه وكتابة الاكواد

 

أولاً :- كيفية انشاء وتصميم الـ Label  على الفورم

بختصار شديد شاهد الصوره والتبع الخطوات 

اضغط على العلامه A الموجوده فى التول بوكس واذهب بالماوس الى الفورم وقم برسم الـ Label  بالابعاد التى تريدها من عرض وارتفاع 

large.13.png.702eaca2b792994927716986891

 

2-كيفية التعامل والتحكم بخصائص الـ Label  من شاشة الخصائص فى مرحلة التصميم

لو نظرنا للصورة السابقه ستجد خصائص الفورم هى رقم 3 على يسار الصورة

فعند تحديد الـ Label  بالماوس ( يعنى الوقوف عليه وتحديده ) ستجد خصائصه على اليسار كما هو بالصوره عاليه على اليسار

وهذه هى الخصائص اللى هنقوم بشرحها اليوم

medium.14.png.9f145e06000ed09d202a58aaca

انا رقمت كل الخصائص كما هو مبين بالصوره و هنمسك اهم الخصائص والاكثر شيوعا فى الاستخدام ونبدا نشرح بالتفصيل

1-الخاصيه ( Name) :- 

Name  هو اسم الـ  Label المستخدم فى الاكواد 

عند انشاء اى Label  يقوم الفيجوال بيسك بأعطاء اسم افتراضى  له Label 1 اذا قمنا بعمل Label    ثانى فأن الفيجوال بيسك يعطى له اسم افتراضى Label 2 

وانا افضل عدم تغيير اسماء Label  الافتراضيه التى عرفها الفيجوال بيسك 

فعندما نريد كتابه كود خاص بالعنصر Label 1  فى حدث Click على سبيل المثال 

يكون بداية الكود كالتالى

Private Sub Label1_Click()

 

فأذا قمنا بتغيير اسم Label 1   كما عرفه الفيجوال بيسك الى اسم اخر من خاصيه Name  وليكن مثلا غيرناه الى (Nomber )

فهنا عند كتابة كود فى حدث Click يكون كالتالى

Private Sub Nomber_Click()

ففى حال تغيير الاسم وعدم التزامك بالاسم داخل محرر الاكواد وكتابة كود يحدث Error

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

************************************************************************************************************

3 - الخاصيه Auto size :-

هى خاصيه تحمل خيارين true و  False  

عن اختيارك true  فأن عرض الـ Label  سوف يكون تلقائى حسب محتوى النص بداخله 

وعند اختيارك False  فأنه يتم توقف خاصيه عمل عرض تلقائى حسب طول النص للـ Label  وبالتالى لابد من  تحديد العرض اثناء التصميم او من خلال البرمجه كما سنرى لاحقا

***********************************************************************************************************

4- الخاصيه ( Back Color):-

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

large.15.png.9ea9f1cb3898bcd5c41382cfa00

5- الخاصيه ( Back Style):-

هذه الخاصيه تحمل خيارين هما

Fm Back Style Opague -  0 ( عند الاختيار سيتوقف عمل الخاصيه Back Color  حتى ولو كان تم اختيار لون بها وليكن خلفية حمراء سيظهر الـ Label                                                       بخلفية ساده )

Fm Back Style TransParent -  1 ( عند الاختيار سيتم عمل الخاصيه Back Color  وهيكون الـ Label بخلفية حسب الاختيارك من Back Color    )

لذالك هذه الخاصيه مرتبطه بالخاصيه Back Color

**************************************************************************************************************************

6- الخاصيه ( Border Color):-

هذه الخاصيه تتيح للمستخدم تغيير لون حدود اللـ Label    على اليسار يوجد سهم اضغط عليه ستظهر لك قائمة يمكنك من خلالها اختيار اللون المناسب كما يحلو لك 

7- الخاصيه ( Border Style):-

هذه الخاصيه تحمل خيارين هما

Fm BorderStyle none -  0 ( عند الاختيار سيتوقف عمل الخاصيه Border Color  حتى ولو كان تم اختيار لون بها وليكن لون حد أحمر سيظهر الـ Label                                                       بلون حد ساده )

Fm BorderStyle Single -  1 ( عند الاختيار سيتم عمل الخاصيه Border Color  وهيكون حدود الـ Label بخلفية حسب الاختيارك من Border Color)

لذالك هذه الخاصيه مرتبطه بالخاصيه  Border Color  

مثال لو اختارنا لون خلفيه للـ Label  لون رمادى ولون حدود احمر

شاهد الصورة ولاحظ ان الخاصيه Back Color اختيارها 1 وايضا الخاصيه Border Color اختيارها 1 شاهد الصوره

large.16.png.6208a7d2a32a072b49813663049

********************************************************************************************************************************************

8- الخاصيه ( Caption):-

هذه الخاصيه تتيح للمستخدم كتابة نص او رقم او اى شئ ليكون هو عنوان الـ Label  الظاهر على الفورم وهى من اهم الخصائص على الاطلاق ان لم يكن الوحيده لان الليبل ما هو الا عنوان لعنصر على الفورم والخاصيه Caption   هى التى يكتب بها العنوان المراد

مثال لو كتبنا بسم الله الرحمن الرحيم ستجد اللـ Label  على الفورم عنوانه " بسم الله الرحمن الرحيم

شاهد الصوره 

medium.17.png.56e5cf61afb3a74790ab1a95d4

********************************************************************************************************************

9- الخاصيه ( Control Tip Text ):-

هذه الخاصيه عند كتابة اى شئ بداخلها فأنها تعرض النص كتلميح عند وقوف الماوس على الـ Label 

******************************************************************************************************

11- الخاصيه ( Font ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى نوع وسماكة وحجم الخط للنص داخل اللـ Label      

الافتراضى فى الفيجوال بيسك نوع الخط هو Tahoma ) والسماكه هى (Regular) وحجم الخط هو ( 8)

medium.19.png.75ecf04b80a969a2d0389dd670

 يوجد على يسار الخاصيه مربع صغير به ثلاث نقاط عند الضغط عليه ستجد شاشة الFont  كما هو بالصوره عاليه اختر منها نوع وسماكة وحجم الخط للنص ثم اضغط اوك 

************************************************************************************************

12- الخاصيه ( Fore Color ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى اختيار لون الخط للنص داخل الـ Label      

مثال لو اخترنا لون الاخط اصفر شاهد الصورة

medium.20.png.d04c37f57d9ed64a9edb02b726

************************************************************************************************************

 13- الخاصيه ( Height )

وهذه الخاصيه تتيح للمستخدم التحكم فى ارتفاع الـ  Label   

فيمكنك أما من خلال التصميم السحب بالماوس للاسفل لتحديد الارتفاع للـ Label  أو كتابة رقم للارتفاع فى الخاصيه Height

****************************************************************************************************************************

15- الخاصيه (Left) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى بعد الـ  Label عن الضلع الايسر للفورم

25-الخاصيه (Top) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى بعد الـ  Label عن الضلع الاعلى للفورم
مثال لو وضعنا قيمة Left 150 *** وقيمة Top 100 ستجد الصوره التالية 
 
medium.22.png.26b9e06e33f09c51d51534d2fa
*************************************************************************************************************************************************

27-الخاصيه ( Width)

هذه الخاصيه تتيح للمستخدم التحكم فى عرض الـ Label

كما يمكن ايضا التحكم فى عرض الـ Label من خلال التصميم على الفورم بالماوس

*************************************************************************************************

24-الخاصيه (Text Align) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى اتجاه النص ( محاذاه النص ) داخل الـ Label   
هل يكون يميناً أو يساراً أو وسط Label  
لو ذهبت للخصائص وعند الخاصيه Text Align ستجد سهم اضغط عليه ستجد 3 خيارات امامك وهى
 fm Text Align Left  -1      عند الاختيار ستجد ان اتجاه النص داخل Label     يبداء من اليسار
 fm Text Align Center  -2    عند الاختيار ستجد ان اتجاه النص داخل Label     فى المنتصف
 fm Text Align Right  -3        عند الاختيار ستجد ان اتجاه النص داخل Label   يبداء من اليمين
مثال عند اختيار رقم 2 شاهد الصورة
medium.23.png.acdb5354c38e8679332050cf17
**************************************************************************************************************************

26-الخاصيه (Visible )

وهذه الخاصيه تتيح للمستخدم التحكم فى ظهور او عدم ظهور Label  عند عرض الفورم 

وعند الضغط على السهم المجاور لها ستجد لها خيارين True  و  False

عندد اختيار True سوف يظهر الـ Label   على الفورم عند فتحه ( وهذا هو الخيار الافتراضى من الفيجوال بيسك )

وعند اختيار False ٍسوف يختفى الـ Label  على الفورم عند فتحه يعنى هيكون غير ظاهر ومخفى لا يراه المستخدم

***********************************************************************************************************

20- الخاصيه ( ٍِSpecial Effect )

هذه الخاصيه من الخصائص الهامه للـ Label   وهى تعطى اشكال مبهره ومميزه للـ Label   ولها خمس اشكال

شاهد الصوره التاليه

medium.24.png.427812e1f3be38d6b25990c526

***********************************************************************************************************

3- كيفية التعامل والتحكم بخصائص الـ Label  من شاشة الخصائص فى لغة البرمجه وكتابة الاكواد

 

هنجرب بمثال عملى لكيفية التحكم بخصائص اللـ  Label  فى لغة البرمجه وهنوضع هذه الاكواد فى حدث فتح الفورم

اضغط دبل كليك على الفورم  وهنعمل كود فى حدث فتح الفورم 

اتبع الصوره التالية

large.25.png.a1f5bdbc1aae7e0cffd0ea36f0c

 

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

large.26.png.2f4cb207b8bc8562bf7ce9507a9

 

 

فى الصوره السابقه المربع الاحمر هو مكان كتابه الاكواد

أول شئ عايزين نجعل  Label 

Back color  لونه اصفر

هنكتب التالى 

label1.b

مجرد كتابة ليبل 1 وبعدها نقطه ( تكتب من خلال جعل لغه الكيبورد انجليزى ثم الضغط على حرف ز ) ستظهر لك قائمة عند كتابة حرف B سوف يتم فلترة القائمه طبقا للحرف المكتوب 

شاهد الصوره

large.27.png.870049b2f3509e2e33cb4ba5f29

ثم نقوم باختيار BackColor 

Label1.BackColor = 65535

كتبنا اسم الـ Label1 وبعدها (.)  ثم اسم الخاصيه ثم (=) ثم النتيجة المطلوبه

255 تشير الى جعل خلفية الـLabel  لونه اصفر

اليك صوره بارقام الالوان فى الفيجوال بيسك

large.28.png.008967eff15acaf7c6be5f9194e

------------------------------------------------------------------------------------------------------------------------------------------------------

ولو عايزين نعمل نص للـ Label هيكون كالتالى

Label1.Caption = "بسم الله الرحمن الرحيم"

لو لاحظنا جعلنا النص بين علامتى تنصيص وتكتب من خلال (shift+حرف ط )

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

ولو حابين نحدد حجم الخط هيكون كالتالى 

Label1.Font = 20

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

ولوحابين نحدد سماكة الخط هيكون كالتالى  بعد يساوى ستجد خيارين أما True أو False  على سبيل المثال هنختار True  لجعل سماكه الخط ثخين

Label1.Font.Bold = True

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

ولو حابين نجعل تاثر للـLabel بشكل خاص ممكن كالتالى 

Label1.SpecialEffect = fmSpecialEffectRaised

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

ولو حابين نخلى النص داخل اللـLabel  فى المنتصف كالتالى (تحديد محازاة النص داخل الـ Label )

 

Label1.TextAlign = fmTextAlignCenter

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

ولتحديد ارتفاع الـlabel كالتالى

Label1.Height = 50

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

ولو حابين نحدد عرض الـ label كالتالى

Label1.Width = 150

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

هذا هو الكود بشكله النهائى

Private Sub UserForm_Initialize()
Label1.BackColor = 65535
Label1.Caption = "بسم الله الرحمن الرحيم"
Label1.Font = 20
Label1.Font.Bold = True
Label1.SpecialEffect = fmSpecialEffectRaised
Label1.TextAlign = fmTextAlignCenter
Label1.Height = 50
Label1.Width = 150
End Sub

 

اضغط Run أو اضغط F5 شاهد الفورم وشوف الـ  label ازاى شكله ستجده كالتالى

large.29.png.c4fbbaa3f0a41727510f6a5dcb5

 

هل يوجد طريقه اخرى لكتابه الكود بشكل ابسط نعم يوجد طريقه اخرى من خلال استخدام With

شاهد الكود كالتالى

Private Sub UserForm_Initialize()

With Label1
.BackColor = 65535
.Caption = "بسم الله الرحمن الرحيم"
.Font = 20
.Font.Bold = True
.SpecialEffect = fmSpecialEffectRaised
.TextAlign = fmTextAlignCenter
.Height = 50
.Width = 150
End With

End Sub

هنا استخدمنا with وطبعا لازم نقفل with  ب End with

ثم تكتب ( . ) وبعدها اسم الخاصيه ثم (=) 

جرب بنفسك وحاول اكتب الكود واى استفسار انا تحت امرك

والى لقاء اخر مع درس جديد من دروس علمنى كيف اصطاد ( TextBox) انتظرونا

تقبلوا تحياتى

*********************************************

 

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

الاخوه الكرام اليوم موعدنا بمشئية الله عن شرح TextBox

كما قلنا من قبل ان TextBox هو صندوق ادخال يتم ادخال فيه نص او رقم من المستخدم اثناء العمل على الفورم

أن شاء الله هيتم تناول الموضوع على اربع مراحل

1- كيفية انشاء TextBox على الفورم  اثناء عملية التصميم

2- التعرف على خصائص الفورم من شاشة الخصائص اثناء عملية التصميم

3-وقت تنفيذ الكود الخاص بالـ TextBox

4-التعامل مع الـ TextBox فى لغة البرمجه 

5-كيفية عمل تنسيقات للقيم المدخله 

نبدأ بسم الله

أولا :- كيفية انشاء TextBox على الفورم  اثناء عملية التصميم

من صندوق التحكم أضغط على الايقونه المشار لها بحرف ِabl  ثم اذهب الى الفورم وقم برسم TextBoxعلى الفورم بالابعاد اللى المناسبه لك من عرض وارتفاع شاهد الصوره التاليه توضح لك الامر

large.30.png.4b822534f5cd29d4604f2f956e8

فى الصوره السابقه يوجد  Label1 و textBox1  هذه هى العناصر اللى موجوده على الفورم 

لو حابين نعمل Label و textBox ممكن يكون من خلال الطريقه السابقه وهى اضغط على العنصر المراد اضافته الى الفورم من صندوق التحكم  ثم قم برسمه على الفورم

وممكن من خلال الوقوف على العنصر يعنى تحديده ثم كليك يمين ستظهر قائمه اختر منها Copy 

دلوقتى انا عايز اعمل  Label و textBox  قم بتحديد Label1  واضغط على زر Ctrl من الكيبورد واستمر بالضغط عليه ثم بالماوس حدد textBox1   ثم اضغط كليك يمين بالماوس ستظهر قائمه اختر Copy

ثم اذهب الى اى مكان فاضى فى الفورم واعمل كليك يمين واختر Paste  او من خلال الكيبورد الضغط على زر Ctrl +زر حرف V  ستجد انه تم انشاء  Label2 و textBox2 وطبعا هيكون بنفس تنسيق خصائص   Label1 و textBox1 

شاهد الصوره

 

large.31.png.4ff8054eef03e2c898b07dadcd0

---------------------------------------------------------------------------------------------------------------------------------------------

ثانياً :-  التعرف على خصائص الـ TextBox من شاشة الخصائص اثناء عملية التصميم

شاهد الصوره التالية لخصائص الـ TextBox

 

large.32.png.c6018f29af1b7e81cf13de0feb9

 

 

 

 

هنمسك اهم الخصائص والاكثر شيوعا فى الاستخدام ونبدا نشرح بالتفصيل

 الخاصيه (Name) :-

Name  هو اسم الـ  TextBox المستخدم فى الاكواد 

وعند انشاء اى TextBox يقوم الفيجوال بيسك بأعطاء اسم افتراضى  له TextBox1 واذا قمنا بعمل TextBox  ثانى فأن الفيجوال بيسك يعطى له اسم افتراضى TextBox2 

وانا افضل عدم تغيير اسماء TextBox الافتراضيه التى عرفها الفيجوال بيسك 

فعندما نريد كتابه كود خاص بالعنصر TextBox1  فى حدث Change على سبيل المثال 

يكون بداية الكود كالتالى

Private Sub TextBox1_Change()

فأذا قمنا بتغيير اسم TextBox1   كما عرفه الفيجوال بيسك الى اسم اخر من خاصيه Name  وليكن مثلا غيرناه الى (Nomber )

فهنا عند كتابة كود فى حدث Change يكون كالتالى

Private Sub Nomber_Change()

ففى حال تغيير الاسم وعدم التزامك بالاسم داخل محرر الاكواد وكتابة كود يحدث Error

------------------------------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Back Color)

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

 

large.33.png.39903f138d9b0bf7059f3b99073

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------------

 

الخاصيه ( Control Source)

وهذه الخاصيه تتيح للمستخدم تحديد خلية محدده تظهر محتواها فى TextBox1    عند عرض الفورم والعكس صحيح 

بمعنى ان اى ادخال فى TextBox1    يظهر مباشره فى الخليه التى قمت بكتابتها فى الخاصيه Control Source 

فعلى سبيل المثال لو كتبنا ان Control Source هو محتوى الخليه A1 فعند عرض الفورم ستجد ان محتوى الخليه ظاهر فى الـ  TextBox1    

ولو قمت بتعديل المحتوى الموجود فى TextBox1     وضغط انتر سوف يتغير مباشره فى الخليه A1  

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

شاهد الصوره

 

large.34.png.474ec4428917c725b6c7a2fe73c

 

 

---------------------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Enabled )

هذه الخاصيه تحمل خيارين true و False 

عند اختيار true سوف يكون بأمكان المستخدم ادخال او تعديل محتوى TextBox1     

وعند اختيار False  لا يكون بأمكان المستخدم ادخال او تعديل محتوى TextBox1     

شاهد الصوره عند اختيار  False

 

large.35.png.9d262018161cfe54047c2996d52

----------------------------------------------------------------------------------------------------------------------------------------

 الخاصيه (Font) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى نوع وسماكة وحجم الخط للنص داخل الـ  TextBox1     

الافتراضى فى الفيجوال بيسك نوع الخط هو Tahoma ) والسماكه هى (Regular) وحجم الخط هو ( 8)

 الخاصيه (Font Color) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى اختيار لون الخط للنص داخل الـ  TextBox1    

مثال عند اختيار نوع الخط (Traditional Arabic) والسماكه ( Bold ) وحجم الخط (18)

شاهد الصوره

 

large.36.png.b737011231b10c126a817437f31

 

------------------------------------------------------------------------------------------------------------------------------------------

 الخاصيه ( Height )

وهذه الخاصيه تتيح للمستخدم التحكم فى ارتفاع الـ  TextBox1     

فيمكنك أما من خلال التصميم السحب بالماوس للاسفل لتحديد الارتفاع للـ TextBox1     أو كتابة رقم للارتفاع فى الخاصيه Height

------------------------------------------------------------------------------------------------------------------------------------------

 

الخاصيه ( Width)

هذه الخاصيه تتيح للمستخدم التحكم فى عرض الـ TextBox1

كما يمكن ايضا التحكم فى عرض الـ TextBox1 من خلال التصميم على الفورم بالماوس

------------------------------------------------------------------------------------------------------------------------------------------

 

 الخاصيه (Left) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى بعد الـ  TextBox1     عن الضلع الايسر للفورم

الخاصيه (Top) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى بعد الـ  TextBox1     عن الضلع الاعلى للفورم
مثال لو وضعنا قيمة Left 126 *** وقيمة Top 90 ستجد الصوره التالية
 
large.37.png.19b6261a3b2496cb0dc57cf2a2c

 

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Locked )

هذه الخاصيه تحمل خيارين true و False 

عند اختيار False  سوف يكون بأمكان المستخدم ادخال او تعديل محتوى TextBox1     

وعند اختيار True  لا يكون بأمكان المستخدم ادخال او تعديل محتوى TextBox1     يعنى هيكون فى حمايه على  TextBox1

----------------------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Maxlenght )

هذه الخاصيه يمكن من خلالها التحكم فى عدد الاحرف او الارقام المدخله بالـ TextBox1 

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

اكتب فى خاصيه Maxlenght  رقم 8 فلو حب المستخدم يكتب ( محمد خالد ) فأنه لا يستطيع الا كتابة (محمد خال) لماذا لانه تم تحديد عدد الادخال 8 فقط

واحد هيقولى محمد خالد عددها 8 حروف هقوله ان الفيجول هيقوم بعد الفاصله اللى بين محمد وبين خالد وبالتالى (محمد 4 حروف + 1 فاصله + خال 3 حروف كدا =8)

شاهد الصوره

 

large.38.png.7bf973729bda53e6372663cbfc8

------------------------------------------------------------------------------------------------------------------------------------------

 

الخاصيه ( Multiline )

هذه الخاصيه تحمل خيارين true و False 

عند اختيار False  سوف يكون عرض المحتوى اللى بيتم ادخاله او تعديل فى محتوى TextBox1     على سطر واحد فقط 

وعند اختيار True  سوف يكون عرض المحتوى اللى بيتم ادخاله او تعديل فى محتوى TextBox1     على عدة اسطر ويجب مراعاة تعديل

ارتفاع TextBox1 ليظهر اكثر من سطر

شاهد الصوره

 

large.39.png.f01b467177faec58159e17fbb0f

 

------------------------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Password char )

هذه الخاصيه يمكن من خلالها التحكم فى طريقة أظهار القيم  المدخله بالـ TextBox1 

لو حضرتك عايز تجعل القيم المدخله فى  TextBox1  على شكل (  * )  مثلا شاهد الصوره التالية

 

large.40.png.a62ec5d966ab2f1f49dddf59dba

------------------------------------------------------------------------------------------------------------------------------------------

 

الخاصيه ( ScrollBars )

هذه الخاصيه تحمل اربع خيارات ويبدأ العدد من 0 الى 3

0- FMScrollBarsNone  ( هذا يعنى الغاء خاصيه ScrollBars )

1-FMScrollBarsHorizontal ( هذا يعنى عمل ScrollBars للـ TextBox1   بشكل أوفقى )

2-FMScrollBarsVertical      ( هذا يعنى عمل ScrollBars للـ TextBox1   بشكل رأسى )

3-FMScrollBarsBoth          ( هذا يعنى عمل ScrollBars للـ TextBox1   بشكل أفقى و رأسى مع بعض )

 

*** الاختيار رقم 1 وهو عمل ScrollBars للـ TextBox1   بشكل أوفقى لابد من جعل خاصيه Multiline  تكون False يعنى يكون الكتابه على سطر واحد وبكدا يعمل سكرول بار افقى للوصول الى اخر السطر

**** الاختيار رقم 2 وهو عمل ScrollBars للـ TextBox1   بشكل رأسى  لابد من جعل خاصيه Multiline  تكون True يعنى يكون الكتابه على عدة أسطر  وبكدا يعمل سكرول بار رأسى للوصول الى اخر السطر

**** الاختيار رقم 3 وهو عمل ScrollBars للـ TextBox1   بشكل رأسى واخر افقى بصراحه حاولت استخدمه لكن لم يظهر معى بشكل افقى وراسى وتفسير ذالك هى الخاصيه  Multiline   لانها تحمل خيارين اما الادخال يكون على سطر واحد وبالتالى فان الاسكرول بار الرأسى لا يوجد له فائده  وأما الادخال على عدة اسطر متتاليه وبالتالى ان الاسكرول بار الافقى لي له فائده هذا والله اعلم ( مش عايز افتى فى شئ لا اعلمه واترك الامر للخبراء )

شاهد الصوره

large.41.png.766881b3b54700049d155bde58f

--------------------------------------------------------------------------------------------------------------------------

الخاصيه (Visible )

وهذه الخاصيه تتيح للمستخدم التحكم فى ظهور او عدم ظهور TextBox1   عند عرض الفورم 

وعند الضغط على السهم المجاور لها ستجد لها خيارين True  و  False

عندد اختيار True سوف يظهر الـ TextBox1   على الفورم عند فتحه ( وهذا هو الخيار الافتراضى من الفيجوال بيسك )

وعند اختيار False ٍسوف يختفى الـ TextBox1   على الفورم عند فتحه يعنى هيكون غير ظاهر ومخفى لا يراه المستخدم

--------------------------------------------------------------------------------------------------------------------------

الخاصيه (Tab index )

وهذه الخاصيه تتيح للمستخدم ترتيب التنقل بين الازرار على الفورم بعد الخروج منها من خلال الزر انتر  ويمكن تعطيل هذه الخاصيه من خلال استخدام الخاصيه Tab stop = True

الخاصيه (Tab Stop )

وهذه الخاصيه تحمل خيارين  True  و  False 

عندد اختيار True يتم تعطيل خاصيه Tab index

وعند اختيار False ٍسوف تفعل خاصيه Tab index للتنقل بين الازرار حسب الترتيب الذى ترغب فيه

------------------------------------------------------------------------------------------------

الخاصيه (Text Align) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى اتجاه بداية النص داخل الـ  TextBox1   
هل يكون يميناً أو يساراً أو وسط TextBox1   
لو ذهبت للخصائص وعند الخاصيه Text Align ستجد سهم اضغط عليه ستجد 3 خيارات امامك وهى
 fm Text Align Left  -1      عند الاختيار ستجد ان اتجاه النص داخل TextBox1     يبداء من اليسار
 fm Text Align Center  -2    عند الاختيار ستجد ان اتجاه النص داخل TextBox1     فى المنتصف
 fm Text Align Right  -3        عند الاختيار ستجد ان اتجاه النص داخل TextBox1     يبداء من اليمين
-------------------------------------------------------------------------------------------------------------------------

رقم 20 الخاصيه ( ٍِSpecial Effect )

هذه الخاصيه من الخصائص الهامه للـ TextBox1  وهى تعطى اشكال مبهره ومميزه للـ TextBox1  ولها خمس اشكال

شاهد الصوره التاليه

 

large.42.png.7055501353d5fb309b860f8f1d7

 

 

كما تشاهدون فى الصوره على اليسار دائره حمرا وبداخلها سهم يمكنك الضغط على السهم سيظهر لك قائمة الخيارات للاشكال اخترمنها الشكل المناسب لك 

جرب كل الاشكال واطلع علىها واختر ما يناسب زوقك

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

كدا الحمد لله انتهينا من المحور الاول وهو عملية التصميم ورسم TextBox وايضا انتهينا من المحور
 
الثانى وهو اهم خصائص الـ TextBox
 
ان شاء الله المره القادمه نتكلم عن المحور الثالث وهو وقت تنفيذ الكود الخاص بـ TextBox
 
ارجوا من الله ان اكون وفقت بالشرح واى استفسار انا تحت امر الجميع
 
تقبلوا تحياتى

*********************************************

 

ثالثاُ:- وقت تنفيذ الكود الخاص بالـ TextBox

قبل أن نتحدث عن وقت تنفيذ الكود 

لازم نعرف أولا أزاى بيكون كتابة ألاعلان عن الكود للـ  TextBox

Private Sub TextBox1_Change()


هنا يتم كتابة الكود المراد تنفيذه

End Sub

السطر الاول هو بداية الاعلان عن الكود 

فنقوم بكتابة Private Sub ستجد لونها بالكود أزرق ( وهو بداية لاى كود خاص لأى عنصر تحكم داخل الفورم )

ثم نقوم بكتابة اسم العنصر المراد عمل الكود له وهو بمثالنا TextBox1

ثم نقوم بكتابة _  ( تكتب من خلال الضغط على Shift+زر الطرح الموجود بالاعلى بجوار زر + )

ثم نقوم بكتابة وقت تنفيذ الكود (اللى هو موضوعنا اليوم) 

ثم كتابة () قوسين بهذا الشكل

وبمجرد الضغط انتر ستجد الكود عمل سطر تانى فيه End sub

يوجد طريقه اخرى وهى اتبع الصوره التالية توضح لك 

قم بالضغط على اى مكان فاضى بالفورم وادخل لمحرر الاكواد الخاص بالفورم

 

large.44.png.3a6b0afc9bc28812830eea53330

 

دلوقتى هنتكلم عن أهم طرق وقت تنفيذ الكود واكثرها شيوعا فى الاستخدام 

1- Afterupdate :- هنا يتم تنفيذ الكود بمجرد الانتهاء من الادخال فى TextBox1 والانتقال الى اى عنصر اخر ( وهو يشبه كثير طريقة Exit)

2-EXit :- هنا يتم تنفيذ الكود بمجرد الخروج من TextBox1 والانتقال الى اى عنصر اخر ( يشبه كثير طريقه  Afterupdate )

3-Change :- هنا يتم تنفيذ الكود عند حدوث اى تغيير فى TextBox1  

4-DblClick :-  هنا يتم تنفيذ الكود عند الضغط دبل كليك بالماوس داخل TextBox1 

5-Enter :- هنا يتم تنفيذ الكود بمجرد وضع مؤشر الماوس داخل صندوق TextBox1  

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

كدا الحمد لله انتهينا من المحور الثالث وقت تنفيذ الكود الخاص بالـ TextBox
 
ان شاء الله المره القادمه نتكلم عن المحور الرابع وهو التعامل مع TextBox فى لغة البرمجه
 
ارجوا من الله ان اكون وفقت بالشرح واى استفسار انا تحت امر الجميع
 
تقبلوا تحياتى

 

 

 

رابعاً:- التعامل مع خصائص الـ TextBox فى لغة البرمجه 

فى الدرس قبل السابق عرفنا ازاى نتحكم فى خصائص الفورم من شاشة الخصائص اثناء عملية التصميم

فماذا لو حبينا نتحكم فى خصائص الفورم ولكن من خلال الاكواد وليس من شاشة الخصائص فى مرحله التصميم

هنبدأ على طول بمثال عملى ونشرح عليه

اضغط دبل كليك على اى مكان فاضى فى الفورم وهندخل محرر اكواد الفورم ونعمل كود فى حدث فتح الفورم اتبع الصوره

large.46.png.84320c014c96587ad97881b821a

large.47.png.9c05defa8d78b5edb737f7c74fc

 

فى المكان المظلل باللون الاحمر هنا موضوع كتابه الاكواد

1-خاصيه BackColor :-

الرقم 15849925 لجعل خلفية التكست بوكس لونها سماوى فاتح ( راجع ارقام الالوان فى الدروس الخاصه بالـ Label )

TextBox1.BackColor = 15849925

****************************************************************************************************************************************

2-خاصيه Enabled :-

TextBox1.Enabled = True

أو 

TextBox1.Enabled = False

هذه الخاصيه تحمل خيارين true و False 

عند اختيار False  سوف يكون بأمكان المستخدم ادخال او تعديل محتوى TextBox1     

وعند اختيار True  لا يكون بأمكان المستخدم ادخال او تعديل محتوى TextBox1     يعنى هيكون فى حمايه على  TextBox1

***************************************************************************************************************************

3-خاصيه Height :-

للتحكم بارتفاع التكست بوكس وليكن جعل الارتفاع 35

TextBox1.Height = 35

************************************************************************************************************************************

4-خاصيه Left :-

للتحكم فى بعد التكست بوكس عن الضلع الايسر للفورم وليكن جعل البعد 80

TextBox1.Left = 80

*********************************************************************************************************************************************

5-خاصيه Locked :-

هذه الخاصيه تحمل خيارين true و False 

TextBox1.Locked = False

أو

TextBox1.Locked = True

عند اختيار False  سوف يكون بأمكان المستخدم ادخال او تعديل محتوى TextBox1     

وعند اختيار True  لا يكون بأمكان المستخدم ادخال او تعديل محتوى TextBox1     يعنى هيكون فى حمايه على  TextBox1

***********************************************************************************************************************

6-خاصيه MaXLength :-

 

هذه الخاصيه يمكن من خلالها التحكم فى عدد الاحرف او الارقام المدخله بالـ TextBox1 

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

اكتب فى خاصيه Maxlenght  رقم 8 فلو حب المستخدم يكتب ( محمد خالد ) فأنه لا يستطيع الا كتابة (محمد خال) لماذا لانه تم تحديد عدد الادخال 8 فقط

واحد هيقولى محمد خالد عددها 8 حروف هقوله ان الفيجول هيقوم بعد الفاصله اللى بين محمد وبين خالد وبالتالى (محمد 4 حروف + 1 فاصله + خال 3 حروف كدا =8)

TextBox1.MaxLength = 8

****************************************************************************************************************************

7-خاصيه Multline :-

هذه الخاصيه تحمل خيارين true و False 

عند اختيار False  سوف يكون عرض المحتوى اللى بيتم ادخاله او تعديل فى محتوى TextBox1     على سطر واحد فقط 

وعند اختيار True  سوف يكون عرض المحتوى اللى بيتم ادخاله او تعديل فى محتوى TextBox1     على عدة اسطر ويجب مراعاة تعديل

ارتفاع TextBox1 ليظهر اكثر من سطر

TextBox1.MultiLine = False

أو

TextBox1.MultiLine = True

********************************************************************************************************

8-خاصيه Passwordchar :-

هذه الخاصيه يمكن من خلالها التحكم فى طريقة أظهار القيم  المدخله بالـ TextBox1 

لو حضرتك عايز تجعل القيم المدخله فى  TextBox1  على شكل (  * )  مثلا شاهد الصوره التالية

نلاحظ بالكود تم كتابة العلامه * بين اقواس تنصيص " * "  ( وهى تكتب من خلال shift+حرف ط )

TextBox1.PasswordChar = "*"

****************************************************************************************************************************

9-خاصيه ScorollBars :-

هذه الخاصيه تحمل اربع خيارات ويبدأ العدد من 0 الى 3

0- FMScrollBarsNone  ( هذا يعنى الغاء خاصيه ScrollBars ) شاهد الكود التالى -- بمجرد كتابة = ستجد قائمة تظهر لك بالاربع خيارات

TextBox1.ScrollBars = fmScrollBarsNone

1-FMScrollBarsHorizontal ( هذا يعنى عمل ScrollBars للـ TextBox1   بشكل أوفقى )

TextBox1.ScrollBars = fmScrollBarsHorizontal

2-FMScrollBarsVertical      ( هذا يعنى عمل ScrollBars للـ TextBox1   بشكل رأسى )

TextBox1.ScrollBars = fmScrollBarsVertical

3-FMScrollBarsBoth          ( هذا يعنى عمل ScrollBars للـ TextBox1   بشكل أفقى و رأسى مع بعض )

TextBox1.ScrollBars = fmScrollBarsBoth

***********************************************************************************************************************

10-خاصيه Visible :-

وهذه الخاصيه تتيح للمستخدم التحكم فى ظهور او عدم ظهور TextBox1   عند عرض الفورم 

عندد اختيار True سوف يظهر الـ TextBox1   على الفورم عند فتحه ( وهذا هو الخيار الافتراضى من الفيجوال بيسك )

TextBox1.Visible = True

وعند اختيار False ٍسوف يختفى الـ TextBox1   على الفورم عند فتحه يعنى هيكون غير ظاهر ومخفى لا يراه المستخدم

TextBox1.Visible = False

***********************************************************************************************************************

11-خاصيه Top :-

وهذه الخاصيه تتيح للمستخدم التحكم فى بعد الـ  TextBox1     عن الضلع الاعلى للفورم

TextBox1.Top = 90

************************************************************************************************************************************

12-خاصيه Width :-

هذه الخاصيه تتيح للمستخدم التحكم فى عرض الـ TextBox1    لو فرضنا نريد جعل العرض 100

TextBox1.Width = 100

********************************************************************************************************************************

13-خاصيه Text Align :-

وهذه الخاصيه تتيح للمستخدم التحكم فى اتجاه بداية النص داخل الـ  TextBox1   

هل يكون يميناً أو يساراً أو وسط TextBox1   
 
بمجرد كتابة = ستجد الفيجوال بيسك يعرض لك قائمة بها 3 خيارات 
 
 
 fm Text Align Left  -1      عند الاختيار ستجد ان اتجاه النص داخل TextBox1     يبداء من اليسار
TextBox1.TextAlign = fmTextAlignLeft
 fm Text Align Center  -2    عند الاختيار ستجد ان اتجاه النص داخل TextBox1     فى المنتصف
TextBox1.TextAlign = fmTextAlignCenter
 fm Text Align Right  -3        عند الاختيار ستجد ان اتجاه النص داخل TextBox1     يبداء من اليمين
TextBox1.TextAlign = fmTextAlignRight

****************************************************************************************************************************

14-خاصيه Special Effect :-

هذه الخاصيه من الخصائص الهامه للـ TextBox1  وهى تعطى اشكال مبهره ومميزه للـ TextBox1  ولها خمس اشكال

بمجرد كتابة = ستجد الفيجوال بيسك يعرض لك قائمه بها 5 خيارات

على سبيل المثال منها

TextBox1.SpecialEffect = fmSpecialEffectBump

جرب كل الخيارات واختار منها ما يناسب زوقك

**************************************************************************************************************************************

الكود بشكله النهائى هيكون كدا

Private Sub UserForm_Initialize()
TextBox1.BackColor = 15849925
TextBox1.Enabled = True
TextBox1.Height = 35
TextBox1.Left = 80
TextBox1.Locked = False
TextBox1.MaxLength = 8
TextBox1.MultiLine = True
TextBox1.PasswordChar = "*"
TextBox1.ScrollBars = fmScrollBarsBoth
TextBox1.Visible = True
TextBox1.Top = 90
TextBox1.Width = 100
TextBox1.TextAlign = fmTextAlignRight
TextBox1.SpecialEffect = fmSpecialEffectBump
End Sub
***************************************************************************************************************
                   كدا الحمد لله انتهينا من المحور الرابع وهو التعامل مه خصائص ال TextBox فى لغة البرمجه 
 
ان شاء الله المره القادمه نتكلم عن المحور الخامس والاخير وهو كيفية عمل تنسيقات للقيم المدخله بـ TextBox
 
ارجوا من الله ان اكون وفقت بالشرح واى استفسار انا تحت امر الجميع
 
                                                          تقبلوا تحياتى
تم تعديل بواسطه الصـقـر
  • Like 7
قام بنشر

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

الاخوه الكرام

اليوم بمشيئة الله سنتكلم عن المحور الخامس والاخير

كيفية عمل تنسيقات للقيم المدخله فى TextBox

 

عرفنا قبل كدا فى الشروحات السابقه ما هى اوقات تنفيذ الكود هنعمل مراجعه بسيطه  لربط شرح اليوم بالشروحات السابقه

قبل أن نتحدث عن وقت تنفيذ الكود 

لازم نعرف أولا أزاى بيكون كتابة ألاعلان عن الكود للـ  TextBox

Private Sub TextBox1_AfterUpdate()

هنا يتم كتابة الكود المراد تنفيذه

End Sub

السطر الاول هو بداية الاعلان عن الكود 

فنقوم بكتابة Private Sub ستجد لونها بالكود أزرق ( وهو بداية لاى كود خاص لأى عنصر تحكم داخل الفورم )

ثم نقوم بكتابة اسم العنصر المراد عمل الكود له وهو بمثالنا TextBox1

ثم نقوم بكتابة _  ( تكتب من خلال الضغط على Shift+زر الطرح الموجود بالاعلى بجوار زر + )

ثم نقوم بكتابة وقت تنفيذ الكود (هو هنا على سبيل المثال AfterUpdate ) 

ثم كتابة () قوسين بهذا الشكل

وبمجرد الضغط انتر ستجد الكود عمل سطر تانى فيه End sub

يوجد طريقه اخرى وهى اتبع الصوره التالية توضح لك 

قم بالضغط على اى مكان فاضى بالفورم وادخل لمحرر الاكواد الخاص بالفورم

 

large.44.png.3a6b0afc9bc28812830eea53330

هنبدأ بالامثله العمليه لان بالمثال يتضح لنا المقال

وانا راجل عملى مش بحب النظرى

1-التحكم فى تنسيق القيم المدخله فى التكست بوكس بعدد صحيح

شاهد الكود

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "0")
End Sub

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

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

شرح الكود ( السطر التانى ) شاهد الصوره

 

medium.50.png.a4e24d51aa978d03b7e4269bf6

هنا نوع التنسيق "0" تم وضعه بين علامتين تنصيص وبداخله 0 يعنى تنسيق التكست بوكس بعد الادخال يكون رقم صحيح 

فلو فرضنا حضرتك كتبت 20.60 وخرجت من التكست بوكس ستجد القيمة اصبحت 20 فقط ولا يوجد علامه عشريه

--------------------------------------------------------------------------------------------------------------------------------------------------------

2-التحكم فى تنسيق القيم المدخله فى التكست بوكس بوضع علامه عشريه

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "0.0")
End Sub

هنا نوع التنسيق "0.0" يكون رقم واحد بعد العلامه العشريه 

مثال لو حضرتك ادخلت 20 فقط ستجد التكست بوكس اصبح 20.0

ولو حضرتك دخلت 20.2 ستجد التكست بوكس اصبح 20.2 

ولو حضرتك دخلت 20.50 ستجد التكست بوكس اصبح 20.5 فقط 

يعنى سوا دخلت رقم عشري واحد او ادخلت رقمين  عشريين  او لم تدخل ارقام عشريه  ستجد النتيجة بعد رقم عشرى واحد

طيب لو احنا عايزين رقمين بعد العلامه العشريه الموضوع بسيط جدا هنخلى التنسيق كالتالى "0.00"

شاهد الكود

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "0.00")
End Sub

لاحظتم الفرق

طيب لو 3 أرقام عشريه 

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "0.000")
End Sub

------------------------------------------------------------------------------------------------------------------------------------

3-التحكم فى تنسيق القيم المدخله بوضع علامه العمله $

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "0" & "$")
End Sub

هنا تم "0" ( وهو تنسيق رقم صحيح) ثم علامه &  ( تكتب من خلال الضغط على Shift+رقم 7 فوق الحروف  )  ثم  ثم وضع علامه العمله "$" بين اقواس تنصيص

فلو حضرتك كتبت 20 ستجد $20

واحد هيقولى هو مش ممكن يكون العلامه يسار الرقم وليس يمين الرقم :rol: هقوله ممكن وليه لا هنعكس الموضوع بدل "$"&"0" هنخليها "0"&"$"

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "$" & "0")
End Sub

فلو حضرتك كتبت 20 ستجد النتيجة 20$

طيب ممكن نخلى علامه العمله وكمان وجود ارقام عشريه طبعا ممكن 

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "$" & "0.00")
End Sub

فلو حضرتك كتبت 20.1 ستجد النتيجة 20.10$

----------------------------------------------------------------------------------------------------------

4-التحكم فى تنسيق القيم المدخله بوضع نص بجوار الرقم

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "0" & "ريال")
End Sub

هنا تم كتابه النص بين علامتى تنصيص " ريال" 

فلو حضرتك كتبت 20 ستجد النتجية 20 ريال

--------------------------------------------------------------------------------------------------------------------

5-التحكم فى تنسيق القيم المدخله بوضع علامه %

 

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "%0")
End Sub

فلو حضرتك كتبت 20 ستجد النتيجة %20  ( اذا كانت لغة الكتابه بالكيبورد عربى )

أما اذا كانت لغة الكتابة انجليزى وكتبت رقم 20 ستجد النتيجة 20% 

فمن خلال لغة الكتابه بالكيبورد تقدر تتحكم فى مكان العلامه % هل تكون قبل الرقم أم بعده

واحد هيقولى هو ممكن نجعل الرقم بعلامات عشريه مع وجود علامه % هقوله ليه بس الاحراج يا عبدالتواب

شوف يا سيدى الكود التالى

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "%0.00")
End Sub

فلو حضرتك كتب 20.1 ستجد النتيجة 20.10%

----------------------------------------------------------------------------------------------------------------------------------------

6-التحكم فى القيم المدخله اذا كانت سالبه توضع بين اقواس

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "0;(0)")
End Sub

فلو حضرتك كتبت -50 ستجد النتجية (50) يعنى تحول اى رقم سالب الى بين اقواس 

طيب لو كان الرقم السالب فيه علامات عشريه

شاهد الكود ولاحظ الفرق البسيط

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "0;(0.00)")
End Sub

مثال لو حضرتك كتبت-20.1 ستجد النتيجة (20.10)

--------------------------------------------------------------------------------------------------------------------

7-التحكم فى القيم المدخله اذا كانت تاريخ

لو حضرتك عايز تكتب تاريخ وليكن 2015/8/6 وعايز بعد الادخال يظهر فقط اليوم 

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "dd")
End Sub

ستجد ان النتيجه 6

dd  تشير الى Day  يعنى اليوم

****************************************************************************

 لو انا عايز النتيجة 6 اللى هى اليوم تظهر فى التكست بوكس 2  ( TextBox2) 

Private Sub TextBox1_AfterUpdate()
TextBox2.Text = Format(TextBox1.Text, "dd")
End Sub

فلو حضرتك كتبت التاريخ 2015/8/6 فى التكست بوكس 1 ستجد التكست بوكس 2 مكتوب فيه 6

************************************************************************************************

 لو عايزين نظهر الشهر فقط

هنستبدل dd  بـ  mm وهى اختصار لكلمة (Month)

Private Sub TextBox1_AfterUpdate()
TextBox2.Text = Format(TextBox1.Text, "mm")
End Sub

ستجد النتجية ظاهره فى التكست بوكس 2 وهى 8

**************************************************************************************

 لو عايزين نظهر السنه. هنستبدل mm بـ yyyy  وهى اختصار Year

Private Sub TextBox1_AfterUpdate()
TextBox2.Text = Format(TextBox1.Text, "yyyy")
End Sub

ستجد النتيجة فى التكست بوكس 2 هى 2015

*****************************************************************************************

 لو عايزين نظهر اليوم كتابه 06-08-2015 يطلع فقط الخميس

Private Sub TextBox1_AfterUpdate()
TextBox2.Text = Format(TextBox1.Text, "dddd")
End Sub

ستجد النتيجة فى التكست بوكس 2 هى الخميس 

**********************************************************************************

 لو عايزين نظهر الشهر 06-08-2015 يظهر فقط اغسطس

Private Sub TextBox1_AfterUpdate()
TextBox2.Text = Format(TextBox1.Text, "mmmm")
End Sub

ستجد النتيجة هى اغسطس

**********************************************************************

 لو عايزين ننسق التاريخ المدخل يكون كالتالى 06/08/2015

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "dd/mm/yyyy")
End Sub

******************************************

 لو عايزين ننسق التاريخ المدخل يكون كالتالى2015/08/06

شوف الكود

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "yyyy/mm/dd")
End Sub

******************************************

 لو عايزين ننسق التاريخ المدخل يكون كالتالى06-08-2015

يعنى يكون العلامه بدل من / تكون -

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "yyyy-mm-dd")
End Sub

******************************************

 لو عايزين نجعل التاريخ كالتالى 06-08-15 ( يعنى أظهار السنه رقمين فقط

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "yy-mm-dd")
End Sub

هنا خلينا السنه بدل من yyyy  الى yy فقط

******************************************

 لو عايزين ننسق التاريخ  كدا    06 أغسطس2015

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "dd mmmm yyyy")
End Sub

******************************************

لو عايزين نخلى التاريخ يظهر كالتالى الخميس أغسطس 2015

 

Private Sub TextBox1_AfterUpdate()
TextBox1.Text = Format(TextBox1.Text, "dddd mmmm yyyy")
End Sub

******************************************

لوعايزين نظهر تاريخ اليوم بمجرد وضع مؤشر الماوس فى التكست بوكس

Private Sub TextBox1_Enter()
TextBox1.Text = Format(Now, "yyyy/mm/dd")
End Sub

هنا استخدمنا وقت التنفيذ الحدث  Enter 

******************************************

8-التحكم فى أجبار المستخدم على ادخال ارقام فقط فى التكست بوكس

Private Sub TextBox1_Change()
If Not IsNumeric(Me.TextBox1.Value) Then: MsgBox " الرجاء ادخال أرقام فقط ", vbCritical, "خطأ": Me.TextBox1.Value = "": Exit Sub
End Sub

هنا عملنا كود فى حدث التغيير للتكست بوكس بمجرد كتابة اى حرف وليس رقم ستجد التكست بوكس يرفض الادخال ويقوم بمسح المحتوى اللى تم ادخاله وكمان يظهر رساله 

استخدمنا فى الكود  IF Not IsNumeric  ثم التكست المراد ادخال ارقام فقط ووضعه بين قوسين ثم اقفال IF بـ then

******************************************

9-التحكم فى أجبار المستخدم على ادخال حروف فقط فى التكست بوكس

نفس الكود السابق ولكن بدون Not

Private Sub TextBox1_Change()
If IsNumeric(Me.TextBox1.Value) Then: MsgBox " الرجاء ادخال حروف فقط ", vbCritical, "خطأ": Me.TextBox1.Value = "": Exit Sub
End Sub

******************************************

                                       ****************************************************************************

********************************************************

**************************************

الى هنا بحمد الله انتهيت من شرح الخمس محاور المتعلقه بالتكست بوكس

والى لقاء اخر من حلقات علمنى كيف اصطاد وسيكون بأذن الله الكمبوبوكس

 

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

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

الاخوه الكرام

اليوم بمشيئة الله سنتكلم عن شروحات الكمبوبوكس ( ComboBox)

 

كما قلنا من قبل ان ComboBox هو عباره عن وعاء يتم تعبئته ببيانات محدده لتظهر للمستخدم ليختار منها اثناء العمل على الفورم

أن شاء الله هيتم تناول الموضوع على خمس مراحل

1- كيفية انشاء ComboBox على الفورم  اثناء عملية التصميم

2- التعرف على خصائص ComboBox  من شاشة الخصائص اثناء عملية التصميم

3-وقت تنفيذ الكود الخاص بالـ ComboBox 

4-التعامل مع الـ ComboBox  فى لغة البرمجه 

5-معرفة مهارات تعبئة وتغذية ComboBox  باكثر من طريقه التقليديه والاحترافيه منها 

6-كيفية اجبار المستخدم على الاختيار من الـ  ComboBox 

نبدأ بسم الله

أولا :- كيفية انشاء ComboBox على الفورم  اثناء عملية التصميم

لأضافه كمبوبوكس جديد على الفورم يوجد طريقتين

الطريقه الاولى

large.60.png.47e8c47472257ff539250645653

الطريقه الثانية

large.61.png.d9e1dd30dd3984af9a260cc9521

هذه الطريقه يتم من خلالها نسخ اى عنصر او اكثر من العناصر على الفورم ولصقها لعمل عناصر جديده وسوف يكون لها نفس

الخصائص للعناصر الذى تم اخذ النسخ منها وفيما يعد يمكنك تغيير الخصائص للعناصر الجديد كما يحلو لك

********************************************************************************************

ثانيا:- التعرف على خصائص  ComboBox من شاشة الخصائص اثناء عملية التصميم

فى الصورة قبل السابقه على اليسار يوجد خصائص الكمبوبوكس محاطه بمستطيل احمر  وهذه صوره مكبره لخصائص الكمبوبوكس

large.62.png.32ea21f12e59e8b51de18d443ca

هنمسك اهم الخصائص والاكثر شيوعا فى الاستخدام ونبدا نشرح بالتفصيل

1- الخاصيه (Name) :-

Name  هو اسم الـ  ComboBox المستخدم فى الاكواد 

وعند انشاء اى ComboBox يقوم الفيجوال بيسك بأعطاء اسم افتراضى  له ComboBoxواذا قمنا بعمل ComboBox  ثانى فأن الفيجوال بيسك يعطى له اسم افتراضى ComboBox

وانا افضل عدم تغيير اسماء ComboBox الافتراضيه التى عرفها الفيجوال بيسك 

فعندما نريد كتابه كود خاص بالعنصر ComboBox فى حدث Change على سبيل المثال 

يكون بداية الكود كالتالى

Private Sub ComboBox1_Change()

فأذا قمنا بتغيير اسم ComboBox  كما عرفه الفيجوال بيسك الى اسم اخر من خاصيه Name  وليكن مثلا غيرناه الى (Customers )

فهنا عند كتابة كود فى حدث Change يكون كالتالى

Private Sub Customers_Change()

ففى حال تغيير الاسم وعدم التزامك بالاسم داخل محرر الاكواد وكتابة كود يحدث Error

------------------------------------------------------------------------------------------------------------------------------------------------

2- الخاصيه ( Back Color):-

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

large.63.png.fe11d1641234c93807646eac63c

 3- الخاصيه ( Back Style):-

هذه الخاصيه تحمل خيارين هما

Fm Back Style TransParent -  0 ( عند الاختيار سيتوقف عمل الخاصيه Back Color  حتى ولو كان تم اختيار لون بها وليكن خلفية سماوية كما هو بالمثال السابق سيظهر الـ ComboBox  بخلفية ساده )

Fm Back Style Opague  -  1 ( عند الاختيار سيتم عمل الخاصيه Back Color  وهيكون الـ ComboBox بخلفية حسب الاختيارك من Back Color    )

لذالك هذه الخاصيه مرتبطه بالخاصيه Back Color

**********************************************************************************************************************

4- الخاصيه ( Border Color):-

هذه الخاصيه تتيح للمستخدم تغيير لون حدود اللـ ComboBox   على اليسار يوجد سهم اضغط عليه ستظهر لك قائمة يمكنك من خلالها اختيار اللون المناسب كما يحلو لك 

5- الخاصيه ( Border Style):-

هذه الخاصيه تحمل خيارين هما

Fm BorderStyle none -  0 ( عند الاختيار سيتوقف عمل الخاصيه Border Color  حتى ولو كان تم اختيار لون بها وليكن لون حد أحمر سيظهر الـ ComboBox بلون حد ساده )

Fm BorderStyle Single -  1 ( عند الاختيار سيتم عمل الخاصيه Border Color  وهيكون حدود الـ ComboBox بخلفية حسب الاختيارك من Border Color)

لذالك هذه الخاصيه مرتبطه بالخاصيه  Border Color  

مثال لو اختارنا لون خلفيه للـ ComboBox  لون سماوى ولون حدود احمر

شاهد الصورة ولاحظ ان الخاصيه Back Color اختيارها 1 وايضا الخاصيه Border Color اختيارها 1 شاهد الصوره التالية

ولكن لو كان الخاصيه Back Color اختيارها 0 وايضا الخاصيه Border Color اختيارها 0 سوف يكون لون الخلفية ساده والحدود بدون لون

 

large.64.png.d3fde45b1eba28b68685f5e9c05

****************************************************************************************************************

6- الخاصيه ( Bound Column):-

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

سنرى لاحقا مثال عملى

*************************************************************************************************

7- الخاصيه (   Column Count):-

هذه الخاصيه تتيح للمستخدم تحديد كم عدد الاعمده التى ستظهر فى اللـ ComboBox  

بمعنى ادق يمكن عرض اكثر من عمود فى الكمبوبوكس  

سنرى لاحقا مثال عملى

*************************************************************************************************

8- الخاصيه ( Row Source ):-

هذه الخاصيه هى اولى الطرق التقليدية لتعبئة الكمبوبوكس بالبيانات 

مثال عام على الخاصيه ( Bound Column) و الخاصيه (   Column Count) و الخاصيه ( Row Source ) 

لدينا شيت به بيانات افتراضيه كما هو ظاهر بالصوره التالية

large.65.png.7a0f14d19e22bf5d6a62d200659

وعندى فورم بصممه شاهد الصورة

large.66.png.a0b55514e619d5b7997c0a65510

أنا دلوقتى عايز اظهر اسماء العملاء من الخلية A2 : A5 فى الكمبوبوكس اللى فى الفورم  

من شاشة الخصائص اروح للخاصيه    Row Source  واكتب المدى A2:A5

شاهد الصورة

large.67.png.d6fcc2332b6b7bbb7b8d75b3889

شاهد النتيجة عن تشغيل الفورم 

large.68.png.449ac7f1a12dd2a9dd3dd58b003

 

طيب لو عايزين نظهر عدد 2 عمود بمعنى اظعر عمود اسماء العملاء وايضا عمود كود العميل

اذن لازم اغير المدى فى الخاصيه  Row Source  واكتب المدى A2:B5

وايضا لازم احدد عدد الاعمده فى الكمبوبوكس يكون 2 من الخاصيه Column Count

شاهد الصورة

large.69.png.33e64891e3a5aa7cdab2aad22b8

ستجد النتيجة عند تشغيل الفورم

large.70.png.c43bc329c3036e2be8749bdb680

طبعا عند الاختيار من الكمبوبوكس سيظهر اسم العميل (اللى هى تعتبر العمود رقم واحد فى الكمبوبوكس ) فى الكمبوبوكس وتختفى قائمة العملاء

فلو انا عايز عند الاختيار ايضا يظهر كود العميل فى التكست بوكس رقم 1 ( اللى هو باللون الاصفر فوق) 

اذن لازم نروح للخاصيه Bound Column واكتب 2 ( أى العمود رقم 2 هو القيمة التى ستظهر فى التكست بوكس رقم 1 )

شاهد الصورة

large.71.png.39eac7d224752253722bc70b370

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

Private Sub ComboBox1_Change()
TextBox1.Value = ComboBox1.Value
End Sub

هذا الكود كتبنا فيه ان التكست بوكس 1 يساوى الكمبوبوكس ( واحد هيقولى مش الكمبوبوكس فى عمودين اذن التكست بوكس هيكون اى عمود عند الاختيار هقوله ان الخاصيه Bound Column كتبنا فيها العمود رقم  2 اذن القيمة التى ستظهر فى التكست بوكس 1 هى العمود 2 )

وبكدا عند التشغيل الفورم والاختيار من الكمبوبوكس سيظهر قيمة العمود رقم 1 وهو اسم العميل فى الكمبوبوكس 

وسيظهر قيمة العمود رقم 2 وهو كود العميل فى التكست بوكس 1 ( بناء على تحديد الخاصيه Bound Column كتبنا فيها العمود رقم  2 وايضا الكود بحدث تغيير الكمبوبوكس )

وعند تشغيل الفورم واختيار من الكمبوبوكس شاهد النتيجة

large.72.png.6fe650b1e8ed2f823fec1bd2e4d

كدا اخدنا مثال عملى على الثلاث خصائص وهما

 الخاصيه ( Bound Column) و الخاصيه (   Column Count) و الخاصيه ( Row Source ) 

 

**************************************************************************************************************************

9- الخاصيه ( Column Heads ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى ظهور رؤوس للاعمده او عدم ظهورها

وهى تحمل خيارين أما True أو False

عندد اختيار False وهو الاختيار الافتراضى بالفيجوال لا يظهر رؤوس للاعمده بـ ComboBox1   على الفورم عند فتحه  

شاهد الصوره

large.73.png.794285b1332d7c944d9d0f2efc9

 

عندد اختيار True يظهر رؤوس للاعمده بـ ComboBox1   على الفورم عند فتحه  

شاهد الصوره

large.74.png.69bb7ea3a1903317341bd98469f

كما هو مبين بالصورة ان رؤوس الاعمده هى الخلية A1 والخلية B1 وذالك لان المدى للكمبوبوكس هو من A2:B5 فالفيجوال بيسك يقوم بشكل تلقائى بقراءة اول خلية تسبق المدى 

***********************************************************************************

10- الخاصيه ( Column Widths ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى عرض الاعمده التى ستظهر فى الكمبوبوكس

فى سبيل المثال 

عرض العمود رقم 1 هو 200 وعرض العمود رقم 2 هو 100

اذن لازم تتكتب كالتالى 200Pt;100Pt ( بينهم فاصله ; تكتب من خلال جعل لغة الكيبورد انجلش ثم اضغط على حرف ك بالعربى)

شاهد الصوره

large.75.png.fece70c161c93629c9da0bfdc74

 

واحد شاطر هيقولى هو لازم علشان اظهر العمود الثانى اتحرك بالاسكرول بار هقوله لا

يوجد طريقه حلوة وهى الخاصيه ( List Width )  هنشرحها ونعرف ازاى نخليها تحل لنا المشكله وتظهر الاعمده بدون الاسكرول بار

11- الخاصيه ( List Width ):-

عرض List  الافتراضى هو عرض الكمبوبوكس مجموع عرض الاعمده 

 كتبنا فى المثال السابق فى الخاصيه Column Widths  ان عرض الاعمده هو  200Pt;100Pt

اذن لابد من جعل عرض List مجموع عرض الاعمده  200Pt;100Pt  يعنى هيساوى 300Pt وبكدا مش هيكون فى اسكرول بار والاعمده كلها ظاهر عند تشغيل الفورم

شاهد الصوره

large.76.png.1278f67ad43f750751315f8d925

**************************************************************************************************************

12- الخاصيه ( DropButtonStyle ):-

هذه الخاصيه تتيح للمستخدم التحكم فى شكل الكمبوبوكس

شاهد الصوره

large.77.png.5da5f100a4bb231a450e5404e52

اختر أى من الاشكال فى الصورة التى تناسب ذوقك 

**********************************************************************************

13- الخاصيه ( Enabled ):-

هذه الخاصيه تحمل خيارين true و False 

عند اختيار true سوف يكون بأمكان المستخدم الاختيارمن محتوى ComboBox وهو الاختيار الافتراضى بالفيجوال     

وعند اختيار False  لا يكون بأمكان المستخدم الاختيارمن محتوى ComboBox     ويكون الشكل باهت 

**********************************************************************************************

14- الخاصيه ( Locked ):-

هذه الخاصيه تحمل خيارين true و False 

عند اختيار False  سوف يكون بأمكان المستخدم الاختيارمن محتوى ComboBox  وهو الاختيار الافتراضى بالفيجوال

وعند اختيار True  لا يكون بأمكان المستخدم الاختيارمن محتوى ComboBox  يعنى هيكون فى حمايه على  ComboBox

وهذه الخاصيه تشبه تماما الخاصيه Enabled الفرق الوحيد بينهم هو فى شكل التنسيق للكمبوبوكس

**********************************************************************

15- الخاصيه ( Font ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى نوع وسماكة وحجم الخط للنص داخل الـ  ComboBox     

الافتراضى فى الفيجوال بيسك نوع الخط هو Tahoma ) والسماكه هى (Regular) وحجم الخط هو ( 8)

**********************************************************************************************************

16- الخاصيه (  Font Color ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى اختيار لون الخط للنص داخل الـ ComboBox

*********************************************************************************************

17- الخاصيه (  Height ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى ارتفاع الـ ComboBox    

فيمكنك أما من خلال التصميم السحب بالماوس للاسفل لتحديد الارتفاع للـ ComboBox   أو كتابة رقم للارتفاع فى الخاصيه Height

*********************************************************************************************

18- الخاصيه (  Left ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى بعد الـ  ComboBox  عن الضلع الايسر للفورم

****************************************************************************

19- الخاصيه (  Top ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى بعد الـ  ComboBox  عن الضلع الاعلى للفورم

مثال لو وضعنا قيمة Left 78 *** وقيمة Top 138 ستجد الصوره التالية

large.78.png.0ca6cb5514f507571b89150f9bd

***********************************************************************************************************************

20- الخاصيه (  List Row ):-

هذه الخاصيه من الخصائص المهمه لانها تتيح للمستخدم التحكم فى عدد الصفوف التى يتم عرضها عند فتح الـ  ComboBox  

شاهد الصوره

large.79.png.2b6252ecf8ab2e593eee9efa952

 

لو عايزين اظهار عدد 3 صفوف فقط شاهد الصوره التالية

large.80.png.3a836daf86b363209e78062e2ad

 

************************************************************************************************************

20- الخاصيه (  List Style ):-

شاهد الصوره تتضح لك اهميه الاداه فمن خلالها يمكن التحكم فى طريقه عرض البيانات عن فتح الكمبوبوكس

large.81.png.27fb43147a72822c043e76eb178

****************************************************************************************************************

21- الخاصيه (  Width ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى عرض الـ ComboBox    

فيمكنك أما من خلال التصميم السحب بالماوس للاسفل لتحديد العرض للـ ComboBox   أو كتابة رقم للعرض فى الخاصيه Width

****************************************************************************************************************

22- الخاصيه (  Visible ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى ظهور او عدم ظهور ComboBox   عند عرض الفورم 

وعند الضغط على السهم المجاور لها ستجد لها خيارين True  و  False

عندد اختيار True سوف يظهر الـ ComboBox  على الفورم عند فتحه ( وهذا هو الخيار الافتراضى من الفيجوال بيسك )

وعند اختيار False ٍسوف يختفى الـ ComboBox  على الفورم عند فتحه يعنى هيكون غير ظاهر ومخفى لا يراه المستخدم

****************************************************************************************************************

 

 

 

 

تم تعديل بواسطه الصـقـر
  • Like 9
قام بنشر (معدل)

23- الخاصيه (  ShowDrop Button When ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى ظهور او عدم ظهورعلامة الـ  ComboBox   عند عرض الفورم شاهد الصورة توضح لك الامر

large.83.png.2d43d1570acc9e9b1c0483f31b0

 

*************************************************************************************************************

24- الخاصيه (  Style ):-

وهى بنظرى من اهم الخصائص للكمبوبوكس

زى ما احنا عارفين لفتح القائمة الخاصه بالكمبوبوكس للاختيار منها لابد من الضغط على السهم لتفتح القائمه ولكن هذه الخاصيه تتيح للمستخدم التحكم فى وقت فتح القائمة الخاصه بالكمبوبوكس فلها خيارين

الخيار الاول Fm StyleDropDown Combo - 0 :- هو الافتراضى لابد من الضغظ على السهم لفتح القائمة كما تتيح للمستخدم كتابة اى شئ بالكمبوبوكس غير موجود بالقائمه بمعنى لا تلزم المستخدم من الخيار من القائمة 

والخيار الثانى  Fm StyleDropDown List - 2 : -هو فتح القائمة من خلال الضغط على السهم او بمجرد وقوف مؤشر الماوس على الكمبوبوكس   وكمان ميزة ثالته وهى مهمه جدا هو انه لا يمكن للمستخدم كتابة اى شئ فى الكمبوبوكس يعنى كانك عامل خاصيه حمايه للكمبوبوكس ولا سبيل امام المستخدم الا من الاختيار من القائمه

*******************************************************************************

25-الخاصيه (Text Align) :-

وهذه الخاصيه تتيح للمستخدم التحكم فى اتجاه النص ( المحازاه للنص )داخل الـكمبوبوكس   
هل يكون يميناً أو يساراً أو وسط الـكمبوبوكس
لو ذهبت للخصائص وعند الخاصيه Text Align ستجد سهم اضغط عليه ستجد 3 خيارات امامك وهى
 fm Text Align Left  -1      عند الاختيار ستجد ان اتجاه النص داخل    ComboBox     يبداء من اليسار
 fm Text Align Center  -2    عند الاختيار ستجد ان اتجاه النص داخل  ComboBox    فى المنتصف
 fm Text Align Right  -3        عند الاختيار ستجد ان اتجاه النص داخل ComboBox     يبداء من اليمين
********************************************************************************************

26-الخاصيه (Tab index )

وهذه الخاصيه تتيح للمستخدم ترتيب التنقل بين الازرار على الفورم بعد الخروج منها من خلال الزر انتر  ويمكن تعطيل هذه الخاصيه من خلال استخدام الخاصيه Tab stop = True

هحاول اشرحها بشكل مبسط

بفرض عندك فورم أنشئت  فيه 3 عناصر ( Combobox1 Textbox2 - Textbox1 )على نفس الترتيب

فأن الفيجوال بيسك بشكل افتراضى يقوم بترتيب التنقل بينهم حسب ترتيب أنشائهم 

فعند تشغيل الفورم وانت واقف فى Textbox1 وضغط انتر سينتقل مؤشر الماوس الى Textbox2 ثم ضغط انتر سينتقل مؤشر الماوس الى Combobox1 

فلو نا عايز وانا واقف فى Textbox1 واضغط انتر ينتقل الى Combobox1 وليس Textbox2

هنا تاتى اهميه الخاصيه Tab index اذهب لشاشة تصميم الفورم فى الفيجوال وحدد Textbox2  وفى الخاصيه Tab index اكتب رقم 4 ثم حدد Combobox1 ومن الخاصيه Tab index له اكتب رقم 2

ثم ارجع وحدد Textbox2 وفى الخاصيه Tab index اكتب رقم 3 بدلا من 4 

وبكدا عند تشغيل الفورم والوقوف فى Textbox1 والضغط انتر سينتقل مؤشر الماوس الى Combobox1

وليس Textbox2 

ارجوا ان تكون وضحت الفكره :wink2::wink2::wink2:

 

27-الخاصيه (Tab Stop )

وهذه الخاصيه تحمل خيارين  True  و  False 

عندد اختيار True يتم تعطيل خاصيه Tab index

وعند اختيار False ٍسوف تفعل خاصيه Tab index للتنقل بين الازرار حسب الترتيب الذى ترغب فيه

********************************************************************************************

28- الخاصيه ( ٍِSpecial Effect )

هذه الخاصيه من الخصائص الهامه للـ Combobox  وهى تعطى اشكال مبهره ومميزه للـ Combobox  ولها خمس اشكال اختر منها ما يناسب ذوقك 

شاهد الصوره التاليه

large.84.png.c9f1d48ad9c93952162e46df87e

**************************************************************************

تم تعديل بواسطه الصـقـر
  • Like 7
قام بنشر (معدل)

ثالثا :- وقت تنفيذ الكود الخاص بــ ComboBox

 

دلوقتى هنتكلم عن أهم طرق وقت تنفيذ الكود واكثرها شيوعا فى الاستخدام 

1- Afterupdate :- هنا يتم تنفيذ الكود بمجرد الانتهاء من الادخال فى ComboBox والانتقال الى اى عنصر اخر ( وهو يشبه كثير طريقة Exit)

2-EXit :- هنا يتم تنفيذ الكود بمجرد الخروج من ComboBox والانتقال الى اى عنصر اخر ( يشبه كثير طريقه  Afterupdate )

3-Change :- هنا يتم تنفيذ الكود عند حدوث اى تغيير فى ComboBox

4-DblClick :-  هنا يتم تنفيذ الكود عند الضغط دبل كليك بالماوس داخل ComboBox

5-Enter :- هنا يتم تنفيذ الكود بمجرد وضع مؤشر الماوس داخل صندوق ComboBox

 

دلوقتى هنعرف ازاى بيكون كتابه الاعلان على الاكواد الخاصه بالـ ComboBox ( وهى نفس الطريقه لكل عناصر التحكم فى الفورم )

مثال على حدث Afterupdate

Private Sub ComboBox1_AfterUpdate()
'هنا بيتم كتابه الكود المراد تنفيذه
End Sub

السطر الاول هو بداية الاعلان عن الكود 

فنقوم بكتابة Private Sub ستجد لونها بالكود أزرق ( وهو بداية لاى كود خاص لأى عنصر تحكم داخل الفورم )

ثم نقوم بكتابة اسم العنصر المراد عمل الكود له وهو بمثالنا ComboBox 

ثم نقوم بكتابة _  ( تكتب من خلال الضغط على Shift+زر الطرح الموجود بالاعلى بجوار زر + )

ثم نقوم بكتابة وقت تنفيذ الكود (اللى هو موضوعنا اليوم) 

ثم كتابة () قوسين بهذا الشكل

وبمجرد الضغط انتر ستجد الكود عمل سطر تانى فيه End sub

يوجد طريقه اخرى وهى اتبع الصوره التالية توضح لك 

قم بالضغط على اى مكان فاضى بالفورم وادخل لمحرر الاكواد الخاص بالفورم

large.90.png.4a46de55be5f223c8213a71dcaf

 

تم تعديل بواسطه الصـقـر
  • Like 5
قام بنشر

رابعاً:- التعامل مع خصائص الـ ComboBox فى لغة البرمجه 

فى الدرس قبل السابق عرفنا ازاى نتحكم فى خصائص  ComboBox من شاشة الخصائص اثناء عملية التصميم

فماذا لو حبينا نتحكم فى خصائص ComboBox  ولكن من خلال الاكواد وليس من شاشة الخصائص فى مرحله التصميم

هنبدأ على طول بمثال عملى ونشرح عليه

اضغط دبل كليك على اى مكان فاضى فى الفورم وهندخل محرر اكواد الفورم ونعمل كود فى حدث فتح الفورم اتبع الصوره

large.46.png.84320c014c96587ad97881b821a

هتلاقى الصوره دى 

large.26.png.2f4cb207b8bc8562bf7ce9507a9

فى المكان المظلل باللون الاحمر هنا موضوع كتابه الاكواد

ولكتابة اى كود خاص بأى عنصر تحكم فى الفورم يكون على الشكل التالى

large.101.png.07d86d28549dc23521e7b81268

 الخاصيه ( Back Color):-

زى ما قلنا قبل كدا ان هذه الخاصيه تتيح للمستخدم تغيير لون خلفية للـ ComboBox   

عايزين نكتب فى المربع الاحمر كود يجعل لون خلفية الكمبوبوكس (سماوى ) عند فتح الفورم 

large.102.png.bbb1b6c4db9a57675babcaada3

 

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

 

ناخد مثال اخر عن الخاصيه ( Back Style):-

large.103.png.6180aef494b4944686e3935965

ناخد مثال اخر عن الخاصيه ( Row Source ):-

ComboBox1.RowSource = "A1: b5"

سطر الكود زى ما هو ظاهر تم كتابة اسم العنصر ثم .  ثم اسم الخاصيه ثم = ثم المدى المراد اظهاره فى الكمبوبوكس

( المدى تم كتابته بين اقواس تنصيص " المدى "  وهذه الاقواس كما قلنا انها تكتب من خلال الضغط على شيفت + حرف ط بالعربى )

 

ناخد مثال اخر عن الخاصيه ( Column Heads ):-

ComboBox1.ColumnHeads = True

سطر الكود زى ما هو ظاهر تم كتابة اسم العنصر ثم .  ثم اسم الخاصيه ثم = ثم نوع الخاصيه اما True  أو  false 

 

وكذالك لباقى الخصائص الخاصه باى عنصر تحكم على الفورم 

هذا هو الكود بشكله النهائى على الاربع خصائص السابقه

Private Sub UserForm_Initialize()
ComboBox1.BackColor = 15849925
ComboBox1.BackStyle = fmBackStyleOpaque
ComboBox1.RowSource = "A1: b5"
ComboBox1.ColumnHeads = True
End Sub

هل يمكن ايضا كتابة الكود بشكل ابسط نعم يوجد طريقه اخرى

من خلال استخدام With وطبعا لازم نقفل With بـ End with

ويكون بداية سطر الكود هو . ثم اسم الخاصيه ثم = ثم نوع أو قيمة النتيجة

شاهد الكود كالتالى

Private Sub UserForm_Initialize()
With ComboBox1
.BackColor = 15849925
.BackStyle = fmBackStyleOpaque
.RowSource = "A1: b5"
.ColumnHeads = True
End With
End Sub

أنا عايزك تجرب باقى الخصائص بنفسك ولو صدفك اى مشكله لا تتردد انك تراسلنى

تابعونا

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

خامسا :- مهارات تعبئه وتغذية الكمبوبوكس بالبيانات بأكثر من طريقه تقليديه واحترافيه

الطريقه الاولى :- الخاصيه ( Row Source )

 اتكلمنا عليها قبل كدا ولكن هنذكركم بيها مره تانيه لانها ضمن سياق الموضوع

لدينا شيت به بيانات افتراضيه كما هو ظاهر بالصوره التالية

large.65.png.7a0f14d19e22bf5d6a62d200659

وعندى فورم بصممه شاهد الصورة

large.66.png.a0b55514e619d5b7997c0a65510

أنا دلوقتى عايز اظهر اسماء العملاء من الخلية A2 : A5 فى الكمبوبوكس اللى فى الفورم  

من شاشة الخصائص اروح للخاصيه    Row Source  واكتب المدى A2:A5

شاهد الصورة

large.67.png.d6fcc2332b6b7bbb7b8d75b3889

شاهد النتيجة عن تشغيل الفورم 

large.68.png.449ac7f1a12dd2a9dd3dd58b003

طيب لو عايزين نظهر عدد 2 عمود بمعنى اظعر عمود اسماء العملاء وايضا عمود كود العميل

اذن لازم اغير المدى فى الخاصيه  Row Source  واكتب المدى A2:B5

وايضا لازم احدد عدد الاعمده فى الكمبوبوكس يكون 2 من الخاصيه Column Count

شاهد الصورة

large.69.png.33e64891e3a5aa7cdab2aad22b8

ستجد النتيجة عند تشغيل الفورم

large.70.png.c43bc329c3036e2be8749bdb680

 

ولكن هنا فى مشكله وهى ان الفورم القائمه بتاعته هتكون على حسب الشيت النشط اسم الشيت

بمعنى لو انتى فى الشيت رقم 1 هيظهر النطاق اللى بالشيت من A2:B5  شاهد الصوره 

large.121.png.8fdcd5d0ed4f4c6d9e28948c9e

 

ولو انت فى الشيت رقم 2 هيظهر النطاق اللى بالشيت من A2:B5  شاهد الصوره

large.123.png.5bec1d5d63a156d6f82b2936cc

وهذه مشكله فلو انت عايز وين ما تكون واقف فى اى شيت ويفتح الفورم يظهر فقط النطاق اللى بالشيت رقم 1 المدى من A2:B5  فى هذه الحاله لازم احدد فى خاصيه Row Sourceاسم الشيت شاهد الصوره

large.124.png.0de03e36a844dcc27f69fc1e36

أو من خلال الاكواد فى البرمجه كالتالى 

ComboBox1.RowSource = "sheet1!a2:b5"

زى ما احنا شايفين سطر الكود تم وضعه بين علامتى تنصيص " "

 " المدى ! اسم الشيت "

وبكدا لو انت فى اى شيت نشط والفورم اشتغل فيه هيعرض فقط النطاق اللى بالشيت رقم 1 المدى من A2:B5

تم تعديل بواسطه الصـقر
  • Like 4
قام بنشر

الطريقه الثانيه :- استخدام النطاقات المعرفه

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

large.106.png.3dd8a8de407432222276a42fc6

 

large.107.png.eab79ecb22fa3d1c304e5c14a4

ازاى بقى نستخدم هذه الاسم فى تعبئة الكمبوبوكس 

يوجد طريقتين 

1- من شاشة الخصائص اثناء التصميم  

شاهد الصوره

large.108.png.54967f51902a8fa20e147637af

2- من خلال كتابة الاكواد فى البرمجه

مثلا فى حدث فتح الفورم 

Private Sub UserForm_Initialize()

ComboBox1.RowSource = "اوفيسنا"

End Sub

كما تشاهدون اننا كتبنا اوفيسنا اللى هو اسم النطاق ولكن بين علامتى تنصيص " اوفيسنا "

يالا يا شباب جربوا الدرس وابعتو الاجابه على موضوع الردود " اتمنى لكم التوفيق "

**********************************************************************************************************

والى لقاء اخر مع الطريقه الثالثه انتظرونا يوجد مفاجأت

 

 

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

الطريقه الثالثه :- استخدام النطاقات المعرفه بدالة Offset فى عمل نطاق ديناميكى متغير

اليكم الرابط التالى للقدير واستاذى الفاضل / محمد نصرى يشرح فيه الداله offset بطريقه رائعه 

http://www.officena.net/ib/topic/56588-سلسلة-تعلم-اكسل-معي-بالصوت-والصورة/?do=findComment&comment=358921 

تحديدا الفيديو الثانى هو اللى مرتبط بموضوعنا

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

وهذا شرحى المتواضع عن الداله offset

الداله Offset هى من اهم الدوال فى الاكسيل انا شخصيا لما بتعامل معها بحس انى مهندس مساحه 

دلوقتى هنعرف ما هى داله offset وازاى نستفيد بيها فى عمل نطاق ديناميكى معرف يتم استخدامه فى تعبئة الكمبوبوكس بالبيانات

هقولك ما هى الداله offset بلغة المصطبه واحنا قاعدين كدا نشرب كوباية شاى فى الخمسينه :biggrin:

large.130.png.b97698b60c57e76a2a33b318aa

ازاى بقى نطبق الكلام ده فى الاكسيل

شوف الصوره دى الاول وبعدين نكمل

large.131.png.0ba9972e8e3691946ddfee25e5

زى ما شايفين بالصوره وقفت بالخلية G8 وعملت الداله offset 

فهى مكونه من خمس اقسام 

1- reference : - وهو مرجع العمل يعنى تحديد مركز انطلاق العمل  وهو كما بالصوره A2 لانها اول خلية بالجدول المظلل باللون الاخضر فأنا حدد A2 لتكون مركز انطلاق العمل

2- rows : - وهى تعنى الصفوف ومن خلالها يتم تحديد صف بداية العمل يعنى اتحرك كم صف من نقطة المركز اللى هى A2  ( هنا بالمعادله كتبت 0 يعنى لا تتحرك اى صف من الخلية A2 

3- Cols: - وهى اختصار كلمة Colmuns تعنى العمود ومن خلالها يتم تحديد عمود بدابة العمل يعنى اتحرك كم عمود من نقطة المركز اللى هى A2  ( هنا بالمعادله كتبت 0 يعنى لا تتحرك اى عمود من الخلية A2 )

2 و 3 يتم من خلالهم تحديد نقطة بداية العمل

4- height: - وهى تعنى ارتفاع ومن خلالها يتم تحديد كم صف نريده للاستخدام ( هنا بالمعادله كتبت 6 يعنى اجلب لى 6 صفوف بدأ من الخلية A2 )

5- width: - وهى تعنى عرض ومن خلالها يتم تحديد كم عمود نريده للاستخدام (  هنا بالمعادله كتبت 1يعنى اجلب لى عمود واحد بدأ من الخلية A2 )

4 و 5 يتم من خلالهم تحديد كم صف وكم عمود نريده للاستخدام

الكلام ده هيتضح لك اكتر لانه اذا عرف السبب بطل العجب

انسخ المعادله اللى كتبناه بالخلية G8 واتبع التعليمات اللى بالصوره

large.132.png.3d951e49a90d358d6fddec2844

 

وبكدا عرفنا نطاق شوف الخطوه اللى بعد كدا شاهد الصوره

large.133.png.8b8144150c907dbb9e2308d119

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

large.134.png.b6473f3a94e68c540ccdc394eb

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

يعنى دلوقتى لو حبينا نضيف اسم جديد فى الخلية A8  مش هيظهر فى الكمبوبوكس وانت قلتلى انه نطاق ديناميكى يكبر ويصغر حسب الادخالات فى العمود A

هقوله برافو عليك انك صاحى معايا تعالى بقى اقولك ايه الفرق بينها وبين الطريقه التانية هو انى بدل ما انا محدد عدد 6 صفوف فى المعادله offset 

هستعين بداله Count A وهى تعمل على عد الخلايا اللى بها كتابه فى نطاق معين

=COUNTA(A2:A10000)

لو عملنا المعادله دى فى اى خليه هيقوم بعد الخلايا اللى بها بيانات فى النطاق من A2 الى الخلية A10000 مثلا طبعا النتيجة طبقا للصوره السابقه هتكون 6 ولكن لو قمت باضافه اسم جديد هتكون النتيجة 7 أذن اروح للداله Offset  واتحكم فى عدد الصفوف من خلال Count A هتكون المعادله كدا

=OFFSET($A$2;0;0;COUNTA($A$2:$A$10000);1)

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

هننسخ المعادله دى ونروح نعدل النطاق اللى عرفناه قبل كدا

 

large.136.png.99453a54ac48d78cf4a4d0fab8

 

 

large.137.png.5a5fb25d8b8e44ee75e3e48a01

وبكدا ضيف اى اسماء عملاء جديده او احذف اى اسماء موجوده وشاهد الكمبوبوكس سوف يتم عرض الاسماء الموجوده فقط دون زياده او نقصان شاهد الصوره

large.138.png.a66282dc5723365ce36f16ff0a

واحد هيقولى انت كدا علمتنى ازاى اتحكم فى عدد الصفوف لتكون تلقائيه حسب عددها بالشيت 

طيب ازاى اتحكم فى عدد الاعمده انا شايف الكمبوبوكس بيظهر عمود 1 انا عايزه يظهر عمودين ازاى التحكم فى المعادله

دى المعادله اللى موجوده دلوقتى

=OFFSET($A$2;0;0;COUNTA($A$2:$A$10000);1)

وعلشان تتحكم فى عدد الاعمده غيرها الى 

=OFFSET($A$2;0;0;COUNTA($A$2:$A$10000);2)

اللى مركز معايا هيلاحظ الفرق بين المعادلتين فى اخر جزء من المعادله وهو عدد الاعمده غيرت بدل من عرض عمود 1 الى عمودين 2

طبعا علشان تغيرها لازم تروح الى قائمة Name Manager  وتعمل تحرير للنطاق وتغير المعادله بدل من عمود واحد الى عمودين

وطالما عايز تعرض عمودين متنساش زى ما قلنا قبل كدا تكتب 2 فى الخاصيه Column Count

شاهد الصوره عند تغيير المعادله

large.139.png.7a51bdffa937ed3d1ad2add035

علشان تثبت المعلومه فى راسك لازم تجرب الكلام ده عملى بنفسك

اتمنى يارب اكون وفقت بالشرح واتمنى لكم التوفيق

والى لقاء اخر فى طريقه جديده من طرق تعبئة الكمبوبوكس بالبيانات

 

 

تم تعديل بواسطه الصـقر
  • Like 6
قام بنشر (معدل)

الطريقه الرابعه :- استخدام لغة البرمجه

هى بنظرى من اهم الطرق واسهلها وهى تكون من خلال البرمجه فقط ولا يمكن تنفيذها من شاشة الخصائص فى مرحله التصميم

شاهد الصوره التالية هتعرف ما هى الطريقه

large.140.png.b5f46799325ccf8fc938afa302

الكود هو بشكل مكبر عباره عن سطر واحد فقط

ComboBox1.RowSource = "sheet1!a2:b" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row

تعالو نفصص كل كلمة فى هذا السطر ونعرف ازاى نكتبه

comboBox     هو اسم الكمبوبوكس المراد تعبئته بالبيانات

.                      تكتب من خلال جعل الكيبورد انجلش ثم نضغط على حرف ز بالعربى

RowSource   هى الخاصيه المسئوله عن تعبئة الكمبوبوكس بالبيانات 

=                     نكتب علامه =

"                     نفتح قوس تنصيص " ويكتب من خلال شفت+حرف ط بالعربى

Sheet1!a2     وهى اول خلية بالجدول المراد عرض بياناته فى الكمبوبوكس (ونلاحظ اننا كتبنا اسم الشيت متبوع بعلامة تعجب ! ثم اسم الخلية)

:                     تعنى الى

b                   اسم اخر عمود بالجدول

"                   قفل قوس التنصيص طالما فتحنا قوس اذن لازم نقفله 

&                 علامة و أو بمعنى and

Sheet1.Cells(Rows.Count, "a").End(xlUp).Row    اخر خليه بها بيانات بالعمود A

طيب عرفنا ازاى نكتب الكود فما هو وقت تنفيذ الكود السطر ده هيتم وضعه فى اى حدث ( والله دى بقى حضرتك اللى تحددها حسب برنامجك انت 

ولكن على سبيل المثال نضع هذا الكود فى حدث فتح الفورم

شاهد الكود

Private Sub UserForm_Initialize()

ComboBox1.RowSource = "sheet1!a2:b" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row

End Sub

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

ممكن نكتبه بشكل تانى لو حابب تعرف اكتر من طريقه

شوف الكود وبعدين اشرحه لك

Private Sub UserForm_Initialize()

Lr = Sheet1.Cells(Rows.Count, "a").End(xlUp).Row
ComboBox1.RowSource = "sheet1!a2:b" & Lr

End Sub

قمت بعمل متغير وسميته Lr  وممكن تسميها انت بأى اسم كما تحب

وقلت ان المتغير ده عباره عن اخر خلية بها بيانات بالعمود A 

وبالتالى كتبة المصدر بتاع البيانات كالتالى sheet1!a2:b" & Lr"
تم الاستعاضه بـ Lr بدلا من السطره ده  Sheet1.Cells(Rows.Count, "a").End(xlUp).Row

ويمكن كتابة الكود بشكل اخر ( ملحوظه هذا التنوع بالكتابه هو فقط من حيث اسلوب كتابة الكود لكن المضمون واحد)

Private Sub UserForm_Initialize()
With ComboBox1
.RowSource = "sheet1!a2:b" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row
End With
End Sub

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

اتمنى لكم التوفيق

وانتظرونا فى طريقه جديده قريبا بأذن الله

تم تعديل بواسطه الصـقر
  • Like 9
قام بنشر (معدل)

الطريقه الخامسه :- تعبئه الكمبوبوكس ببيانات محدده

فمن خلال هذه الطريقه يمكن تعبئة الكمبوبوكس ببيانات محدد يتم كتابتها بالكود 

يعنى لا يوجد مرجع لها بالاكسيل فى اى شيت 

مثال لو انت حضرتك حابب تعمل خيارين فقط للمستخدم مثلا يختار أما سند قبض أو سند صرف

هنعمل الكلام ده من خلال مصفوفه شاهد الكود اولا ثم نكمل التوضيح

 

Dim a As Variant
a = Array("سند قبض", "سند صرف")
       ComboBox1.List = a

السطر الاول بالكود هو تعريف متغير وسمناه a    ( وممكن تسميه اى حرف اخر او حروف اخرى ) وقلنا ان المتغيير ده من النوع Variant 

Dim a As Variant

طيب a اللى هى من النوع Variant  عباره عن ايه لازم بقى اديها قيمه وعرفها

علشان كدا كتبنا السطر التانى

a = Array("سند قبض", "سند صرف")

Array  دى عباره عن داله من دوال VbA  وهى المصفوفه ( عباره كدا عن حصاله بنجمع بها المعلومات اللى عايزينها علشان نستخدمها بعد كدا )

طيب بعد ما عرفنا a  وقلنا ان a عباره عن مصفوفه وبعدين قمنا بتخزين القيم اللى عايزينها داخل المصفوفه 

بعد كدا عملنا فى السطر التالى قلنا ان الكمبوبوكس القائمه بتاعته تساوى العناصر اللى داخل المصفوفه 

ComboBox1.List = a

 

طيب الكود ده يوضع فى اى حدث ؟ دى بقى حضرتك اللى تجاوب عليها حسب احتياج برنامجك

ولكن ممكن نفترض انه يكون فى حدث فتح الفورم مثلا كالتالى

 

Private Sub UserForm_Initialize()
Dim a As Variant
a = Array("سند قبض", "سند صرف")
      ComboBox1.List = a
End Sub

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

large.151.png.7f41c3737eafc58f06690986e5

يعنى باختصار كل اللى يهمه بالكود ده هو السطر التالى تقدر من خلاله تحديد البيانات المطلوب عرضها

a = Array("سند قبض", "سند صرف")

ممكن يكون كدا مثلا

a = Array("فاتورة مبيعات", "فاتورة مشتريات", "فاتورة مردود مبيعات", "فاتورة مردود مشتريات")

شاهد الصوره عند تغيير العناصر داخل المصفوفه

large.152.png.0146f2b9107dc29c39a7637f03

****************************************************************************

وهذه طريقه اخرى لكتابة الكود

Private Sub UserForm_Initialize()
Dim a As Variant
a = Array("سند قبض", "سند صرف")
        For i = LBound(a) To UBound(a)
        ComboBox1.AddItem a(i)
        Next
End Sub

بدل استعمال الخاصيه List فى تعبئه الكمبوبوكس بالعناصر اللى داخل المصفوفه قمنا باستخدام الحلقه التكراريه For  للمرور على كل عناصر المصفوفه وادخالها فى الكمبوبوكس 

**************************************************************************************

 

والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد  وطريقه اخرى من طرق تعبئة الكمبوبوكس

:fff:تقبلوا تحياتى :fff:

 

تم تعديل بواسطه الصـقر
  • Like 8
قام بنشر (معدل)

الطريقه الٍسادسه :- تعبئه الكمبوبوكس باستخدام الحلقه التكراريه For Each  (طريقه احترافيه)

لو عندى شيت زى كدا وفيه بيانات وعايز اقوم بتعبئة الكمبوبوكس بالبيانات المظلله باللون الاخضر شاهد الصوره

large.160.png.de121f892846422dbe11aa63f6

مثال :-  مطلوب تعبئة الكمبوبوكس  1 بالبيانات المظلله باللون الاخضر  هنعمل الكود التالى

With ComboBox1
For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value
Next
End With

نشرح الكود ونمشى وحده وحده ونشوف ازى تم كتابته

بالسطر الاول استخدمنا   With ComboBox1  يعنى بنقول للكود الشغل بتاعنا هيكون مع الكمبوبوكس 1  ( الكمبوبوكس المطلوب تعبئته )

وطبعا طالما فتحنا With يبقى لازم نقفلها بــ End With  زى كدا

With ComboBox1

End With

السطر التانى استخدمنا الحلقه التكرارية For Each وسميت الحلقه بأسم Data  (وممكن تسميها اى اسم او احرف اخرى كما يحلو لك )

Data   موجوده فى اى نطاق قلتله موجود فى النطاق من A2 الى اخر خلية بها بيانات فى العمود A  ( وطبعا عرفنا ازاى قبل كدا نعرف اخر صف به بيانات فى اى شيت وفى اى عمود )

وكدا الحلقه التكرارية هتبدأ تلف على كل خليه فى النطاق المذكور بدأ من الخلية A2  وطبعا لازم نقفل الحلقه بـ Next

For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)

Next

فلحلقه لما تبدأ هيكون Data = A2    

Next  الكود هيروح للخليه اللى بعدها

Data = A3

Next  الكود هيروح للخليه اللى بعدها

Data = A4

Next  الكود هيروح للخليه اللى بعدها

وهكذا حتى يصل الى اخر خليه بها بيانات بالعمود وهى A11

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

هقوله وانت بتلف اعمل حاجتين خلى Data  اللى هى فى اول لفه هتكون قيمتها A2  دخلها فى العمود الاول للكمبوبوكس ( ملحوظه العمود الاول فى الكمبوبوكس بيكون رقمه 0

والخليه المجاورة لها بالعمود B اللى هى B2 دخلها بالعمود الثانى بالكمبوبوكس ( ملحوظه العمود الثانى بيكون رقمه 1 )

وهكذا

وهو بيمر على كل خليه بالنطاق هيعمل كدا

.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value

ترتيب الاعمده فى الكمبوبوكس بيدأ من 0 وكذالك ترتيب الصفوف بيدأ من 0 

AddItem هى العمود رقم 0 فى الكمبوبوكس والعمود ده يساوى Data اللى هى كل خليه هتمر فيها الحلقه  اللى هى اسماء العملاء بالعمود A 

والعمود رقم 1 فى الكمبوبوكس هو (List(.ListCount - 1, 1.  هيظهر فيه كود العميل اللى بالعمود B 

                                 (رقم العمود , صفوف الكمبوبوكس)List.  صفوف الكمبوبوكس بتبدأ من 0 زى ما قلت علشان كدا قلت ان صفوف الكمبوبوكس - 1  ****  ListCount - 1. 

طيب العمود رقم 1 عايزين نظهر فيه الكود اللى بالعمود B  بالشيت فنعمل ايه   

Data.Offset(0, 1).Value=   هنا استخدمنا الداله offset  فى اول لفه للحلقه هيكون Data  = A2  فأنا بقوله انتقل من A2 بمقدار صف 0 والعمود 1 ( يعنى ايه صف 0 يعنى نفس الصف والعمود واحد يعنى تحرك وروح للعمود B 

 

اخر شئ طبعا الكود ده وقت تنفيذه انت اللى بتحدده ولكن على سبيل المثال انا عايز اكتبه فى حدث تشغيل الفورم فيكون كالتالى

Private Sub UserForm_Initialize()
With ComboBox1
For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value
Next
End With
End Sub

 

والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد  وطريقه اخرى من طرق تعبئة الكمبوبوكس

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

:fff:تقبلوا تحياتى :fff:

تم تعديل بواسطه الصـقر
  • Like 8
قام بنشر (معدل)

الطريقه الٍسابعه :- تعبئه الكمبوبوكس بدون تكرار

باستخدام الحلقه التكراريه For Each  و الداله Countif  (طريقه احترافيه)

لو عندى شيت زى كدا وفيه بيانات وعايز اقوم بتعبئة الكمبوبوكس بالبيانات المظلله باللون الاخضر ولكن دون تكرارشاهد الصوره

large.170.png.2a0915e0cb06d8351ab28caf9f

هنستخدم نفس الكود السابق ولكن مع اضافه الداله Countif
الكود هيكون كالتالى
With ComboBox1
For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
i = Data.Row
aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data)
If aa = 1 Then
.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value
End If
Next
End With
أنا هحاول بقدر الامكان اعيشك فيديو تشوف الكود اثناء التنفيذ بيعمل ايه
السطرالاول  هو With ComboBox1    يعنى بنقول للكود الشغل بتاعنا هيكون مع الكمبوبوكس 1  ( الكمبوبوكس المطلوب تعبئته )
 
السطر الثانى هو الحلقة التكرارية For  Each  وقمنا بتسميتها اسم افتراضى وليكن Data  ( وممكن تسميها اى اسم او حرف او مجموعه من الحروف )
طيب Data   وين موجوده فى اى نطاق قلتله فى  In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row
يعنى النطاق من A2 الى اخر خلية بها بيانات فى العمود A اللى هى بالصوره السابقه A7 ( طبعا عرفنا ازاى نكتب سطر البحث عن اخر خليه بها بيانات)
كدا عرفنا النطاق وهيكون من A2 :A7 طبقا للصوره موضوع الشرح ( وطبعا عند زياده المدى وليكن كتابة اسم جديد فى الخلية A8  سوف يقوم الكود بمعرفه النطاق من A2:A8 )
الحلقه دلوقتى عرفت النطاق بتاعها وهتبدأ تلف على خلية خلية فى هذا النطاق وكل مره هيكون الحلقه Data لها اسم خليه معينه
فى المره الاولى سيكون قيمة Data  هى A2 
والكود هينتقل الى السطر التالى وهو    i = Data.Row    عملت متغير اسمه i وقلت أن i  تساوى Data.Row  يعنى رقم الصف اللى فيه Data
دلوقتى Data  هى A2  والخلية A2 كم رقم الصف بتاعها هو الصف رقم 2  أذن i = 2 
الكود هيروح للسطر اللى بعد كدا وهو 
aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data)

هنا عملت متغير وسميتها aa وقلت ان aa تساوى قيمة معادله ما هى المعادله هى Countif وهى تعنى عمل احصاء على شئ ما داخل نطاق محدد

عند الاعلان عن معادله فى اى كود لازم نكتب الجمله دى .Application.WorksheetFunction  ثم اسم الداله اللى انت عايزها انا دلوقتى محتاج الداله 

Countif     وهى ( CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data

نطاق العمل هو المظلل باللون الاحمر وشرط الاحصاء هو اللون الاخضر 

                       جزء النطاق هو ( الى , من )Sheet1.Range

السؤال هنا من ايه ؟ الى ايه؟ 

من A2 بس فى الكود مش هكتبها A2 هستخدم Cells و Cells عباره عن  (رقم العمود, رقم الصف)Cells 

ِA2  كم رقم الصف بتاعها رقم 2 وكم رقم العمود بتاعها رقمه 1 اذن A2 تساوى (Cells(2, 1

الى ايه ؟ الى اى خلية ؟ الى هنا هتكون متغيره انا بالمره الاولى عايزه الى A2 والمره التانيه الى A3 والمره الثالثه الى A4 وهكذا طيب ودى بقى اكتبها ازاى ؟      ركز معايا يا عبدالتواب شايفك نمت منى :biggrin:

فى Cells مش احنا قلنا ان   Cells عباره عن  (رقم العمود, رقم الصف)Cells  طيب رقم الصف كل مره هو اللى مش معروف لكن رقم العمود هو اللى معروف

طيب اعرف ازاى رقم الصف علشان كدا انا عرفت المتغير  i  فى السطر الثالث بالكود  i = Data.Row

فنكتب الى كدا (Cells(i, 1 الصف متغير من خلال i والعمود ثابت وهو عمود A  ورقمه 1

اذن النطاق فى اول لفه للكود هيكون من A2:A2 وشرط الاحصاء هو Data اللى هى قيمة الخلية A2 ( عبدالله باقشير)

فالمعادله aa هيكون كم 1 طبعا ليه لان عبدالله باقشير فى النطاق من A2:A2  مظهرش غير مره وحده فقط

بعد كدا الكود هينتقل الى السطر التالى وهو If aa = 1 Then استخدمت If  لاختبار قيمة aa هل هى تساوى 1 أو لا اذا كانت 1 نفذ السطر اللى بعده واذا مش تساوى 1 اقفل if  وانتقل الى Next 

طبعا فى اللفه الاولى اللى احنا فيها دلوقتى aa = 1

فهينفذ المطلوب وهو السطرين التاليين

.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value

 

ترتيب الاعمده فى الكمبوبوكس بيدأ من 0 وكذالك ترتيب الصفوف بيدأ من 0 

AddItem هى العمود رقم 0 فى الكمبوبوكس والعمود ده يساوى Data اللى هى كل خليه هتمر فيها الحلقه  اللى هى اسماء العملاء بالعمود A 

والعمود رقم 1 فى الكمبوبوكس هو (List(.ListCount - 1, 1.  هيظهر فيه كود العميل اللى بالعمود B 

                                 (رقم العمود , صفوف الكمبوبوكس)List.  صفوف الكمبوبوكس بتبدأ من 0 زى ما قلت علشان كدا قلت ان صفوف الكمبوبوكس - 1  ****  ListCount - 1. 

طيب العمود رقم 1 عايزين نظهر فيه الكود اللى بالعمود B  بالشيت فنعمل ايه   

Data.Offset(0, 1).Value=   هنا استخدمنا الداله offset  فى اول لفه للحلقه هيكون Data  = A2  فأنا بقوله انتقل من A2 بمقدار صف 0 والعمود 1 ( يعنى ايه صف 0 يعنى نفس الصف والعمود واحد يعنى تحرك وروح للعمود B 

كدا فى اول لفه للحلقه دخل اسم عبدالله باقشير فى العمود الاول للكمبوبوكس ودخل كود العميل وهو 101 فى العمود الثانى للكمبوبوكس

هيقفل If  ثم ينتقل الى السطر التالى وهو Next 

Next  تعنى ارجع للحلقه For Each  مره اخرى

فلما يرجع هيكون Data  تساوى قيمة A3 

ثم ينتقل الى السطر التالى وهو i = Data.Row      دلوقتى Data  هى A3  والخلية A3 كم رقم الصف بتاعها هو الصف رقم 3  أذن i = 3

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

aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data)

(Cells(2, 1 اللى هى A2

 و (Cells(i, 1  المتغير i دلوقتى رقمه 3 اذن (Cells(3, 1 وهى تعنى الخلية A3

يعنى نطاق هو من A2:A3   وشرط الاحصاء هو Data   وقيمتها الحاليه فى هذه الفه A3 (ياسر خليل )

كم مره ظهر اسم ياسر خليل فى النطاق من A2:A3  ظهر مره وحده اذن المتغير aa = 1

الكود هينتقل الى السطر التالى If aa = 1 Then 

طبعا الشرط محقق لان aa = 1 فهينفذ السطريين التاليين

.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value

يعنى هيدخل ياسر خليل فى العمود الاول للكمبوبوكس وهيدخل الكود بتاعه 102 فى العمود الثانى للكمبوبوكس

هيقفل If  ثم ينتقل الى السطر التالى وهو Next 

Next  تعنى ارجع للحلقه For Each  مره اخرى

فلما يرجع هيكون Data  تساوى قيمة A4 

ثم ينتقل الى السطر التالى وهو i = Data.Row      دلوقتى Data  هى A4  والخلية A4 كم رقم الصف بتاعها هو الصف رقم 4  أذن i = 4

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

aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data)

(Cells(2, 1 اللى هى A2 

 و (Cells(i, 1  المتغير i دلوقتى رقمه 4 اذن (Cells(4, 1 وهى تعنى الخلية A4

يعنى نطاق هو من A2:A4   وشرط الاحصاء هو Data   وقيمتها الحاليه فى هذه الفه A4 (عبدالله باقشير )

كم مره ظهر اسم عبدالله باقشير فى النطاق من A2:A4  ظهر مرتين اذن المتغير aa = 2

الكود هينتقل الى السطر التالى If aa = 1 Then 

طبعا الشرط لم يتحقق لان aa = 2 فمش هينفذ السطريين التاليين لان انا مش عايز الاسم يكرر فى الكمبوبوكس يظهر فقط مره وحده

.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value

هيقفل If  ثم ينتقل الى السطر التالى وهو Next 

Next  تعنى ارجع للحلقه For Each  مره اخرى

فلما يرجع هيكون Data  تساوى قيمة A5 

ثم ينتقل الى السطر التالى وهو i = Data.Row      دلوقتى Data  هى A5  والخلية A5 كم رقم الصف بتاعها هو الصف رقم 5  أذن i = 5

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

aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data)

(Cells(2, 1 اللى هى A2 

 و (Cells(i, 1  المتغير i دلوقتى رقمه 5 اذن (Cells(5, 1 وهى تعنى الخلية A5

يعنى نطاق هو من A2:A5   وشرط الاحصاء هو Data   وقيمتها الحاليه فى هذه الفه A5 (محمد حسن المحمد)

كم مره ظهر اسم محمد حسن المحمد فى النطاق من A2:A5  ظهر مره وحده اذن المتغير aa = 1

الكود هينتقل الى السطر التالى If aa = 1 Then 

طبعا الشرط محقق لان aa = 1 فهينفذ السطريين التاليين

.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value

يعنى هيدخل محمد حسن المحمد فى العمود الاول للكمبوبوكس وهيدخل الكود بتاعه 103 فى العمود الثانى للكمبوبوكس

هيقفل If  ثم ينتقل الى السطر التالى وهو Next 

Next  تعنى ارجع للحلقه For Each  مره اخرى

فلما يرجع هيكون Data  تساوى قيمة A6 

ثم ينتقل الى السطر التالى وهو i = Data.Row      دلوقتى Data  هى A6  والخلية A6 كم رقم الصف بتاعها هو الصف رقم 6  أذن i = 6

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

aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data)

(Cells(2, 1 اللى هى A2 

 و (Cells(i, 1  المتغير i دلوقتى رقمه 5 اذن (Cells(6, 1 وهى تعنى الخلية A6

يعنى نطاق هو من A2:A6   وشرط الاحصاء هو Data   وقيمتها الحاليه فى هذه الفه A6 (عبدالعزيز البسكرى)

كم مره ظهر اسم عبدالعزيز البسكرى فى النطاق من A2:A6  ظهر مره وحده اذن المتغير aa = 1

الكود هينتقل الى السطر التالى If aa = 1 Then 

طبعا الشرط محقق لان aa = 1 فهينفذ السطريين التاليين

.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value

يعنى هيدخل عبدالعزيز البسكرى العمود الاول للكمبوبوكس وهيدخل الكود بتاعه 104 فى العمود الثانى للكمبوبوكس

هيقفل If  ثم ينتقل الى السطر التالى وهو Next 

Next  تعنى ارجع للحلقه For Each  مره اخرى

فلما يرجع هيكون Data  تساوى قيمة A7 

ثم ينتقل الى السطر التالى وهو i = Data.Row      دلوقتى Data  هى A7  والخلية A7 كم رقم الصف بتاعها هو الصف رقم 7  أذن i = 7

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

aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data)

(Cells(2, 1 اللى هى A2 

 و (Cells(i, 1  المتغير i دلوقتى رقمه 7 اذن (Cells(7, 1 وهى تعنى الخلية A7

يعنى نطاق هو من A2:A7   وشرط الاحصاء هو Data   وقيمتها الحاليه فى هذه الفه A7 (ياسر خليل)

كم مره ظهر اسم ياسر خليل فى النطاق من A2:A7  ظهر مرتين اذن المتغير aa = 2

الكود هينتقل الى السطر التالى If aa = 1 Then 

طبعا الشرط لم يتحقق لان aa = 2 فمش هينفذ السطريين التاليين لان انا مش عايز الاسم يكرر فى الكمبوبوكس يظهر فقط مره وحده

.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value

هيقفل If  ثم ينتقل الى السطر التالى وهو Next 

Next  طبعا مش هيرجع فى هذه المره الى الحلقه لان النطاق انتهى وهينتقل الى 

End With

 كدا الكود انتهى وانا بصراحه انتهيت معاه من كتر اللف :'):'):')

طبعا الكود بينفذ الكلام ده فى لمح البصر دون ان تشعر ولكن لو مساحه النطاق كبير مثلا من A2:A1000 سوف تبدأ تشعر ببطئ الكود ممكن مثلا ياخد 30ثانيه

اخر شئ طبعا الكود ده وقت تنفيذه انت اللى بتحدده ولكن على سبيل المثال انا عايز اكتبه فى حدث تشغيل الفورم فيكون كالتالى

Private Sub UserForm_Initialize()
With ComboBox1
For Each Data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
i = Data.Row
aa = Application.WorksheetFunction.CountIf(Sheet1.Range(Cells(2, 1), Cells(i, 1)), Data)
If aa = 1 Then
.AddItem Data
.List(.ListCount - 1, 1) = Data.Offset(0, 1).Value
End If
Next
End With
End Sub

وعند تشغيل الفورم ستجد الصوره التاليه

large.171.png.d20e7bad31bc8639f2f0e4526f

لاحظ فى الصوره ان الكمبوبوكس يعرض فقط الاسماء دون تكرار 

*********************************************************************************************

 

والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد  وطريقه اخرى من طرق تعبئة الكمبوبوكس

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

:fff::fff:تقبلوا تحياتى :fff::fff:

 

 

تم تعديل بواسطه الصـقر
  • Like 4
قام بنشر (معدل)

الطريقه الثامنه :- تعبئه الكمبوبوكس بدون تكرار

باستخدام الحلقه التكراريه For Each  و المتغير Collection (طريقه احترافيه)

هذه الطريقه طريقه احترافيه من حيث فكرة الكود وكتابته ولكنها غير عملية ومفيده فى البيانات ذات النطاق الكبير نظرا لاعتمادها على عدد 2 حلقه تكراريه مما يسبب البطئ فى ادخال البيانات لو كان نطاق العمل كبير

لو عندى شيت زى كدا وفيه بيانات وعايز اقوم بتعبئة الكمبوبوكس بالبيانات المظلله باللون الاخضر ولكن دون تكرارشاهد الصوره

large.170.png.2a0915e0cb06d8351ab28caf9f

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

ببساطه ايه المطلوب ؟ المطلوب هو ادخال البيانات اللى بالشيت المظلله باللون الاخضر ( A2:B7)

اذن لازم اعمل متغير يعبر عن كل خلية بالنطاق فنعمل ايه ؟

Dim data As Range

انا دلوقتى عايز العمودين دول يدخلوا فى الكمبوبوكس برضوا فى عمودين 

انا هعمل ان كل بيانات عمود عباره عن مجموعه بمعنى ايه الخلايا من A2 الى اخر خلية بها بيانات فى العمود A  ( دى تكون مجموعه اولى )

       والخلايا من B2 الى اخر خلية بالعمود A ( دى تكون مجموعه تانية  )

طيب علشان اعلن عن مجموعه يبقى لازم اعمل كدا

Dim data As Range
Dim group1 As Collection
Dim group2 As Collection

عرفت متغير وسميته group1  وقلت ان المتغير ده من النوع Collection ( وCollection  تعنى مجموعه )

طبعا زى ما اتفقنا انى عايز اعرض عمودين يبقى لازم اعرف كل عمود فى مجموعه فأنا محتاج اعرف متغير لكل مجموعه لذالك عملت group1   و  group2

طيب group1   و  group2 عباره عن ايه ؟ عباره عن مجموعات جديده اذن لازم استخدم set لتحويل قيمة المتغير الى كائن

طيب أزاى ؟ بالشكل ده شوف الكود

Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection

حولت قيمة المتغير group1 الى كائن يساوى مجموعه جديده

وايضا حولت قيمة المتغير group2 الى كائن يساوى مجموعه جديده

*********************************************************************************************

محلوظه مهمه جدا انا عملت مجموعتين لاننا عايزين نقوم بتعبئة الكمبوبوكس ببيانات العمودين A و B  لكن لو حضرتك عايز عمود A فقط اذن تعرف مجموعه

وحده فقط يعنى على حسب عدد الاعمده هتعرف مجموعات

***********************************************************************************************

طيب دلوقتى عملنا بالكود مجموعتين عايزين ندخل فيهم البيانات بقى اللى بالشيت فنعمل ايه ؟

هنستخدم الحلقه التكراريه  For Each ونسمى الحلقه باسم Data ونقول ان الحلقه تبدأ من A2: الى اخر خليه بها بيانات

وطبعا اتكلمنا بالتفصيل قبل كدا عن الحلقه For Each راجع الدرس السابق 

تعالو نشوف الكود وصل لوين ؟

Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection
For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)

            Next data

كدا عملنا الحلقه والحلقه هتلف من خلال Next  بس كدا هتلف على الفاضى مجرد بس هتمر على الخلايا اللى بالنطاق وتقولها السلام عليكم ان مش عايز سلامات وطيبون دلوقتى انا عايز استفيد من لفتها ومن عملها عايز اقولها ان group1   المجموعه الاولى تساوى العمود A اللى هو Data 

 وعايز ان group2   المجموعه الثانيه تساوى العمود B  اللى هو بجوار الـ Data ( من خلال offset)

فالكود هنضيف فيه ايه ؟ شوف الكود

Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection
For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
group1.Add data
group2.Add data.Offset(0, 1).Value
            Next data

قلنا ان group1   قم بأضافه data ( اللى هى خلايا العمود A) من خلال Add

وكذالك  group2    قم بأضافه  خلايا العمود B 

واحد هيقولى بس كدا هياخد كل البيانات اللى بالنطاق حتى وان كانت مكرره وانت قلتلى ان الطريقه دى مش هيكرر البيانات فى الكمبوبوكس هو انت بتضحك عليا 

هقوله يا عم اصبر شوية انا عايز اديك الطريقتين لو عايز البيانات زى ما هى حتى وان كانت مكررة يبقى الكود السابق كدا تمام ولكن لو مش عايز تكرار بسيطه جدا

هنعمل اضافه صغيره جدا جدا جدا

شوف الكود

On Error Resume Next
Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection
For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
group1.Add data, data.Text
group2.Add data.Offset(0, 1).Value
            Next data

اللى مركز معايا وصاحى هيعرف ايه اللى تم اضافته 

تم اضافه السطر الاول وهو عباره  On Error Resume Next وتعنى عند حدوث اى خطا انتقل الى السطر التالى واحد هيقولى طيب وهو هيحصل خطأ ليه هو مش الكود مكتوب صح هقوله لان انت طلبت عدم تكرار الاسماء فالكود عندما يصادف اسم مكرر هيتوقف ليتم تبليغ حضرتك فعلشان كدا كتبتله هذه العباره انه مش عايزه يبلغنى وينتقل الى السطر التالى ويكمل الحلقه بتاعته دون توقف 

وتم اضافه هذا الجزء البسيط فى السطر   group1.Add data, data.Text   الجزء المظلل باللون الاحمر هى الاضافه البسيطه اللى تمنع التكرار

طيب كدا حلو قوى لحد دلوقتى تم تعبئة كل مجموعه المجموعه الاولى بالعمود A  والمجموعه الثانيه بالعمود B

ازاى بقى ندخل بيانات كل مجموعه فى اعمدة الكمبوبوكس

اذن هستخدم الخاصيه With   واقفالها بــ End with للاشاره الى الكمبوبوكس المراد تعبئته

With Me.ComboBox1

End With

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

الحلقه هى  For  Next  للمرور على كل عناصر المجموعه من رقم 1 اللى هو اول عنصر بالمجموعه الاولى الى اخر عنصر بالمجموعه الاولى

On Error Resume Next
Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection
For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
group1.Add data, data.Text
group2.Add data.Offset(0, 1).Value
            Next data
            
With Me.ComboBox1
        For i = 1 To group1.Count
            .AddItem group1(i)
            .List(.ListCount - 1, 1) = group2(i)
        Next i
End With

 AddItem.  يشير الى العمود الاولى للكمبوبوكس وقمنا بتعبئة عناصر المجموعه group1   

(List(.ListCount - 1, 1.  يشير الى العمود الثانى للكمبوبوكس وقمنا بتعبئة عناصر المجموعه group2

 

يبقى تحديد وقت تنفيذ الكود وزى ما اتفقنا قبل كدا ان وقت تنفيذ الكود انت اللى بتحدده ولكن على سبيل المثال فى حدث فتح الفورم
Private Sub UserForm_Initialize()
On Error Resume Next
Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection
For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
group1.Add data, data.Text
group2.Add data.Offset(0, 1).Value
            Next data
            
With Me.ComboBox1
        For i = 1 To group1.Count
            .AddItem group1(i)
            .List(.ListCount - 1, 1) = group2(i)
        Next i
End With
End Sub

 

 

والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد  وطريقه اخرى من طرق تعبئة الكمبوبوكس

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff::fff:

 

تم تعديل بواسطه الصـقر
  • Like 4
قام بنشر (معدل)

الطريقه التاسعه :- تعبئه الكمبوبوكس بدون تكرار وبناء على شرط

باستخدام الحلقه التكراريه For Each  و المتغير Collection وداله If (طريقه احترافيه)

لو عندى شيت زى كدا وفيه بيانات وعايز اقوم بتعبئة الكمبوبوكس بالبيانات المظلله باللون الاخضر ولكن دون تكرار وبناء على اسم المعرض شاهد الصوره

large.180.png.f0fc18ac73afc3b6129f276048

 
كما هو مبين بالصوره  انا عايز اقوم بتعبئة الكمبوبوكس ولكن حسب عملاء معينه مثلا وليكن  الجزائر ( عبدالعزيز البسكرى و شوقى ربيع ) فقط نعمل ايه؟
هو نفس الكود السابق اللى بالطريقه الثامنه مع تعديل بسيط تعالو نشوف الكود كان ايه ؟ وما هو التعديلات اللى هتم عليه ؟
Private Sub UserForm_Initialize()
On Error Resume Next
Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection
For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
group1.Add data, data.Text
group2.Add data.Offset(0, 1).Value
            Next data
            
With Me.ComboBox1
        For i = 1 To group1.Count
            .AddItem group1(i)
            .List(.ListCount - 1, 1) = group2(i)
        Next i
End With
End Sub

اللى هيتم تغييره بالكود 

1- هذا السطر للحلقه For Each  

For Each data In Sheet1.Range("A2:A" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)

هنا بدل الحلقه ما بتلف على خلايا العمود A هخليها تلف على خلايا العمود B  زى كدا

For Each data In Sheet1.Range("b2:b" & Sheet1.Cells(Rows.Count, "b").End(xlUp).Row)

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

انا عايز اجيب عملاء الجزائر فقط

If data.Offset(0, -1).Value = "الجزائر" Then
group1.Add data, data.Text
group2.Add data.Offset(0, 1).Value, data.Text
End If


زى ما احنا شايفين سطر الكود استخدمنا If  لعمل شرط ما هو الشرط ؟ الشرط ان data  اللى بتمثل كل خلية فى العمود B يبص على الخليه اللى قبلها يعنى مثلا لما يكون data قيمتها B2 يبص على الخلية اللى قبلها اللى هى A2 ( طبعا دا تم من خلال offset ) طيب هو لما يبص على الخلية اللى قبلها A2  هيختبر ايه ؟ عايزه يشوف هل مكتوب بها الجزائر أو لا ؟ 

اذا كانت بها الجزائر ينفذذ الاسطر التالية ثم انهاء If  وطبعا شرحنا معنى هذه الاسطر قبل كدا

وبعد هذه التعديلات البسيطه على الكود  هيكون شكله النهائى كدا فى حدث فتح الفورم

Private Sub UserForm_Initialize()
On Error Resume Next
Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection
For Each data In Sheet1.Range("b2:b" & Sheet1.Cells(Rows.Count, "b").End(xlUp).Row)
If data.Offset(0, -1).Value = "الجزائر" Then
group1.Add data, data.Text
group2.Add data.Offset(0, 1).Value, data.Text
End If
            Next data
            
With Me.ComboBox1
        For i = 1 To group1.Count
            .AddItem group1(i)
            .List(.ListCount - 1, 1) = group2(i)
        Next i
End with
End Sub


 

شاهد الصوره عند فتح الفورم

 

large.181.png.8853b4975ac63b8db37f8c330d

                               **************************************************************************************

واحد فنان هيسئلنى سؤال فنى 

**************************************************************************************

هو انا لو عايز مصر مثلا مش الجزائر لازم ادخل كل مره على الكود واغير فى هذا السطر

If data.Offset(0, -1).Value = "الجزائر" Then

هغير بدل من الجزائر اعملها مصر

If data.Offset(0, -1).Value = "مصر" Then
هقوله الاجابه ايوا لكن انا عارف قصدك انت عايز طريقه احترافيه وهى تعبئة الكمبوبوكس بناء على اخر
فى الحاله دى لازم اعمل كمبوبوكس جديد فى الفورم 
اتبع معى الخطوات التالية
 
الخطوه الاولى :-
 هنصمم كمبوبوكس جديد شاهد الصوره

large.182.png.e91872ab66aeceb0baaba83f84

الخطوه الثانيه :
عمل كود فى حدث فتح الفورم 
هنعمل كود ليقوم بتعبئة الكمبوبوكس 2 بالبيانات فى العمود A الخاصه باسماء المعارض ولكن دون تكرار 
امامك طريقتين
1- اذا كان الاسماء للمعارض ثابته ممكن تعملها من خلال المصفوفه زى ماعرفنا قبل كدا زى كدا
Private Sub UserForm_Initialize()
Dim a As Variant
a = Array("اليمن", "مصر", "سوريا", "الجزائر")
ComboBox2.List = a
End Sub

2- اذا كان الاسماء للمعارض متغيره اذن هنستخدم كود المجموعات مع شرط عدم التكرار

فهيكون الكود كدا كما تعلمنا من قبل
Private Sub UserForm_Initialize()
On Error Resume Next
Dim data As Range
Dim group1 As Collection
        Set group1 = New Collection
For Each data In Sheet1.Range("a2:a" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
group1.Add data, data.Text
            Next data
            
With Me.ComboBox2
        For i = 1 To group1.Count
            .AddItem group1(i)
        Next i
End With
End Sub

وعند تشغيل الفورم سيكون كالتالى

large.183.png.2a6a41183ae4a34d0e2e730965

الخطوه الثالثه :-

انا عايز عند الاختيار من الكمبوبوكس 2 يتم تعبئة الكمبوبوكس 1 بالاسماء التابعه له تلقائيا

اذن هعمل كود فى حدث تغيير الكمبوبوكس 2 ( يعنى كل ما يتم تغيير قيمة الكمبوبوكس 2 تتغير تعبئة الكمبوبوكس 1)

هجيب نفس الكود اللى كان فى بداية الدرس اللى هو التعبئة بناء على شرط مع تغيرات بسيطه واحطه فى حدث تغيير الكمبوبوكس 2 كالتالى

Private Sub ComboBox2_Change()
ComboBox1.Clear
On Error Resume Next
Dim data As Range
Dim group1 As Collection
Dim group2 As Collection
        Set group1 = New Collection
        Set group2 = New Collection
For Each data In Sheet1.Range("b2:b" & Sheet1.Cells(Rows.Count, "b").End(xlUp).Row)
If data.Offset(0, -1).Value = ComboBox2.Value Then
group1.Add data, data.Text
group2.Add data.Offset(0, 1).Value, data.Text
End If
            Next data
            
With Me.ComboBox1
        For i = 1 To group1.Count
            .AddItem group1(i)
            .List(.ListCount - 1, 1) = group2(i)
        Next i
End With
End Sub

اللى تم تغييره فى هذا الكود هو اضافه السطر الاول يعنى تنظيف ومسح محتوى قائمة الكمبوبوكس 1 لاستضافه البيانات الجديده حسب التعديل فى الكمبوبوكس 2

وايضا استبدال هذا السطر 

If data.Offset(0, -1).Value = "الجزائر" Then

بالسطر التالى

If data.Offset(0, -1).Value = ComboBox2.Value Then

جعل الشرط حسب محتوى الكمبوبوكس 2

شاهد الصوره التالية عند اختيار مصر من الكمبوبوكس 2 سيظهر القائمة فى الكمبوبوكس 1 باسماء عملاء مصر فقط

large.184.png.3f53ade8e22202b0a9ff219345

شاهد الصوره التالية عند اختيار سوريا من الكمبوبوكس 2 سيظهر القائمة فى الكمبوبوكس 1 باسماء عملاء سوريا فقط

large.185.png.d9b48cd1280a35a0198029f96b

 

**** كدا عرفنا ازاى نقوم بتعبئة الكمبوبوكس بناء على شرط 

**** وكمان عرفنا ازاى نقوم بتعبئة الكمبوبوكس بناء على كمبوبوكس اخر( وطبعا فى طرق اخرى كتير جدا لتعبئة كمبوبوكس بناء على كمبوبوكس اخر )

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

ارجوا يارب ان اكون وفقت بالشرح

والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد  وطريقه اخرى من طرق تعبئة الكمبوبوكس

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff::fff:

 
تم تعديل بواسطه الصـقر
  • Like 5
قام بنشر (معدل)

الطريقه العاشره :- تعبئه الكمبوبوكس بأستخدام Set

هذه هى الطريقه الاخيره من طرق الكمبوبوكس وعلشان هى الاخيره والاعمال بالخواتيم اللهم ارزقنا جميعا حسن الخاتمه

فطريقه اليوم طريقه سهله جدا وتتميز بالبساطه يعنى هنقزز كدا شوى مع بعض ونتسلى ( استراحه متعلم )

لو عندى شيت زى كدا وفيه بيانات وعايز اقوم بتعبئة الكمبوبوكس بالبيانات المظلله باللون الاخضر شاهد الصوره

large.65.png.7a0f14d19e22bf5d6a62d200659

يوجد طريقتين

الطريقه الاولى :-

لو نطاق البيانات عندى ثابت كما هو بالجدول من A2: b5 

هستخدم الكود التالى

Dim R As Range
Set R = Sheet1.Range("A2:b5")
Me.ComboBox1.List = R.Cells.Value

كود سهل جدا وبسيط 

السطر الاول الاعلان عن المتغيرر وقمت بتسميته R ( وممكن تسميه اى اسم كيفما شئت) وانه ان المتغير ده من النوع Range 

وعايز احول المتغير ده الى كائن بحيث اعرفه واقدر اتعامل معاه فأستخدمت set وهذه الكلمة هى لتحويل  المتغير الى كائن 

القاعده الخاصه بـ Set  هى                                      الكائن = المتغير  set

                                     ("Set        = Sheet1.Range("A2:b5

 

بعد ما عرفت الكائن وحددت نطاقه دلوقتى اقدر استخدمه واتعامل معه    Me.ComboBox1.List = R.Cells.Value

          هذا السطر يعنى ان قائمة الكمبوبوكس تساوى النطاق قيمة كل خليه فى النطاق R           

 

الطريقه الثانيه :-

لو نطاق البيانات عندى متغير كما هو بالجدول من A2: b5 ولكن يمكن اضافه اسماء جديده او حذف اسماء موجود

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

هستخدم الكود التالى

Dim R As Range
Set R = Sheet1.Range("A2:b" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
Me.ComboBox1.List = R.Cells.Value

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

 

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

Private Sub UserForm_Initialize()
Dim R As Range
Set R = Sheet1.Range("A2:b" & Sheet1.Cells(Rows.Count, "a").End(xlUp).Row)
Me.ComboBox1.List = R.Cells.Value
End Sub

 

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

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

أن شاء الله بعد الانتهاء من كل الشروحات هيتم تحويله الى كتيب الكترونى Pdf وان شاء الله يكون اول كتاب باللغه العربيه فى شروحات الفورم اللى بيدخل فى ادق التفاصيل واعمقها

 

والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff:

تم تعديل بواسطه الصـقر
  • Like 5
قام بنشر (معدل)

الطريقه الحاديه عشر :- تعبئه الكمبوبوكس بأستخدام المصفوفه ويتم ترتيبها ابجديا اولا ثم تعبئة الكمبوبوكس

هذه الطريقه للاستاذ القدير / ياسر خليل تفضل بها علينا وارسلها لى على الخاص

الكود مشروح جاهز

Private Sub UserForm_Initialize()
'يوضع الكود في حدث الفورم ويقوم بعمل قائمة كومبوبوكس مميزة في عناصرها ومرتبة أبجدياً

'تعريف المتغيرات
    Dim A, E
    
'مسح محتويات الكومبوبوكس
    ComboBox2.Clear
    
'[Sheet1] بدء التعامل مع ورقة العمل المسماة برمجياً
    With Sheet1
'ليحمل قيم النطاق في العمود الثاني أي أنها تعتبر مصفوفة بكل القيم في هذا النطاق [A] تعيين قيمة للمتغير
        A = .Range("B2", .Range("B" & Rows.Count).End(xlUp)).value
    End With
    
'بدء التعامل مع المصفوفات
        With CreateObject("System.Collections.ArrayList")
'[Aِ] من عناصر المصفوفة [E] عمل حلقة تكرارية لكل عنصر
            For Each E In A
'إذا كان العنصر لا يساوي فراغ ولا يوجد عنصر مماثل في المصفوفة أي يتم التعامل مع القيم الفريدة
                If (E <> "") * (Not .Contains(CStr(E))) Then
'يتم إضافة العنصر إلى المصفوفة الجديدة التي تحتوي على قيم فريدة غير مكررة
                    .Add CStr(E)
                End If
            Next
'ترتيب عناصر المصفوفة الجديدة تصاعديا
            .Sort
'إضافة عناصر المصفوفة الجديدة للكومبوبوكس
            ComboBox2.List = .ToArray
        End With
End Sub

لو حضرتك عايز الترتيب يكون من ( تنازليا ) فقط غير هذا السطر

.Sort

الى

.Sort: .Reverse

:fff:تقبلوا تحياتى:fff:

تم تعديل بواسطه الصـقر
  • Like 6
  • 2 weeks later...
قام بنشر (معدل)

سادسا :- اجبار المستخدم على الاختيار من الكمبوبوكس

يوجد طريقتين 

الطريقه الاولى :- هى استخدام الخاصيه Style

اثناء شرحنا لخصائص الكمبوبوكس فى مرحلة التصميم تكلمنا عن الخاصيه Style

ودا نسخ الجزئيه الخاصه بالخاصيه Style من شروحتنا السابقه

 الخاصيه (  Style ):-

وهى بنظرى من اهم الخصائص للكمبوبوكس

زى ما احنا عارفين لفتح القائمة الخاصه بالكمبوبوكس للاختيار منها لابد من الضغط على السهم لتفتح القائمه ولكن هذه الخاصيه تتيح للمستخدم التحكم فى وقت فتح القائمة الخاصه بالكمبوبوكس فلها خيارين

الخيار الاول Fm StyleDropDown Combo - 0 :- هو الافتراضى لابد من الضغظ على السهم لفتح القائمة كما تتيح للمستخدم كتابة اى شئ بالكمبوبوكس غير موجود بالقائمه بمعنى لا تلزم المستخدم من الخيار من القائمة 

والخيار الثانى  Fm StyleDropDown List - 2 : -هو فتح القائمة من خلال الضغط على السهم او بمجرد وقوف مؤشر الماوس على الكمبوبوكس   وكمان ميزة ثالته وهى مهمه جدا هو انه لا يمكن للمستخدم كتابة اى شئ فى الكمبوبوكس يعنى كانك عامل خاصيه حمايه للكمبوبوكس ولا سبيل امام المستخدم الا من الاختيار من القائمه

--------------------------------------------------------------------------------------------

الطريقه الثانية :- استخدام الخاصيه MatchFound 

عايزين نعمل كود يقوم باختبار قيمة الكمبوبوكس هل هى موجوده بالقائمه او لا ؟

لو الكمبوبوكس التطابق مع القائمة    =     خطأ    نفذ الكمبوبوكس فارغ 

( دا شرح الكود كدا بالبلدى وحنا قاعدين على المصطبه)

لتحويل الكلام اللى بالبلدى ده الى لغة البرمجه تابع معايا

لو                    نستبدلها بـ  IF  (يعنى قاعدة IF)

الكمبوبوكس         نستبدله باسم الكمبوبوكس المراد العمل عليه وهو على سبيل المثال Me.ComboBox1

التطابق مع القائمه  دى الخاصيه Match Found بمجرد كتابة اسم الكمبوبوكس ثم . ثم حرف M ستجد

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

                                                                                 large.195.png.b36420f7ac0e2d701d51a5d064

=

خطأ                   False   ( أى ان القيمة المختاره غير موجوده بالقائمه )

نفذ                   Then

الكمبوبوكس فارغ " "

شاهد الكود لما نجمع الكلام ده بقى هيكون كالتالى

If Me.ComboBox1.MatchFound = False Then
ComboBox1 = ""
End If

طيب ما هو وقت تنفيذ الكود وقت التنفيذ انت اللى بتحدده

مثلا ممكن يكون فى حدث تغيير الكمبوبوكس  ()Private Sub ComboBox1_Change

Private Sub ComboBox1_Change()
If Me.ComboBox1.MatchFound = False Then
ComboBox1 = ""
End If
End Sub

وبكدا لو عندك قائمه الكمبوبوكس وليكن بها ( مصر & السعودية & السودان & الجزائر )

والمستخدم تجاهل هذه القائمة وراح يكتب تونس بمجرد بس كتابة حرف ت سوف يقوم الكود بالعمل مش هيلاقى دوله فى القائمة تبدأ بحرف ت اذن تحقق شرط عدم التطابق فهيقوم بمسح حرف ت ممكن واحد يفتكر فى عفريت مسح الحرف :biggrin: يعنى كل ما تكتب شئ غير موجود بالقائمه هتلاقيه بيتمسح فورا 

-----------------------

ممكن نكتب الكود فى وقت حدث الخروج من الكمبوبوكس 

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.ComboBox1.MatchFound = False Then
ComboBox1 = ""
End If
End Sub

يعنى المستخدم بمجرد ما يكتب تونس ويضغط انتر للانتقال الى عنصر اخر على الفورم هتلاقى الكود بيتنفذ 

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

مكتبش اى حاجه ومازل الكمبوبوكس قيمته فارغه

ممكن المستخدم يتجنن هو ايه اللى بيحصل :wallbash:  هو ليه كل ما اكتب تونس يتم مسحها هو فى عفريت ؟؟

ما عفريت الا بنى ادم :wink2:

فعلشان نريحه نظهر له رساله تفيد بانه يجب الاختيار من القائمه

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.ComboBox1.MatchFound = False Then
ComboBox1 = ""
MsgBox " الرجاء الاختيار من القائمة", vbCritical, "خطأ"
End If
End Sub

قمنا باضافه هذا السطر بالكود قبل نهاية IF

MsgBox " الرجاء الاختيار من القائمة", vbCritical, "خطأ"

الرساله تتكون من ثلاث اقسام يفصل ما بين كل قسم وقسم علامة  ,

القسم الاول وهو الرساله " الرجاء الاختيار من القائمه" وتم وضعها بين علامتى تنصيص ( وهو قسم اجبارى)

القسم الثانى وهو نوع الرساله واظهار علامه لها  فكتبنا Vbcritical رساله خطأ  ( وهو قسم اختيارى يمكن الاستغناء عنه )

القسم الثالث وهو عنوان الرساله فكتبنا "خطأ" وممكن تكتب اى عنوان كما تشاء ( وهو قسم اختيارى يمكن الاستغناء عنه)

فالاساس فى الرساله هو نص الرساله

" الرجاء الاختيار من القائمة "  MsgBox

فأذا ارد اظهار علامه للرساله او عنوان لها قم باضافه القسم الثانى والثالث او استكفى بالقسم الاول اذا حبيت

شاهد الرساله عند الاختيار الخاطئ من المستخدم

                                                                      large.196.png.eaa9f0f9b4c7adc42911605658

 

هل يمكن كتابة الكود فى سطر واحد ؟ نعم يمكن ذالك 

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.ComboBox1.MatchFound = False Then: ComboBox1 = "": MsgBox "الرجاء الاختيار من القائمة", vbCritical, "خطأ": Exit Sub
End Sub

كما تشاهدون الكود انه فى سطر واحد فقط وذالك باستخدام :

 : ( تكتب من خلال الضغط على شيفت + حرف ك بالعربى )

    واستبدلنا عبارة      End if  بــ  Exit Sub

--------------------------------------------------------------------------------------------------------------------
 الحمد لله انتهينا من شروحات الكمبوبوكس 

والى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد

ان شاء الله هيكون عن الـــ  Frame

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff::fff:

 

 

 

 

تم تعديل بواسطه الصـقر
  • Like 8
قام بنشر (معدل)

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

اليوم بمشيئة الله سنتكلم عن شروحات الفريم ( Frame )

 

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

أن شاء الله هيتم تناول الموضوع على ست مراحل

 

1- كيفية انشاء Frame على الفورم  اثناء عملية التصميم

2- كيفية اضافه عناصر تحكم داخل  Frame  اثناء عملية التصميم

3- التعرف على خصائص Frame من شاشة الخصائص اثناء عملية التصميم

4-التعامل مع خصائص الـ  Frame فى لغة البرمجه 

5-كيفية اضافه عناصر تحكم داخل الـ  Frame والتحكم فى الاسكرول بار للــ Frame عند فتح الفورم او اثناء  العمل على الفورم وهو نشط

6-التحكم فى العناصر الموجوده داخل الـ  Frame   بطرق احترافيه 

 

نبدأ بسم الله

 

أولا :- كيفية انشاء Frame على الفورم  اثناء عملية التصميم

لأضافه Frame  جديد على الفورم يوجد طريقتين

الطريقه الاولى :-

 

large.201.png.2b0f08277a25428c68ac7cf143

 

الطريقه الثانيه :-

نسخ فريم موجود على الفورم وعمل فريم اخر منه 

large.202.png.0211176352d119e0466719b1df

 

large.203.png.051c6dd664ee76b6027ffd33ee

ملحوظه لو كان Frame1   يوجد به عناصر تحكم وليكن به comboBox1 وقمت بنسخ Frame1   لعمل فريم اخر منه 

 ستجد  داخل الفريم الجديد Frame2  بداخله comboBox2 وله نفس خصائص comboBox1 

الخلاصه انه عند نسخ فريم يتم نسخه مع ما يحتويه من عناصر تحكم ايضا  ويكون الفريم الجديد وما يحتويه من عناصر له نفس الخصائص  اللى موجوده بالفريم الاول

****************************************************************************************

الى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد

ان شاء الله هيكون عن كيفية اضافه عناصر تحكم داخل الـ  Frame  اثناء عملية التصميم

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff::fff:

 

 

تم تعديل بواسطه الصـقر
  • Like 6
قام بنشر (معدل)

ثانيا:-كيفية اضافه عناصر تحكم داخل الـ Frame اثناء عملية التصميم 

لأضافه عناصر تحكم داخل الـ  Frame   يوجد طريقتين

الطريقه الاولى :-

شاهد الصوره

large.204.png.7c19da8798f198ab9779cf7a51

 

الطريقه الثانيه :-

لو حضرتك قمت بتصميم عناصر على الفورم مثل الصوره دى  

large.205.png.e81280966c3328a2ac83670652

 

ثم فكرة انك تجعلهم داخل فريم بعد ما صممت العناصر وظبت التنسيقات وكل شئ 

فما الحل ؟؟؟ شاهد الصور التاليه

 

large.206.png.52eed007786e6210fd883f3df8medium.207.png.a52f484c02fb1616b1bc4431d

large.208.png.220b5a58eecef2670a67627ed3

بعد ما تضغط على Paste ستجد العناصر داخل الفريم بنفس التنسيق شاهد الصوره التاليه

 

large.209.png.2004800c85e751305507db967f

 

وبكدا عرفنا اننا نقدر نضيف اى عنصر او عناصر تحكم داخل الفريم أما بأنشائها لاول مره او اننا بننسخها من الفورم 

 ملحوظه مهمه جدا  تقدر تنسخ بنفس الطريقه من فورم اخر وتعمل لصق على فورم جديد مفيش مشكله واحد هيقولى وايه الفايده لما تنسخ مثلا كمبوبوكس من فورم انت مصممه قبل كدا وتعمله لصق فى فورم جديد لانه بيوفر عليك الوقت والجهد من تظبيط التنسيقات للكمبوبوكس  وبيتم لصقه بنفس الخصائص

****************************************************************************************

الى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد

ان شاء الله هيكون عن   التعرف على خصائص Frame من شاشة الخصائص اثناء عملية التصميم

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff:

 

تم تعديل بواسطه الصـقر
  • Like 7
قام بنشر (معدل)

ثالثا :- التعرف على خصائص الــ  Frame من شاشة الخصائص اثناء عملية التصميم

لمشاهدة خصائص الــ Frame  شاهد الصوره التاليه

                                       large.210.png.3381967caad3729051330e1d4a

وهذه صوره مكبره لخصائص الفريم

                                     large.211.png.3f3008f24583514952842ce299

 

 

هنمسك اهم الخصائص والاكثر شيوعا فى الاستخدام ونبدا نشرح بالتفصيل

 الخاصيه (Name) :-

Name  هو اسم الـ  Frame المستخدم فى الاكواد 

وعند انشاء اى Frameيقوم الفيجوال بيسك بأعطاء اسم افتراضى  له Frame1واذا قمنا بعمل Frame ثانى فأن الفيجوال بيسك يعطى له اسم افتراضى Frame2

وانا افضل عدم تغيير اسماء Frameالافتراضيه التى عرفها الفيجوال بيسك 

فعندما نريد كتابه كود خاص بالعنصر Frame  فيجب علينا الالتزام بالاسم الموجود فى الخاصيه Name

---------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Back Color):-

هذه الخاصيه تتيح للمستخدم تغيير لون خلفية الـ Frame  

على اليسار يوجد سهم اضغط عليه ستظهر لك قائمة يمكنك من خلالها اختيار اللون المناسب كما يحلو لك 

لا نحتاج الى ارفاق صوره للتوضيح لانه نفس الشرح اللى عملناه قبل كدا فى شرح الليبل والتكس بوكس والكمبوبوكس 

---------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Border Color):-

هذه الخاصيه تتيح للمستخدم تغيير لون حدود الـ Frame  

على اليسار يوجد سهم اضغط عليه ستظهر لك قائمة يمكنك من خلالها اختيار اللون المناسب كما يحلو لك 

---------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Caption ):-

هذه الخاصيه تتيح للمستخدم كتابة عنوان للـــ Frame  

large.212.png.a7cf3c3a3f99825ca824a7d7fb

---------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Enabled ):-

هذه الخاصيه تحمل خيارين true و False 

عند اختيارك true  سوف يكون الــ Frame  والعناصر بداخله متاحه امام المستخدم عند عمل الفورم وهو الاختيار الافتراضى للفيجوال     

عند اختيارك False سوف يكون الــ Frame  والعناصر بداخله غير متاحه امام المستخدم عند عمل الفورم يعنى هيكون محمى

---------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Font ):-

هذه الخاصيه تتيح للمستخدم تغيير نوع وحجم وسماكة الخط لعنوان الـ Frame  ( الذى يتم كتابته بالخاصيه Caption )

على اليسار يوجد سهم اضغط عليه ستظهر لك قائمة يمكنك من خلالها اختيار نوع وحجم وسماكة الخط  كما يحلو لك

 ---------------------------------------------------------------------------------------------------------------------------

الخاصيه ( ForeColor ):-

هذه الخاصيه تتيح للمستخدم لون الخط لعنوان الـ Frame  ( الذى يتم كتابته بالخاصيه Caption )

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Height ):-

هذه الخاصيه تتيح للمستخدم التحكم فى ارتفاع  الـ Frame  

فيمكنك أما من خلال التصميم السحب بالماوس للاسفل لتحديد الارتفاع للـ Frameأو كتابة رقم للارتفاع فى الخاصيه Height

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Left ):-

هذه الخاصيه تتيح للمستخدم التحكم فى بعد   الـ Frame عن الضلع الايسر من الفورم

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Top ):-

هذه الخاصيه تتيح للمستخدم التحكم فى بعد   الـ Frame عن الضلع الاعلى من الفورم

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Width ):-

هذه الخاصيه تتيح للمستخدم التحكم فى عرض الـ Frame  

فيمكنك أما من خلال التصميم السحب بالماوس يميناً أو يساراً لتحديد عرض الـ Frameأو كتابة رقم للعرض فى الخاصيه Width 

------------------------------------------------------------------------------------------------------------------------

الخاصيه (  Visible ):-

وهذه الخاصيه تتيح للمستخدم التحكم فى ظهور او عدم ظهور الــ Frame  عند عرض الفورم 

وعند الضغط على السهم المجاور لها ستجد لها خيارين True  و  False

عندد اختيار True سوف يظهر الـ Frame  على الفورم عند فتحه ( وهذا هو الخيار الافتراضى من الفيجوال بيسك )

وعند اختيار False ٍسوف يختفى الـ Frame  على الفورم عند فتحه يعنى هيكون غير ظاهر ومخفى لا يراه المستخدم

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( ٍِSpecial Effect ):-

هذه الخاصيه للـ Frame  تعطى اشكال مبهره ومميزه للـ Frame  

على اليسار ستجد سهم اضغط عليه ستظهر لك قائمة وبها خمس خيارات  جرب الخيارات ثم اختر الشكل المناسب لذوقك

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( ٍِScrollBars ):-

هذه الخاصيه من أهم الخصائص للـ Frame

 لانها تتيح للمستخدم عمل سكرول بار رأسى أو أفقى أو رأسى وأفقى أو بدون سكرول بار نهائيا

شاهد الصوره التاليه

large.213.png.93734238473cefc9997269b87f

الاختيار الاول : - fmScrollBarsNone  وهو الاختيار الافتراضى للفيجوال وهو جعل الـ  Frame بدون سكرول بار لا رأسى ولا أوفقى

الاختيار الثانى:- fmScrollBarsHorizontal  وهو جعل الـ  Frame  باسكرول بار افقى

الاختيار الثالث:- fmScrollBarsVertical  وهو جعل الـ  Frame  باسكرول بار راسى

الاختيار الرابع:- fmScrollBarsBoth  وهو جعل الـ  Frame  باسكرول بار رأسى و أفقى  ( الاتنين معا )

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( ٍِScrollHeight ):-

عند اختيارك من الخاصيه  ScrollBars  الاختيار الثالث fmScrollBarsVertical أو الاختيار الرابع fmScrollBarsBoth

فيجب تحديد ارتفاع الاسكرول بار بكتابة رقم فى الخاصيه ScrollHeight

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( ٍِScrollWidth ):-

عند اختيارك من الخاصيه  ScrollBars  الاختيار الثانى  fmScrollBarsVertical أو الاختيار الرابع fmScrollBarsBoth

فيجب تحديد عرض الاسكرول بار بكتابة رقم فى الخاصيه ScrollWidth

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( ٍِScrollLeft ):-

هذه الخاصيه مرتبطه بالخاصيه ScrollWidth

تتيح لنا تحديد كم يبعد الاسكرول بار الافقى عن عن الضلع الايسر للفريم عند فتح الفورم

------------------------------------------------------------------------------------------------------------------------

الخاصيه ( ٍِScrollTop ):-

هذه الخاصيه مرتبطه بالخاصيه ScrollHeight

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

------------------------------------------------------------------------------------------------------------------------

طبعا انا عارف ان الخاصيه ScrollWidth  &  ScrollLeft  &  ScrollHeight & ScrollTop

غير واضحه لكم لذالك هنقوم بشرح مثال عملى حتى تتضح لنا الصوره كامله عن هذه الخصائص فى عمل اسكرول بار والتحكم فيه

مثال 1 :- عمل اسكرول بار رأسى والتحكم فى شريط التمرير

large.209.png.2004800c85e751305507db967f

فى هذه الصوره نريد عما اسكرول بار رأسى للفريم 

شاهد اول خطوه 

                  large.213.png.f5a859be7887702ba3cb17ce65

 

لماذا لم يظهر شريط التمريرداخل الاسكرول بار ؟؟؟؟؟

سامع ياسر العربى بيرد عليا وبيقول لان الخاصيه ScrollHeight = 0 

هقوله برافوووووووووو  :clapping: طيب يالا نكتب رقم ارتفاع الاسكرول بار وليكن 100 

الترجمه الحرفيه لكلمة ScrollHeight تعنى ارتفاع شريط التمرير

شاهد الصوره بعد ما نكتب رقم ارتفاع الاسكرول ارتفاعه =100

large.214.png.74dc244477a07a9814561d6f76

:biggrin: للاسف يا عم ياسر كتبنا ارتفاعه 100 ومازال لا يوجد شريط تمرير ترى ما السبب ؟؟ 

رد عليا الاخ عبدالعزيز البسكرى قاعد صاحى معانا ومركز

وقال لان ارتفاع الفريم فى الخاصيه Height  = 270 وارتفاع شريط التمرير 100 

برافووووو :clapping:

فأرتفاع الفريم اكبر من ارتفاع شريط التمرير لذالك لا يظهر 

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

فتعالو نكتب ارتفاع شريط التمرير وليكن 270 ونشوف ايه اللى هيحصل

شاهد الصوره

large.215.png.c4e7e50227c7cace42b11fcd27

شاهد الصوره ارتفاع الفريم يساوى ارتفاع شريط التمرير = 270 لذالك ظهر شريط التمرير

لكن لما تيجى تحركه مفيش مساحه مساحه هيتحرك فيها 

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

طيب تعالو نكتب ارتفاع شريط التمرير وليكن 300 ونشوف ايه اللى هيحصل

شاهد الصوره

large.216.png.702851dec3d3ba3a7f0a3897fd

 

طيب كدا عرفنا ازاى نعمل اسكرول بار راسى من الخاصيه ScrollBars وذالك من خلال اختيار fmScrollBarsVertical

وعرفنا ايضا ازاى نتحكم فى ارتفاع الشريط من الخاصيه ScrollHeight

عايزين نعرف ازاى نتحكم فى موضوع الشريط عند فتح الفورم يعنى فين تكون بدايته 

هنا تاتى اهمية الخاصيه ScrollTop  

تعالو نشوف الصوره دى 

large.217.png.e9cc11ee9971ceb28c892ddffe

 

large.219.png.0351de8036d4eba7059550840e

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

----------------------------------------------------------------------------------------------------------------

مثال 2 :- عمل اسكرول بار أفقى والتحكم فى شريط التمرير

فى هذه الصوره نريد عما اسكرول بار رأسى للفريم 

large.209.png.2004800c85e751305507db967f

شاهد اول خطوه

large.220.png.59d8a3ce4b9e941bc87bff3640

لماذا لم يظهر شريط التمريرداخل الاسكرول بار ؟؟؟؟؟

سامع ابويوسف بيرد عليا وبيقول لان الخاصيه ScrollWidth = 0 

هقوله برافوووووووووو  :clapping: طيب يالا نكتب رقم ارتفاع الاسكرول بار وليكن 200 

الترجمه الحرفيه لكلمة ScrollWidth تعنى عرض شريط التمرير

شاهد الصوره بعد ما نكتب رقم العرض للاسكرول  عرضه  = 200

large.221.png.40989edd78e334270673ba336b

للاسف يا ابويوسف  كتبنا عرض 200 ومازال لا يوجد شريط تمرير ترى ما السبب ؟؟ 

رد عليا الاخ ابوالبراء  قاعد صاحى معانا ومركز

وقال لان عرض الفريم فى الخاصيه Width = 360  وعرض شريط التمرير 200

برافووووو :clapping:

فعرض الفريم اكبر من عرض شريط التمرير لذالك لا يظهر 

الفايده من شريط التمرير الوصول الى المساحه اللى اكبر من عرض الفريم نفسة لانها غير ظاهره

فتعالو نكتب عرض شريط التمرير وليكن 360 ونشوف ايه اللى هيحصل

شاهد الصوره

large.222.png.70cb6c94a839a943d9b20b55c7

شاهد الصوره عرض الفريم يساوى عرض شريط التمرير = 360 لذالك ظهر شريط التمرير

لكن لما تيجى تحركه مفيش مساحه مساحه هيتحرك فيها 

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

طيب تعالو نكتب عرض شريط التمرير وليكن 450 ونشوف ايه اللى هيحصل

شاهد الصوره

large.223.png.10782ac728ba0de0cc6f7c7c6d

طيب كدا عرفنا ازاى نعمل اسكرول بار افقى من الخاصيه ScrollBars وذالك من خلال اختيار fmScrollBarsHorizontal

وعرفنا ايضا ازاى نتحكم فى ارتفاع الشريط من الخاصيه ScrollWidth

عايزين نعرف ازاى نتحكم فى موضوع الشريط عند فتح الفورم يعنى فين تكون بدايته 

هنا تاتى اهمية الخاصيه ScrollLeft  

تعالو نشوف الصوره دى 

large.224.png.2edf39301817b610200f39c2f8

 

large.225.png.7bbedf0e4e48a6a797da8caab6

كدا انتهينا من المثال الثانى وعرفنا ازاى نعمل اسكرول بار افقى ونتحكم فى عرض شريط التمرير وكمان نتحكم فى بداية الشريط عند فتح الفورم

----------------------------------------------------------------------------------------------------------------

محلوظه مهمه جدا : 

انا شرحت على الصوره التاليه  وهى كما نرى لا تحتاج عمل اسكرول بار لان كافه العناصر اللى بالفريم ظاهره وعرض الفريم مناسب لها

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

large.209.png.2004800c85e751305507db967f

****************************************************************************************

الى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد

ان شاء الله هيكون عن   التعامل مع خصائص الــ  Frame  فى لغة البرمجه

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff:

 

تم تعديل بواسطه الصـقر
  • Like 10
قام بنشر (معدل)

رابعاً :- التعامل مع خصائص الــ  Frame فى لغة البرمجه

 فى الدرس السابق عرفنا ازاى نتحكم فى خصائص الــ Frame  اثناء مرحلة التصميم 

واليوم بأذن الله هنعرف ازاى نتعامل مع الخصائص فى الاكواد

لكتابة اى كود خاص بأى عنصر تحكم فى الفورم يكون على الشكل التالى شاهد الصوره

large.230.png.11f1561ba3e78ad2e19bfaa382

شوف الصوره دى هنعرف ازاى نكتب الكود وازاى الفيجوال بيسك بيقدم لنا مساعده

large.231.png.ad1bf7c8572ba5bdedf0732cda

large.232.png.a77966e053acd1ca0d677398b9

 

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

كدا عرفنا بشكل عام ازاى نكتب سطر الكود

ناخد بعض الامثله 

الخاصيه ( Caption ):-

Frame1.Caption = "سند قبض"

نلاحظ هنا اننا كتبنا سند قبض بين علامتى تنصيص " "  

-----------------------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Enabled ):-

هذه الخاصيه تحمل خيارين true و False

لو عايز الفريم يكون متاح للعمل امام المستخدم

Frame1.Enabled = True

ولو عايز الفريم يكون غير متاح للعمل امام المستخدم

Frame1.Enabled = False

-------------------------------------------------------------------------------------------------------------------------------------------------------

الخاصيه ( Font ):-

هذه الخاصيه تتيح للمستخدم تغيير نوع وحجم وسماكة الخط لعنوان الـ Frame  ( الذى يتم كتابته بالخاصيه Caption )

لتحديد نوع الخط بالكود وليكن يكون tahoma 

Frame1.Font = tahoma

لتحديد سماكة الخط بالكود ( true لجعل الخط سميك ) ( False  لجعل الخط عادى غير سميك )

Frame1.Font.Bold = True

لاحظ اننا بعد كلمة font وضعنا . ثم Bold  لتحديد نوع السماكه

لتحديد حجم الخط بالكود وليكن 20

Frame1.Font.Size = 20

لاحظ اننا بعد كلمة font وضعنا . ثم Size   لتحديد حجم الخط ثم كتبنا = 20 

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

وعايزك انت تجرب بنفسك باقى الخصائص بنفسك ولو صادفك اى مشكله لا تتردد انك تراسلنى

----------------------------------------------------------------------------------------------------------

شوف الكود بشكله النهائى

Private Sub UserForm_Initialize()
Frame1.BackColor = 15849925
Frame1.Caption = "ÓäÏ ÞÈÖ"
Frame1.Enabled = True
Frame1.Font = tahoma
Frame1.Font.Size = 20
End Sub

يمكن ايضا كتابة الكود بشكل ابسط نعم يوجد طريقه اخرى

من خلال استخدام With وطبعا لازم نقفل With بـ End with

ويكون بداية سطر الكود هو . ثم اسم الخاصيه ثم = ثم نوع أو قيمة النتيجة

شاهد الكود كالتالى

 

Private Sub UserForm_Initialize()
With Frame1
.BackColor = 15849925
.Caption = "ÓäÏ ÞÈÖ"
.Enabled = True
.Font = tahoma
.Font.Size = 20
End With
End Sub

 

****************************************************************************************

الى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد

ان شاء الله هيكون عن كيفية اضافة عناصر تحكم للفريم اثناء عمل الفورم وهو نشط وايضا التحكم فى الاسكرول بار 

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff::fff:

 

 

 

تم تعديل بواسطه الصـقر
  • Like 6
قام بنشر (معدل)

خامساً :- كيفية اضافه عناصر تحكم داخل الــ  Frame مع التحكم فى الاسكرول بار

وذالك عند فتح الفورم او اثناء العمل على الفورم وهو نشط

العنوان يبدو انه غريب شوية ومعقد انا بس محتاج من حضرتك تشرب كوباية شاى وتفتح زهنك معايا لان ده شغل محترفين والحمد لله احنا مشينا مشوار طويل فلازم يكون عندك ثقه بنفسك وتقتحم الصعاب وميهمكش طالما انت فى جامعه اوفيسنا

بص يا سيدى العنوان ده بختصار ماذا يعنى ؟

طبعا احنا عارفين ان علشان اصمم عنصر تحكم لازم يكون من شاشة التصميم لكن انت عمرك فكرة او خطر ببالك انك تخلق أو تنشئ عنصر تحكم وانت شغال على الفورم مش فى مرحلة التصميم !!!!!!

طبعا انتو عارفين انى اناعملى وعلشان افهم لازم اعمل مثال عملى فبالمثال يتضح لنا المقال

شوف الصوره دى وخليك معايا اوعى تغمض عنيك

large.235.png.7ce68e3e5c8ecb378fef3a36cf

 

هو ده موضوعنا اليوم ازاى نصمم اى عنصر تحكم اثناء فتح الفورم بكود فى حدث فتح الفورم او اثناء عمل الفورم

تعالو على سبيل المثال نعمل كود فى حدث فتح الفورم Initialize 

 

large.237.png.30c4bf5b4a647ebaaaf7f70580

 

 

كدا انا عملت سطر الاعلان عن المتغير وقمت بتسميته Label ( وممكن تسميه اى اسم كيفما شئت ولكن كما قلت افضل تسميته طبقا لاسم عنصر التحكم ) وقلت ان نوع المتغير من  النوع MSForms.Label 

وعايز احول المتغير ده الى كائن بحيث اعرفه واقدر اتعامل معاه فأستخدمت set وهذه الكلمة هى لتحويل  المتغير الى كائن 

القاعده الخاصه بـ Set  هى                                      الكائن = المتغير   set

                                                                       الكائن  = Set  Label  

ما هو الكائن ؟؟؟ هو عنصر تحكم هيتم اضافته على الفورم   Controls.Add ( تعنى اضافه عنصر )

القاعدة العامه للـ  Controls.Add هى 

                                                         (Controls.Add(ProgID, Name ,Visible

                                             الجزء الثالث , الجزء الثانى , الجزء الاول

 

الجزء الاول :- ProgID  يكون اجبارى الادخال وهو يكون احدى عناصر الفورم كالتالى

 

large.238.png.5d5de79f7fd9fd2566e588f203

 

الجزء الثانى :-Name 

هو اسم العنصر اللى هيتم استخدامه فى كتابة الاكواد وهو يقوم بدور الخاصيه Name فى شاشة الخصائص 

ويكون تعبئة اختياريا ولكن يفضل كتابتة اذا كنت تريد التعامل مع هذا العنصر فيما بعد 

 

الجزء الثالث:-Visible

ويكون تعبئة اختياريا وهو يحمل خيارين أما True  أو  False  ويفضل عدم استخدامه ليه  يا عمنا ؟ لان طالما فكرت تنشأ عنصر تحكم اثناء عملك على الفورم اذا انت اكيد عايز تظهره للمستخدم مش انك هتخفية !

 

اذن لما نيجى نحول المتغير الى كائن لنستطيع التعامل معه هنستخدم قاعدة Set

وهيكون كالتالى

Set label = Controls.Add("forms.label.1", "label")

هنا فى قاعدة Controls.Add 

قمت بتعبئة الجزء الاول ProgID وهو "forms.label.1" وتم وضعه بين علمتى تنصيص 

والجزء الثانى Name  هو "label" وتم وضعه بين علامتى تنصيص وهو هيكون اسم العنصر فى كتابة الاكود

الجزء الثالث Visible كما قلت انه اختيارى فلم اقم بتعبئته لذالك سيقوم الفيجوال بيسك باستخدام True بشكل افتراضى

كدا وصلنا بالكود الى الان كالتالى

Private Sub UserForm_Initialize()

Dim label As MSForms.label
Set label = Controls.Add("forms.label.1", "label")

End Sub

طيب انا كدا قمت بتصميم العنصر Label وعايز اعمل له خصائص 

على سبيل المثال

اسم الليبل يكون " الصقر "

يبعد عن الضلع الايسر للفورم بمقدار 100

عرضه يكون 120

يبعد عن الضلع الاعلى للفورم بمقدار 50

الخلفيه تكون حمراء

محازة النص يكون بالمنتصف

حجم الخط 20

سماكة الخط عريض

التاثير يكون بارز

طبعا الكلام ده شرحناه فى دروس الليبل وهيكون كالتالى فى الكود

Private Sub UserForm_Initialize()
Dim label As MSForms.label
Set label = Controls.Add("forms.label.1", "label")
With label
.Caption = "ÇáÕÞÑ"
.Left = 100
.Width = 120
.Top = 50
.BackColor = &HFF&
.TextAlign = fmTextAlignCenter
.Font = 20
.Font.Bold = True
.SpecialEffect = fmSpecialEffectRaised
End With

End Sub

                                         

      شاهد الصوره عند تشغيل الفورم    

      large.246.png.c6e9efc8888ecea92c8f777444

عايزك تجرب تنشئ عنصر تحكم او عناصر تحكم غير الليبل لازم تجرب بنفسك يا عبدالتواب 

ناخد مثال اخر مثلا الكمبوبوكس

شاهد الكود كالتالى ولاحظ الفرق بنفسك

Private Sub UserForm_Initialize()
Dim Combobox As MSForms.Combobox
Set Combobox = Controls.Add("forms.Combobox.1", "Combobox")
With Combobox
.Left = 100
.Width = 120
.Top = 50
.BackColor = &HFF&
.TextAlign = fmTextAlignCenter
.Font = 20
.Font.Bold = True
.SpecialEffect = fmSpecialEffectRaised
.RowSource = "A2:A10"
End With
End Sub

شاهد الصوره عند فتح الفورم

large.247.png.19e380564dffecf892898adc4b

 

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

للدرس بقية انتظرونا 

تم تعديل بواسطه الصـقر
  • Like 9
قام بنشر

بعد المقدمه الحلوه فى الدرس السابق اليوم

نقدر نتكلم عن الدرس بتاعنا

وهو كيفية اضافه عناصر تحكم داخل الــ  Frame  عند فتح الفورم أو أثناء عمل الفورم وهو نشط

مثال رقم 1 :-

نشاهد الصوره التاليه 

large.249.png.b5255ae04ada5be7ffd0aedc8d

 

ده فورم فى مرحلة التصميم وصممت عليه Frame وكما تلاحظون ان اسمه فى الخاصيه Name  وهو  Frame1  وهو الاسم اللى هنستخدمه فى كتابة الاكواد

انا عايز اعرف ازاى اضيف عناصر تحكم اثناء فتح الفورم 

على سبيل المثال عايز اعمل كود فى حدث فتح الفورم لكى يظهر الفورم عند الفتح كالتالى شاهد الصوره

large.250.png.86dd857afc2765bd7ebd415458

طيب ايه هو الكود اللى انا عايز اكتبه فى حدث فتح الفورم ؟ حتى يكون الفورم عند الفتح بهذا الشكل

عايز اكتب كود اضيف فيه Label واضيف فيه TextBox  واضيف فيه ComboBox 

طيب ازاى نعمل ده ؟ تعالو نبدأ بأضافه ComboBox 

شاهد الكود ونشرحه

Private Sub UserForm_Initialize()

  With Me.Frame1.Controls.Add("Forms.Combobox.1", "Combobox1")
  .Left = 20
  .Top = 5
  .Height = 40
  .Width = 150
  .BackColor = &HFFFFC0
  .TextAlign = fmTextAlignCenter
  .FontSize = 20
  .Font.Bold = True
  Dim a As Variant
  a = Array("ناجح", "راسب")
  .List = a
   End With

End Sub

الكود بكل بساطه يكمن فى السطر الاول 

استخدمنا With علشان اعرف الكود انى انا هتعامل مع الـ Frame1 

فكتبت With Me.Frame1

طيب انا عايز ايه من الــ Frame1  عايز اضيف عنصر وهو ComboBox  بداخله لذالك استخدمت Controls.Add

طيب Controls.Add دى لها قاعدة ثابته اتكلمنا عنها قبل كدا 

 (Controls.Add(       ProgID         ,    Name    ,Visible

 (                  "Controls.Add("Forms.Combobox.1"  , "Combobox1

هنا Visible تكون التعبئة اختياريا وهى تحمل خيارين أما True  أو  False  ويفضل عدم استخدامه ليه  يا عمنا ؟ لان طالما فكرت تنشأ عنصر تحكم اثناء عملك على الفورم اذا انت اكيد عايز تظهره للمستخدم مش انك هتخفية !

بعد كدا عملت خصائص للكمبوبوكس الجديد اللى تم انشائه

1- الخاصيه Left ( وهى تعنى بعد هذا العنصر من الضلع الايسر للفريم بمقدار كذا )

انا قلت انه يبعد عن الضلع الايسر بمقدار 20        Left = 20. 

 

2- الخاصيه Top ( وهى تعنى بعد هذا العنصر من الضلع الاعلى للفريم بمقدار كذا )

انا قلت انه يبعد عن الضلع الايسر بمقدار 10         Top= 10. 

 

3- الخاصيه Height ( وهى تعنى كم يكون ارتفاع العنصر  )

انا قلت ان ارتفاع العنصر  40         Height= 40. 

 

4- الخاصيه Width ( وهى تعنى كم يكون عرض العنصر  )

انا قلت ان عرضه العنصر  150         Width = 150. 

 

5- الخاصيه BackColor( وهى خاصه بتحديد خلفية للعنصر)  BackColor = &HFFFFC0.

 

6- الخاصيه TextAlign( وهى خاصه بتحديد المحاذاه للعنصر)  TextAlign = fmTextAlignCenter.

 

7- الخاصيه Fontsize( وهى خاصه بتحديد حجم الخط للعنصر)  FontSize = 20.

 

8- الخاصيه Font.Bold( وهى خاصه بتحديد سماكة الخط للعنصر)  Font.Bold = True.

 

9- الخاصيه List( وهى خاصه بتعبئة الكمبوبوكس من خلال المصفوفه كما تلعمنا من قبل)

طبعا ممكن تضيف خصائص اخرى للكمبوبوكس او تحذف خصائص من الامثله اللى ذكرناها كله حسب رئيتك انت

وطبعا طالما فتحنا With  أذن لازم نغلقها  بــ EndWith

-----------------------------------------------------------------------------------------------

بعد كدا عايز اضيف TextBox  

  With Me.Frame1.Controls.Add("Forms.TextBox.1", "TextBox1")
      .Left = 180
      .Top = 5
      .Height = 40
      .Width = 150
      .TextAlign = 2
      .FontSize = 20
      .Font.Bold = True
      .BackColor = &HC0FFFF
   End With

وطبعا الكود مش محتاج شرح لانه مفيش فى جديد ولكن هو عايز مهندس معمارى او شغال فى المساحه ليه ؟؟

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

كم يبعد التكست بوكس عن الضلع الايسر للفريم ؟؟؟؟ 

بكل بساطه انا فى الكمبوبوكس قلت يبعد 20 ثم عملت عرض الكمبوبوكس 150 اذن مجموعهم يساوى 170 يعنى المساحه بدأ من 0للضلع الايسر للفريم وحتى 170 مستغله أذن لازم يكون بعد التكست بوكس عن الضلع الايسر للفريم بمقدار اكبر من 170 

فأنا عملت Left =180 ليكون هناك فاصل مقداره 10 بين نهاية الكمبوبوكس وبداية التكست بوكس 

الخاصيه Top  اللى هى بعد التكست عن الضلع الاعلى للفريم خليتها=5 زى بالظبط الكمبوبوكس نفس البعد حتى يكون هناك تنسيق جمالى

وكذالك الخاصيه Height ارتفاع التكست بوكس = 40 زى بالظبط ارتفاع الكمبوبوكس 

أما العرض Width  جعلته 150 ( وتقدر تكبره او تصغره براحتك )

وباقى الخصائص معروفه ولا يوجد فيها شئ جديد

-----------------------------------------------------------------------------------------------------

بعد كدا عايز اضيف Label

  With Me.Frame1.Controls.Add("Forms.Label.1", "Label1")
      .Left = 340
      .Top = 5
      .Height = 40
      .Width = 150
      .SpecialEffect = fmSpecialEffectEtched
      .TextAlign = 2
      .FontSize = 24
      .Font.Bold = True
      .BackColor = 8454016
      .Caption = "الصقر"
   End With

 

 

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

كم يبعد الليبل عن الضلع الايسر للفريم ؟؟؟ 

بكل بساطه انا عملت التكست بوكس يبعد عن الضلع الايسر بمقدار 180 وعملت عرضه 150 اذن 180+150=330 

فأنا عملت Left =340 ليكون هناك فاصل مقداره 10 بين نهاية التكست بوكس وبين بداية الليبل

الخاصيه Top  اللى هى بعد الليبل عن الضلع الاعلى للفريم وجعلته = 5 نفس الكمبوبوكس والتكست بوكس لكى يكون هناك شكل منسق وجمالى

وكذالك الخاصيه Height ارتفاع اليبل = 40 زى بالظبط ارتفاع الكمبوبوكس والتكست بوكس

أما العرض Width  جعلته 150 ( وتقدر تكبره او تصغره براحتك )

وباقى الخصائص معروفه ولا يوجد فيها شئ جديد

شاهد الكود بشكله النهائى

Private Sub UserForm_Initialize()

  With Me.Frame1.Controls.Add("Forms.Combobox.1", "Combobox1")
  .Left = 20
  .Top = 5
  .Height = 40
  .Width = 150
  .BackColor = &HFFFFC0
  .TextAlign = fmTextAlignCenter
  .FontSize = 20
  .Font.Bold = True
   Dim a As Variant
   a = Array("ناجح", "راسب")
  .List = a
   End With


  With Me.Frame1.Controls.Add("Forms.TextBox.1", "TextBox1")
      .Left = 180
      .Top = 5
      .Height = 40
      .Width = 150
      .TextAlign = 2
      .FontSize = 20
      .Font.Bold = True
      .BackColor = &HC0FFFF
   End With
   
  With Me.Frame1.Controls.Add("Forms.Label.1", "Label1")
      .Left = 340
      .Top = 5
      .Height = 40
      .Width = 150
      .SpecialEffect = fmSpecialEffectEtched
      .TextAlign = 2
      .FontSize = 24
      .Font.Bold = True
      .BackColor = 8454016
      .Caption = "الصقر"
   End With


End Sub

وعند تشغيل الفورم ستجد الفورم كما هو بالصوره       

large.251.png.9da6fce23d1f0e2cf08a50ddea

 

----------------------------------------------------------------------------------------------------------------------

مثال رقم 2 :-

لو انا عايز اعمل عدد 10 لليبل وعدد 10 تكست بوكس وعدد 10 كمبوبوكس داخل الفريم واتحكم فى الاسكرول بار شاهد الصوره التاليه

large.252.png.9ee5ed73d2992e6dc1ae1dbcfd

أول خطوه لازم افعل خاصيه الاسكرول بار الرأسى للفريم من شاشة الخصائص فى مرحله 

large.253.png.94757797774fea16f59c550a24

 

الخطوه الثانيه

هكتب كود فى حدث فتح الفورم

واستخدم الحلقه التكراريه For Next

Private Sub UserForm_Initialize()

Dim Top As Integer
Dim i As Integer

Top = 5
For i = 1 To 10

هنا مكان كتابة الكود السابق

   Top = Top + 40

Next
Me.Frame1.ScrollHeight = Top

End Sub

 

فى أول الكود عملت تعريف لعدد 2 متغير  Top &  i 

ثم كتبت ان الـ Top  قيمتها = 5  لماذا تساوى 5 ؟؟ (أولا ممكن تكتب اى رقم كما يحلو لك) وهو قيمة الفرق بين الضلع الاعلى للفريم والصف الاول من العناصر

لذالك كتبت الــ Top  = 5

ثم عملت حلقه تكراريه وسميتها i  وقلت ان i  تساوى من 1 الى 10

الحلقة لما تشتغل هيكون فى اول لفه له قيمة i  تساوى 1 

ثم ينتقل الى السطر التالى وهو  Top = Top + 40

اذن ناتج المعادله هيكون  Top = 5+ 40

لماذا رقم 40؟رقم 40 هو ارتفاع العناصر ( الليبل والتكست بوكس والكمبوبوكس ) 

يعنى قيمة الــ Top  حتى هذه للحظه بعد أول لفه تساوى 45

 ثم يصل الكود الى Next يعنى التالى ارجع الى الحلقه For  وخلى قيمة i  تساوى 2

ثم ينتقل الى السطر التالى وهو  Top = Top + 40

اذن ناتج المعادله هيكون  Top = 45+40

يعنى قيمة الـ Top  حتى هذه اللحظه تساوى 85 

وهكذا الحلقه بتلف وكل مره قيمة الــ Top بتزيد حتى اخر لفه للحلقه سيكون 405

وبعد انتهاء الحلقه سياتى الكود الى اخر سطر وهو Me.Frame1.ScrollHeight = Top

يعنى ارتفاع الاسكرول بار هو = Top  اللى هو 405

طبعا الخاصيه ScrollHeight  اتكلمنا عليها قبل كدا بالتفصيل وعرفنا ان وظيفتها تحديد ارتفاع الاسكرول بار

طيب تعالو بقى نحط الكود السابق اللى بالمثال الاول مع تعديلات بسيطه جدا شاهد الكود

Private Sub UserForm_Initialize()
Dim Top As Integer
Dim i As Integer

Top = 5
For i = 1 To 10
  With Me.Frame1.Controls.Add("Forms.Combobox.1", "Combobox" & i)
  .Left = 20
  .Top = Top
  .Height = 40
  .Width = 150
  .BackColor = &HFFFFC0
  .TextAlign = fmTextAlignCenter
  .FontSize = 20
  .Font.Bold = True
   Dim a As Variant
   a = Array("ناجح", "راسب")
  .List = a
   End With


  With Me.Frame1.Controls.Add("Forms.TextBox.1", "TextBox" & i)
      .Left = 180
      .Top = Top
      .Height = 40
      .Width = 150
      .TextAlign = 2
      .FontSize = 20
      .Font.Bold = True
      .BackColor = &HC0FFFF
   End With
   
  With Me.Frame1.Controls.Add("Forms.Label.1", "Label" & i)
      .Left = 340
      .Top = Top
      .Height = 40
      .Width = 150
      .SpecialEffect = fmSpecialEffectEtched
      .TextAlign = 2
      .FontSize = 24
      .Font.Bold = True
      .BackColor = 8454016
      .Caption = "الصقر" & i
   End With
   Top = Top + 40

Next
Me.Frame1.ScrollHeight = Top

End Sub

ماذا تم تغييره فى الكود اللى كان بالمثال الاول ؟

1- تغيير هذا السطر فى كل عنصر تحكم

على سبيل المثال الكمبوبوكس

(With Me.Frame1.Controls.Add("Forms.Combobox.1", "Combobox" & i

هنا الخاصيه Name لكل عنصر اسمه ComboBox & i 

فى اللفه الاولى للحلقه التكرارية سيكون قيمة i تساوى 1 اذن الكمبوبوكس فى الصف الاول هيكون الخاصيه Name  اسمه ComboBox1

وفى اللفه التانيه للحلقه التكرارية سيكون قيمة i تساوى 2 اذن الكمبوبوكس فى الصف الثانى هيكون الخاصيه Name  اسمه ComboBox2

وهكذا

وذالك لكى يكون لكل كمبوبوكس اسم مختلف عن الاخر 

ونفس الكلام على الليبل والتكست بوكس

 

2-   Top = Top.

جعلت قيمة الخاصيه Top  ( بعد العنصر عن الضلع الاعلى للفريم ) يساوى Top اللى هو قيمته كل مره بتتغير مع الحلقه التكراريه فى البدايه بيكون قيمته 5

فالعنصر فى الصف الاول هيبعد عن الضلع الاعلى للفريم بمقدار 5 

وفى اللفه التانية للحلقه سيكون الــ Top قيمته  45 اذن العناصر فى الصف الثانى يبعدو عن الضلع الاعلى للفريم بمقدار 45 

وهكذا 

----------------------------------------------------------------------------------------

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

انتظرونا

:fff::fff:تقبلوا تحياتى:fff::fff:

 

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

مثال رقم 3 :-

 

large.249.png.b5255ae04ada5be7ffd0aedc8d

 

فى المثال رقم 2 كان الشرح على نفس الصوره السابقه  فورم فى مرحلة التصميم وصممت عليه Frame

والفريم لا يوجد به اى عناصر تحكم تم تصميمها وكان المثال برقم 2 انى اعمل كود  عند فتح الفورم يكون هناك عدد 10 صفوف من العناصر كل صف به ليبل وتكست بوكس وكمبوبوكس 

المثال بتاعنا اليومعايز اعرف ازاى اضيف عناصر تحكم اثناء فتح الفورم من شيت اكسيل وعدد الصفوف بالشيت غير معروف عددها فى زياده او نقصان

شاهد الصوره هتعرف اكتر المثال بتاعنا

large.251.png.a536d5764ca6355f52b5144d1b

 

 

بكل بساطه نفس الكود اللى بالمثال 2 مع تعديلات فنيه بسيطه جدا

دا كان الكود اللى بالمثال 2

Private Sub UserForm_Initialize()
Dim Top As Integer
Dim i As Integer

Top = 5
For i = 1 To 10
  With Me.Frame1.Controls.Add("Forms.Combobox.1", "Combobox" & i)
  .Left = 20
  .Top = Top
  .Height = 40
  .Width = 150
  .BackColor = &HFFFFC0
  .TextAlign = fmTextAlignCenter
  .FontSize = 20
  .Font.Bold = True
   Dim a As Variant
   a = Array("ناجح", "راسب")
  .List = a
   End With


  With Me.Frame1.Controls.Add("Forms.TextBox.1", "TextBox" & i)
      .Left = 180
      .Top = Top
      .Height = 40
      .Width = 150
      .TextAlign = 2
      .FontSize = 20
      .Font.Bold = True
      .BackColor = &HC0FFFF
   End With
   
  With Me.Frame1.Controls.Add("Forms.Label.1", "Label" & i)
      .Left = 340
      .Top = Top
      .Height = 40
      .Width = 150
      .SpecialEffect = fmSpecialEffectEtched
      .TextAlign = 2
      .FontSize = 24
      .Font.Bold = True
      .BackColor = 8454016
      .Caption = "الصقر" & i
   End With
   Top = Top + 40

Next
Me.Frame1.ScrollHeight = Top

End Sub

 

ايه المطلوب تعديله بالكود لكى يتناسب مع المطلوب بتاعنا رفع الخلايا من الشيت الى الفريم

المثال كان على ان عدد الصفوف 10 لذالك استخدمنا الحلقه For next  كالتالى

For i = 1 To 10

فدلوقتى انا عايز اجيب الخلايا بالشيت رقم 1 النطاق من A2  الى اخر صف هيكون به اخر طالب 

اذن بداية الحلقه هى اول صف بالجدول وهو الخليه A2  ورقم الصف لها هو 2 اذن الحلقه هتبدأ من رقم 2 

الى ؟

الى اخر صف به بيانات فى العمود A اذن لازم احدد اخر صف به بيانات من خلال السطر التالى واحنا شرحناه قبل كدا

lr = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

عملت متغير واسمه Lr وتقدر تسميه اى اسم كيفما شئت وقلت ان المتغير Lr  يساوى كتبت اسم الشيت المراد العمل عليه واستخدمت Cells  لتحديد عدد الخلايا الممتلئه بالبيانات فى العمود 1

كدا انا عرفت الحلقه من اين تبدأ واين تنتهى ( تبدأ من الصف 2 الى اخر صف به بيانات )

For i = 2 To lr

شاهد الكود بعد تعديل الحلقه For

Private Sub UserForm_Initialize()
Dim Top As Integer
Dim i As Integer
lr = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

Top = 5
For i = 2 To lr
  With Me.Frame1.Controls.Add("Forms.Combobox.1", "Combobox" & i)
  .Left = 20
  .Top = Top
  .Height = 40
  .Width = 150
  .BackColor = &HFFFFC0
  .TextAlign = fmTextAlignCenter
  .FontSize = 20
  .Font.Bold = True
   Dim a As Variant
   a = Array("ناجح", "راسب")
  .List = a
  .Text = Sheet1.Cells(i, 3).Text
   End With


  With Me.Frame1.Controls.Add("Forms.TextBox.1", "TextBox" & i)
      .Left = 180
      .Top = Top
      .Height = 40
      .Width = 150
      .TextAlign = 2
      .FontSize = 20
      .Font.Bold = True
      .BackColor = &HC0FFFF
      .Text = Sheet1.Cells(i, 2).Text
   End With
   
  With Me.Frame1.Controls.Add("Forms.Label.1", "Label" & i)
      .Left = 340
      .Top = Top
      .Height = 40
      .Width = 150
      .SpecialEffect = fmSpecialEffectEtched
      .TextAlign = 2
      .FontSize = 24
      .Font.Bold = True
      .BackColor = 8454016
      .Caption = Sheet1.Cells(i, 1).Text
   End With
   Top = Top + 40

Next
Me.Frame1.ScrollHeight = Top
End Sub

اللى مركز معايا هيلاقى

1- تم تعديل بداية ونهاية الحلقه For

2-  فى سطر تم اضافته فى خصائص كل عنصر

فى عنصر الكمبوبوكس تم اضافه السطر التالى

.Text = Sheet1.Cells(i, 3).Text

قيمة الكمبوبوكس هى كتبت اسم الشيت وهو بمثالنا الشيت 1 ثم الخلية المطلوبه

Cells عباره عن  (رقم العمود, رقم الصف)Cells

                       (      Cells(   i         ,    3

i  هنا هى رقم الصف اللى هيتغير كل مره بالحلقه For والعمود هو رقم 3 الخاص بالحاله 

---------------------------------

فى عنصر التكست بوكستم اضافه السطر التالى

.Text = Sheet1.Cells(i, 2).Text

نفس الكمبوبوكس ولكن تم تغيير رقم العمود هو 2 الخاص بالدرجه

----------------------------------

فى عنصر الليبل تم اضافه  السطر التالى

.Caption = Sheet1.Cells(i, 1).Text

نفس الكمبوبوكس والتكست بوكس ولكن تم تغيير رقم العمود هو 1 الخاص باسم الطالب

-----------------------------------------------------------------------------------------------------------------------

ملحوظه اخيره لمن يريد درجة الاحترافيه

فى الكود لما كنا بنعمل خصائص العنصر كان الخاصيه Left & Top Width& Height

لكل عنصر كان بيتم كتابتهم بالشكل التالى كلا منهم على حد فى سطر مختلف على سبيل المثال خصائص التكست بوكس

  With Me.Frame1.Controls.Add("Forms.TextBox.1", "TextBox" & i)
      .Left = 180
      .Top = Top
      .Height = 40
      .Width = 150
      .TextAlign = 2
      .FontSize = 20
      .Font.Bold = True
      .BackColor = &HC0FFFF
      .Text = Sheet1.Cells(i, 2).Text
   End With

ممكن اكتب الاربع خصائص فى سطر واحد من خلال Move

   القاعدة الخاصه بــ  Move 

                                                      Move Left, Top, Width, Height.

ويكون شكل الكود كالتالى بالخصائص

  With Me.Frame1.Controls.Add("Forms.TextBox.1", "TextBox" & i)
      .Move 180, Top, 150, 40
      .TextAlign = 2
      .FontSize = 20
      .Font.Bold = True
      .BackColor = &HC0FFFF
      .Text = Sheet1.Cells(i, 2).Text
   End With

تم استبدال الاربع صفوف بسطر واحد من خلال Move

--------------------------------------------------------------------------------------------------------

جرب الكود بنفسك هتثبت المعلومه اكتر

الى لقاء اخر من حلقات سلسلة علمنى كيف اصطاد

ان شاء الله هيكون عن كيفية التحكم فى العناصر الموجوده داخل الفريم

سوء كانت مصممه اثناء عملية التصميم او تم انشائها بكود  

 انتظرونا

:fff::fff:تقبلوا تحياتى :fff:

تم تعديل بواسطه الصـقر
  • Like 14
زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

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

Important Information