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

حصريا : دورة كاملة في شرح VBA وتطبيقاته في إكسيل


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

تسلم يا حاج هادي ... هي دي الأمثلة وإلا فلا

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

يعني لو شرح وأمثلة يبقى شئ جيد ان شاء الله

وجزاكم الله جميعا الف خير

رابط هذا التعليق
شارك

تسلم يا حاج هادي ... هي دي الأمثلة وإلا فلا

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

يعني لو شرح وأمثلة يبقى شئ جيد ان شاء الله

وجزاكم الله جميعا الف خير

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

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

Sub DOIT()
    Dim SH As String: SH = "Sheet1"
    Dim i, cnt As Integer: cnt = 1
    Dim MyWeek, MyDay
    MyWeek = Array("Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
    Sheets(SH).Range("A1:A7").ClearContents
    For i = 0 To 6
        Sheets(SH).Cells(cnt, "A") = MyWeek(i)
        cnt = cnt + 1
    Next i
End Sub

مرفق ملف

السلام عليكم

Array_01.rar

رابط هذا التعليق
شارك

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

و الله محتاج منك خدمة كتير ضرورية

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

رابط هذا التعليق
شارك

السلام عليكم

و لاهمية موضوع المصفوفات

اود المشاركة بملف Pdf

عباره عن شرح موسع شيئا ما

لاخت من العراق الشقيق

ارجو ان يكون له الفائدة

خالص تحياتي

____array.rar

تم تعديل بواسطه aah_aah2008
  • Thanks 1
رابط هذا التعليق
شارك

أستاذ هادي ماشاء الله عليك والف شكر وجزاك الله ألف خير

الأخ aah شكرا للإضافة الجميلة دي يا جماعة الملف ده فعلا متميز وسهل

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

كل ما الأمثلة تكثر يبقى أحسن للجميع

والله الموفق

رابط هذا التعليق
شارك

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

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

5) المدخلات والمخرجات في VBA بشكل بسيط ...

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

** جمع مدخلات المستخدمين مع (InputBox() ) ...

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

556995983.jpg

والكود التالي يوضح ذلك :

Sub GetName()
Dim MyInput 

MyInput = InputBox("Enter your name")

MsgBox ("Hello ") & MyInput

End Sub
- وظيفة ( InputBox() ) في المثال السابق هي إرجعا البيانات المدخلة من المستخدم كسلسلة بمجرد النقر على زر ( OK ) أو قام المستخدم بالضغط على ( Enter ) في لوحة المفاتيح ، لو قام المستخدم بالضغط على زر ( Cancel ) فإن قيمة السلسلة المتغيرة تصبح صفر ( "" ) ، ولبناء الجملة لعمل InputBox يجب استخدام أقواس تنصيص ، ومن النادر أن تحتاج إلى استخدام [, xpos] [, ypos] [, helpfile, context] ، أنظر إلى مساعد إكسيل للاطلاع على وظائف تلك الكلمات
InputBox(prompt [,title] [,default] [,xpos] [,ypos] [,helpfile, context], type)
** ولقد قمت بنقلها لكم من مساعد إكسيل وهكذا كانت الترجمة ** Prompt == ضرورية String أي سلسلة ، يمثل النص المراد عرضه في مربع الحوار ، وقد يكون النص عبارة عن رقم أو تاريخ أو قيمة منطقية ، وعامة يقوم الإكسيل بداية بتحويل هذه القيمة إلى سلسلة قبل عرضها .. Title == إختياري Variant أي قيمة اختيارية متنوعة ، عنوان مربع الإدخال ، ولو أهمل هذا العنوان فسوف يكون العنوان الافتراضي هو Input . Default == إختياري Variant أي قيمة اختيارية متنوعة ، تقوم بتعيين النص الذي تريده أن يظهر داخل مربع النص في مربع الإدخال ، ولو تم إهماله فسوف يظهر مربع النص ( الإدخال ) فارغا . Left == إختياري Variant أي قيمة اختيارية متنوعة ، تقوم بتعيين مكان مربع الإدخال على الشاشة ، وتمثل القيمة المدخلة ( X ) بعد مربع الإدخال عن أعلى يسار الشاشة بوحدة قياس point . Top == إختياري Variant أي قيمة اختيارية متنوعة ، تقوم بتعيين مكان مربع الإدخال على الشاشة ، وتمثل القيمة المدخلة ( Y ) بعد مربع الإدخال عن أعلى يسار الشاشة بوحدة قياس point . HelpFile == إختياري Variant أي قيمة اختيارية متنوعة ، تمثل اسم ملف المساعدة لمربع الإدخال ، ولو تم عمل ملف مساعدة وإدراجه بالفعل فسوف تظهر أيقونة مساعدة على مربع الإدخال كأحد الخيارات . HelpContextId == إختياري Variant أي قيمة اختيارية متنوعة ، تمثل رقم تعريف جزئي داخل ملف المساعدة . Type == إختياري Variant أي قيمة اختيارية متنوعة ، تمثل نوع إرجاع البيانات ، ولو تم إهمال هذا التعيين ، يرجع مربع الحوار القيمة نصا ، التي تكون واحدة أو مجموعة من القيم التالية :
Type:=0 A formulaصيغة    
Type:=1 A number رقم     
Type:=2 Text (a string)سلسلة نصية    
Type:=4 A logical value (True or False)قيمة منطقية    
Type:=8 A cell reference, as a Range objectالإشارة إلى خلية كنطاق     
Type:=16 An error value, such as #N/Aقيمة خاطئة     
Type:=64 An array of values مصفوفة    
- للنظر إلى مثال آخر عن InputBox ، إرجاع رقم ....
Sub GetAge()
Dim MyInput  As Integer

MyInput = Application.InputBox(Prompt:="How old are you ? " , Title:="ENTER_AGE: ", Type:=1)
MsgBox ("You’re ") & MyInput
End Sub
- كقاعدة عامة ، فإن Prompt , Title يجب أن تكون سلسلة string ويتم وضعها داخل علامات تنصيص ( أقواس مزدوجة ) – ( " " ) ، ويتم عرض العنوان في شريط عنوان مربع الحوار . ** مخرجات المستخدمين مع MsgBox() - باستخدام وظيفة MsgBox() ، فإن مربع رسالة ( كالموجود بالأسفل ) سوف يتم عرضه على المستخدم ، كأن يتم سؤاله أو الاختيار فيما بين ( Yes / No ) .. - وهي أيضا مفيدة أيضا باعتبارها وسيلة في إعلام المستخدم عن نوع مشكلة ما ، وتركيب وظيفة MsgBox() يتم على النحو التالي :
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
912888436.jpg
Msg = MsgBox(“How Are You”, vbOKOnly, “Message”)

- يمكنك أن تلاحظ أنني استخدمت ( Prompt ) كسلسلة نصية ، و vbOKOnly كزر ، والعنوان كان سلسلة نصية أيضا ، لابد من أن تكون Prompt عبارة عن سلسلة نصية وتمثل الرسالة التي تريد المستخدم قراءتها ، وأما معلم الزر يتطلب تعبير رقمي ( رقم صحيح أو ثابت ) ، كما تخبر VBA عن أي الأزرار أو الأيقونات التي سوف تضعها في مربع الحوار .

- إذا تجاهلت تعيين قيمة للزر ( معلم ) فإن VBA سيضع زر ( موافق OK ) افتراضا ، وإليك قائمة بمعالم أزرة مربعات الحوار :

812598397.jpg

- يمكنك اختيار عرض أيقونة معينة ( للتحذير أو معلومة ) أو زر مساعدة ، وإضافة بعض التنسيقات الإضافية على الأزرة المختارة .

- دالة MsgBox() ترجع قيمة صحيحة فيما بين 1-7 ويتوقف ذلك على الزر المختار .

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

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

** بنهاية هذا الجزء **

فإننا تعرفنا على المتغيرات ، أنواع البيانات ، الثوابت ، المصفوفات ( كنوع من البيانات ) والمدخلات والمخرجات ...

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

أسألكم الدعاء

رابط هذا التعليق
شارك

السلام عليكم

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

و ندعوا الله بان يقويك للتكمله و نحن مقصرين و لكن لنا عذرنا

و ان شاء الله سيكون عملك هذا في ميزان حسناتك

بارك الله فيك

خالص تحياتي و تقديري

رابط هذا التعليق
شارك

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

بداية أشكر الأخوة kajwl وعبد الرحمن وahh

نبدأ معاً وبعون الله الجزء الخامس

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

1- مصطلح ( إجراءات فرعية ) للدلالة على (Sub procedures ) ..

2- مصطلح ( إجراءات الحدث أو الأحداث ) للدلالة على ( Event Procedures ) ..

3- مصطلح ( إجراءات الوظائف أو الدوال ) للدلالة على ( Function procedures ) ..

الجزء الخامس : الإجراءات الفرعية ، والأحداث ، وإجراءات الوظائف

VBA Sub, Event and Function Procedures

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

** إنشاء الإجراءات الفرعية ، وإجراءات الأحداث ، وإجراءات الوظائف ..

** طرق تنفيذ هذه الإجراءات ..

** كيفية تنفيذ إجراءات الوظائف ..

1) المقارنة بين الإجراءات الفرعية وإجراءات الحدث وإجراءات الوظائف ..

- الإجراءات التي يتم إنشاءها في كود الـ VBA هي تلك التي يتم كتابتها في VBE ، وأكثر أنواع الإجراءات شيوعا هي تلك الخاصة بـ ( الفرعية ، والأحداث ، والوظائف ) ( Sub , Events , Functions ) .

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

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

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

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

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

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

2) العامة و الخاصة ومجال الإجراءات Private, Public, and Procedure Scope

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

- عام Public ... تجعل ذلك الإجراء مرئيا لجميع الإجراءات الأخرى في موديولات المشروع ( modules ) .

- خاص Private ... يكون هذا الإجراء مرئيا فقط للإجراءات الموجودة في نفس الموديول .

- وإذا لم يتم تحديد نوع الإجراء ( عام أو خاص ) فإنه افتراضيا سيكون عام .

*** الإجراءات الفرعية Sub procedures ***

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

854360413.jpg

- تبدأ كتابة الإجراء الفرعي بالكلمة Sub ، وتنتهي بكلمة (End Sub ) ..

[كود]Sub Hello()

MsgBox “Hello World!”

End Sub[/كود]

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

- ومثل الماكرو الذي قمت بتسجيله في الجزء الثاني مثلا باستخدام ( مسجل الماكرو ) في إكسيل فإنه يكون دائما إجراء فرعي .

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

*** إجراءات الأحداث Event procedures ***

- عندما يحدث شئ في إكسيل فإننا ندعوه حدث ( Event ) ، ودعونا نرى أمثلة على الأحداث في إكسيل ..

1- فتح مصنف أو إغلاقه .

2- تنشيط مصنف .

3- تنشيط ورقة عمل أو عدم تنشيطها .

4- حفظ مصنف .

5- حساب ورقة عمل .

6- عند النقر على زر .

7- الضغط على زر جمع أو القسمة .

8- حساب وقت معين .

9- حدوث خطأ .

- عندما تقوم بإنشاء إجراء حدث ، سيقوم VBA وبشكل تلقائي بتحديده لك ، قم بتنشيط VBE وأنقر مرتين على Sheet1 لتستعرض نافذة الأكواد ، اختر Worksheet ثم اختر حدث Calculate ، لو فعلت ذلك تماما كالمثال بالصورة التالية ، فإن VBA سيقوم بكتابة التعبير Private Sub Worksheet_Calculate() و End Sub تلقائيا .. عندها أضف الكود :

[كود]Private Sub Worksheet_Calculate()

MsgBox "Welcome!"

End Sub[/كود]

494433058.jpg

- عندما يتم تنفيذ هذا الكود سيتم عرض مربع رسالة ( Welcome ) ، وسوف تنفذ عندما يكون هناك عملية حسابية في ( Sheet1 ) أي أن عملية الحساب هي المثير لذاك الحدث .

- وسوف أريك مثالا آخرا مع حدث آخر وهو ( Workbook_Open ) ..

1- افتح مصنف جديد .

2- قم بتنشيط VBE بالضغط على Alt-F11 في آن واحد .

3- انقر مرتان على أيقونة ( ThisWorkbook ) كما بالصورة أعلاه .

سيقوم VBE بعرض نافذة أكواد فارغة للكائن ThisWorkbook .

4- في نافذة الأكواد على يمين الشاشة اختر ( Workbook ) من قائمة الكائنات المنسدلة على اليسار .

سيقوم VBE تلقائيا بإدخال التعبيرات أو التصريحات الخاصة ببداية ونهاية الإجراء الخاص بـ (Workbook_Open ) ..

5- أدخل الكود التالي :

[كود]Private Sub Workbook_Open()

Dim Msg As String

If Today(Now) = 2 Then

Msg = “Its Monday. Welcome back “

Msg = Msg & “to the real world!”

MsgBox Msg

End If

End Sub[/كود]

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

نستكمل سويا المرة القادمة إن شاء الله مع ( إجراءات الوظائف – تسمية الفرعي والوظائف – تنفيذ إجراءات الأحداث ... )

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

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

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

السلام عليكم

لي اضافة بسيطة هنا

و تقوم الدالة

=WEEKDAY()
في الاكسل بتحديد ترتيب اليوم في الاسبوع فاذا كان اليوم مثلا الاحد سيكون اليوم الاول في الاسبوع الي ان نصل الي يوم السبت فيكون اليوم السابع فمثلا لو كانت الخلية A1 تحمل تاريخا ووقفنا علي الخلية B1 و قمنا باستخدام الدالة ليكون شكلها كالتالي
=WEEKDAY(A6)

ستحدد الداله رقم هذا اليوم في الاسبوع فهي ترجع التاريخ الي ماهيته هل هو السبت الاحد الاثنين...الخ

و بالتالي تحدد ترتيبه في الاسبوع

مرفق مثالا

خالص تحياتي

WEEKDAY.rar

تم تعديل بواسطه aah_aah2008
رابط هذا التعليق
شارك

أستاذنا العزيز aah شكرا للتوضيح يا غالي

بس كنت عايز اسأل ترتيب أيام الأسبوع ده مبرمج في إكسيل والا يمكن التغيير

يعني مش عايز الاسبوع يبتدي بالإثنين ، ممكن السبت مثلا هل هناك إمكانية

وشكرا لك ولتفاعلك ولكل عضو يريد المصلحة للجميع وجزاكم الله خيرا

رابط هذا التعليق
شارك

اللهم ياسامع الصوت و ياسابق الفوت و يا كاسي العظام لحما بعد الموت

اجزي اخواني القائمين على هذا الموضوع بالإحسان احسانا و بالسيئات رحمة و غفرانا

رابط هذا التعليق
شارك

السلام عليكم

اخي ابو هاجر

بس كنت عايز اسأل ترتيب أيام الأسبوع ده مبرمج في إكسيل والا يمكن التغيير

يعني مش عايز الاسبوع يبتدي بالإثنين ، ممكن السبت مثلا هل هناك إمكانية

وشكرا لك ولتفاعلك ولكل عضو يريد المصلحة للجميع وجزاكم الله خيرا

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

و لك ان تجهز عملك علي هذا الاساس و ترتبه الترتيب الذي يتماشي مع القاعده ليكون ابتداء الاسبوع لديك يبدا من اليوم السابع

و هو السبت بترتيب الايام بالداله weekday

الحبيب احمد يعقوب

اللهم ياسامع الصوت و ياسابق الفوت و يا كاسي العظام لحما بعد الموت

اجزي اخواني القائمين على هذا الموضوع بالإحسان احسانا و بالسيئات رحمة و غفرانا

اللهم اميــــــــــن

تحياتي

رابط هذا التعليق
شارك

شكرا لك اخي العزيز aah على المعلومة ويارب على طول ما نتحرم من مشاركاتك الجميلة

الاخ أحمد يعقوب اللهم آمين يارب ولك بالمثل إن شاء الله

فين يا جماعة المشاركات محدش عايز أي استفسار أسئلة شرح جزئية معينة

استفيدوا بتواجد الأساتذة وافيدونا معاكم

رابط هذا التعليق
شارك

اخوتي الاعزاء ايها الاساتذة العظام

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

اخي ابو هاجر لك الشكر العميق

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

لك شكري من اعماق قلبي

راجيا من الله عز و جل و داعيا لك بالتوفيق دوما

رابط هذا التعليق
شارك

السلام عليكم

أخي أبو هاجر

جعل الله ذلك في ميزان حسناتك

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

سنة أولي أو ثانية بالكتير (ويمكن روضة)

وعندي الكثير من الأسئلة

ولكني لن أسأل الآن لسببين

(1) لضيق وقتي

(2) بعض الأسئلة التي كانت في ذهني في الأول وضحت من الشرح السابق

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

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

ونفعنا جميعا بما نعلم وبما نتعلم

رابط هذا التعليق
شارك

السلام عليكم

أخي أبو هاجر

جعل الله ذلك في ميزان حسناتك

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

سنة أولي أو ثانية بالكتير (ويمكن روضة)

وعندي الكثير من الأسئلة

ولكني لن أسأل الآن لسببين

(1) لضيق وقتي

(2) بعض الأسئلة التي كانت في ذهني في الأول وضحت من الشرح السابق

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

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

ونفعنا جميعا بما نعلم وبما نتعلم

شكرا اخي الفاضل القدير طارق

و أأيد كلامك تماما

وأنا برضه منتظر اكمال الدورة حتى لااسأل سؤال بعيد عن الشرح الحالي

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

رابط هذا التعليق
شارك

السلام عليكم

اخي ابو هاجر بارك الله فيك

و ملحوظة ان سمحت لي ان كان ما يؤخرك هو الردود

اخي لا تنظر الي الردود و سر بخطي منتظمة لا تؤخر من سريان الدورة

ليتم الاستفادة الكاملة لكافة الاعضاء المتابعين المشاركين بارائهم و الغير مشاركين

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

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

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

خالص تحيااتي

رابط هذا التعليق
شارك

السلام عليكم

انا آسف للتأخير يا جماعة حقيقي

يلا بسرعة .... الدرس الثاني من الجزء الخامس

*** إجراءات الوظائف Function Procedures ***

- لإجراء وظيفة ما ، عليك كتابة الكود بادئاً بكلمة ( Function ) وتنتهي بتعبير ( End Function ) ، وإليك مثال بسيط :

Function SquareRoot(num)
SquareRoot = num ^ (1 / 2)
End Function
- في هذا المثال فإن الوظيفة ( المهمة ) المراد تنفيذها تسمى (SquareRoot ) ، تأخذ دالة رقمية واحدة ( وهي التي بين القوسين ) ، و الوظائف يمكنها أن تأخذ أي عدد من الصيغ أو الدوال أو المعادلات ( أيها اسم تحب فهو صحيح ) أو لا شئ على الإطلاق ، في مثالنا عندما يتم تنفيذ تلك الصيغة ، يتم إرجاع قيمة مفردة هي الجذر التربيعي للصيغة التي تمر على الوظيفة . - كما أن VBA يتيح لك أي نوع من القيم ( مثل نوع البيانات ) التي تريد إرجاعها بواسطة إجراء ( Function ) ، ويحتوي الجزء الرابع على معلومات أكثر عن أنواع البيانات . - الوظائف يمكنك استخدامها بطريقتين فقط ، يمكنك تنفيذها عن طريق إجراء ( إجراء فرعي أو وظيفي ) ، أو استخدامها في صيغة ورقة العمل . - بنقم بمثال آخر ، هذه الوظيفة لحساب مساحة المستطيل ، والمعادلة هي ( المساحة = الطول × العرض ) كالتالي :
Public Function Rect(ByVal length As Double, width As Double) As Double
Rect  = length * width
End Function
- هذا الإجراء استخدم الوظيفة << Rect() >> والذي يمكن أن يكتب على النحو التالي :
Private Sub CalcRect()
Dim length As Double
Dim width As Double
Dim result As Double
length = Val(InputBox(“Enter the length.”, “Length”))
width = Val(InputBox(“Enter the width.”, “Width”))
result = Rect(length, width)
MsgBox (“The area is” & result)
End Sub

- هذا الكود بالفعل بسيط جدا ، أولاً يتم سؤال المستخدم لوضع المدخلات ( الطول والعرض ) ، وبعد أن يتم تعيين القيمتين للوظيفة ( Rect() ) ، هنا تتم عملية حساب النتيجة وكذلك إرجاعها للإجراء ، و (msgbox ) لعرض مساحة المستطيل .

3) تسمية الفرعي والوظائف ... Naming Subs and Functions ..

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

* VBA لا يفرق بين الأحرف الكبيرة والصغيرة .

* لا يمكنك استخدام أي من الرموز التالية في عملية التسمية (#, $, %, &, @, ^, *, ! ) .

* الحروف والأرقام وبعض علامات الترقيم مسموح بها ، ولكن الاسم يجب أن يبدأ بحرف .

* أي اسم يجب ألا يتعدى 255 حرف ، بالطبع أنت لا تحتاج لكل هذا العدد من الأحرف .

* لا مسافات أو فراغات بين الأحرف .

- ومن المستحسن بالطبع أن يدل اسم الإجراء على المهمة أو الغرض منه ، كمثال GetUserName, InputTaxData, PerformSort ، وهكذا ...

- بعض المبرمجين يفضلون استخدام الجمل والتعبيرات لتصف الإجراءات وصفا شاملا ، مثل WriteReportToTextFile ، Get_Print_Options_and_Print_Report وهكذا ، ولاستخدام هذه الأسماء الطويلة نسبيا إيجابيات وسلبيات ، فمن جهة هذه الأسماء تصف الإجراء وصفا دقيقا بحيث تزيل الغموض ، ولكن من جهة أخرى من المفضل ألا تكون طويلة جدا ، يمكنك تسمية الإجراء على طريقتك الخاصة بحيث يصف الإجراء ولكن تجنب الأسماء التالية (tIt, DoThis, RunAgain, and Macro1 ) ..

4) تنفيذ إجراءات الأحداث ... Executing Events procedures ..

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

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

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

5) تنفيذ الإجراءات الفرعية ... Executing Sub procedures ..

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

- فلنبدأ مع الإجراءات الفرعية ( Sub Procedures ) ، لتنفيذ إجراء فرعي ( ليست القائمة شاملة ) :

* استخدم الأمر التالي ( Run Sub/UserForm ) من القائمة ( Run ) في نافذة ( VBE ) ، هذا الأمر يمكن الوصول إليه عن طريق الضغط على مفتاح ( F5 ) في النافذة الرئيسية ، أو عن طريق القائمة ( Run ) .

* في مربع حوار ماكرو في الإكسيل ، قم باختيار التالي (Tools-Macro-Macros ) أو ( أدوات – ماكرو – وحدات ماكرو ) أو اضغط على مفتاحي ( Alt + F8 ) ، عندما يظهر مربع الحوار ماكرو قم باختيار الإجراء الفرعي المراد تنفيذه وانقر على زر تشغيل .

* والطريقة السهلة هي عن طريق الضغط على ( Ctrl + key shortcut ) وهو الاختصار الذي قمت مسبقا بتعيينه عند كتابة ماكرو معين ويجب عليك تذكره للقيام بتنفيذه .

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

* عن طريق إجراء فرعي آخر قمت بكتابته .

* تلقائيا عندما تفتح أو تغلق مصنف .

* عندما يحدث حدث آخر مثل تنشيط ورقة عمل أو تفعيل UserForm أو أي حدث آخر ..

- وسوف أريك الآن بعض هذه التقنيات في الجزء التالي ، سنقوم بتنفيذ الإجراءات التي قمنا بعملها أعلى ...

(A) تنفيذ الإجراءات الفرعية مباشرة ...

- تعتبر أسرع طريقة لتنفيذ إجراء فرعي عن طريق كتابة ذلك في موديول VBA الخاص بالإجراء ، اتبع تلك الخطوات :

* قم بتنشيط نافذة VBE ، ومن ثم افتح نموذج أو الموديول الخاص بالإجراء .

* انقل المؤشر في أي مكان في كود الإجراء .

* اضغط مفتاح ( F5 ) أو اذهب إلى (Run Sub/UserForm - Run ) أو من شريط الأوامر أنقر علامة تشغيل ..

* سيتم تنفيذ هذا الإجراء على الفور

209676442.jpg

(B) تنفيذ الإجراء عن طريق مربع حوار ماكرو .

لآسف جدا يا جماعة والله اني مشغول جدا

اليوم ان شاء الله بخلص معاكم الجزء الخامس باذن الله ، بس بالليل طباع

رابط هذا التعليق
شارك

(B) تنفيذ الإجراء عن طريق مربع حوار ماكرو .

- في أغلب الأحيان فإن تنفيذ إجراء معين يكون من خلال إكسيل وليس VBE ، والخطوة التالية توضح كيفية تنفيذ إجراء عن طريق مربع حوار ماكرو ..

* تنشيط إكسيل ..

اضغط على ( Alt + F11 ) لتنشيط إكسيل ، ولو كان الإكسيل نشيطا بالفعل تجنب هذه الخطوة .

* اضغط على ( Alt + F8 )

أو يمكنك الذهاب إلى ( أدوات – ماكرو – وحدات ماكرو ) أو ( Tools – Macro – Macros ) ، سيتم عرض مربع حوار ماكرو .

* اختر الماكرو ، ثم تشغيل ( Run ) ، أو انقر مرتين على اسم الماكرو من القائمة .

411593639.jpg

© تنفيذ الإجراء عن طريق مفاتيح الاختصار ..

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

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

* اختر ( أدوات – ماكرو – وحدات ماكرو ) أو ( Tools – Macro – Macros ) أو ( Alt + F8 ) .

* اختر اسم الإجراء من قائمة الإجراءات المتوفرة ( وفي هذا المثال فالإجراء اسمه Hello ) .

* اضغط زر ( خيارات ) .. ( Option ) .

* يظهر لك مربع حوار ( خيارات الماكرو ) قم بكتابة مفتاح الاختصار داخل المربع المسمى ( Ctrl ).

* اضغط على زر موافق أو إلغاء لإغلاق مربع الحوار .

745422462.jpg

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

(D) تنفيذ الإجراء عن طريق زر أو شكل .

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

* قم بتنشيط المصنف .

* قم بفتح مجموعة ( نماذج ) ( Form ) .

* انقر على الأداة ( زر – Button ) في مجموعة النماذج .

* قم بالسحب على ورقة العمل لإنشاء الزر .

- بعد إضافة الزر إلى ورقة العمل ، سيقوم إكسيل تلقائيا بعرض مربع حوار ( تعيين ماكرو ) .

* اختر الماكرو الذي تريد تعيينه للزر .

* اضغط على موافق .

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

(E) تنفيذ إجراء عن طريق إجراء آخر .

يمكنك أيضا تنفيذ إجراء عن طريق إجراء آخر ، اتبع الخطوات التالية لو أردت تجربة ذلك :

* قم بتنشيط ( VBA Module ) التي تحمل الإجراء ( Hello ) .

* أدخل الكود التالي :

Sub CallSub()
      Call Hello
      End Sub
* قم بتنفيذ الإجراء ( CallSub ) . - الأمثلة أعلاه ليست على سبيل الحصر ، فهناك طرق أخرى متعددة لتنفيذ الإجراء نأمل التطرق لها فيما بعد . 6) تنفيذ إجراءات الوظائف ... Executing Function procedures .. - يمكنك تنفيذ إجراءات الوظائف فقط بطريقتين : 1- إما باستدعاء الوظيفة عن طريق إجراء فرعي آخر ، أو إجراء وظيفة أخرى .. 2- أو باستخدام الوظيفة أو الدالة عن طريق صيغ ورقة العمل . * إليك مثال بسيط على إجراء وظيفة ، قم بإدخال الكود التالي في VBA Module :
Function SquareRoot(num)
SquareRoot = num ^ (1/2)
End Function
- على الرغم من بساطة هذه المهمة ، فهي تقوم فقط بحساب الجذر التربيعي للرقم الذي يمر بالإجراء ، إلا أنها تعتبر نقطة بداية جيدة لنا لفهم الوظائف خاصة كيفية إرجاع الوظيفة أو المهمة للقيمة المارة بها . - هنا فإن الصيغة تقوم بحساب ( عدد مرفوع للقوة 1/2 ) ثم أن النتيجة مسندة للمتغير (SquareRoot ) ، ولتخبر الوظيفة أي قيمة تود إرجاعها ، تقوم بتعيين هذه القيمة كاسم للوظيفة ، وقد استخدمنا (SquareRoot ) كاسم وظيفة مناسب . (1) استدعاء الوظيفة عن طريق إجراء فرعي آخر : أنظر كيف تتم عملية استدعاء للوظيفة عن طريق إجراء فرعي آخر ، نقوم بإدخال كود الإجراء البسيط التالي في نفس موديول الوظيفة التي تحتوي على وظيفة ( SquareRoot ( ..
Sub GetSub()
Ans = SquareRoot(16)
MsgBox Ans
End Sub
- عندما يتم تشغيل هذا الإجراء ، يقوم الإكسيل بعرض مربع رسالة يحتوي على قيمة المتغير ( Ans ) ، الذي هو الجواب 4 . * ما الذي حدث بالضبط : 1- قمنا بتمرير الرقم 16 على الوظيفة . 2- قامت الوظيفة بعملية الحساب وأرجعت القيمة 4 وقامت بتعيين المتغير على أنه الرقم 4 . 3- قامت الوظيفة MsgBox بعرض المتغير Ans ، والذي قيمته 4 على المستخدم . - يمكنك أيضا تبسيط الإجراء GetSub بحذف المتغير Ans من الكود :
Sub GetSub()
MsgBox SquareRoot(16)
End Sub
(2) استدعاء مهمة عن طريق صيغ ورقة العمل : - إنه لفي غاية البساطة استدعاء إجراء مهمة في VBA عن طريق صيغ ورقة العمل . * اذهب إلى ورقة العمل في نفس المصنف الذي يتضمن وظيفة (SquareRoot ) ، ثم أدخل الصيغة التالية في أي خلية :
=SquareRoot(25)
- ستحصل على القيمة ( 5 ) في الخلية ، وهي الجذر التربيعي للرقم ( 25 ) . - يمكنك أيضا استخدام مرجع الخلية على أنه الوظيفة (SquareRoot ) ، على سبيل المثال لو أنه الخلية ( C1 ) يحتوي قيمة ، يمكنك إدخال الصيغة التالية :
=SquareRoot(C1)

- في هذه الحالة فإن الصيغة ستقوم بتنفيذ المهمة على الخلية ( C1 ) .

(( نقطة هامة جداً ))

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

604427129.jpg

هنا ، وانتهى الجزء الخامس بحول الله وقدرته

الحمد لله رب العالمين

وانتظروا الجزء السادس وفيه ( التحكم في التعبيرات المنطقية والحلقات – تعبيرات If/then/else – select/case )

أسأل كل من استفاد الدعاء

رابط هذا التعليق
شارك

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

يا اخوان اللي متابع يستفسر مش معقوله كل شئ مفهوم .. دي اولا

ثانيا الاساتذة ان شاء الله بيردوا على الاسئلة وهي دي الاستفادة الاكبر

والا الكل استكفى خلاص بنصف الدورة

عايزين بعض تطبيقات وإيضاحات فهل من منصت

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

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information