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

دروس فى VBA Excel _ نتعلم معا برمجه اكسل


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

  • الردود 196
  • Created
  • اخر رد

Top Posters In This Topic

إخوانى فى الله

الأستاذ الكريم // ابو صلاح

الأستاذ الكريم // زمزم

الأستاذ الكريم // mk_mk_79

بارك الله فيكم على مروركم الكريم

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

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

الدرس التاسع

التعامل مع الكائنات

 

الكائنات Objects

 

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

ويتضمن Excel الكائنات التالية :

 

1 – التطبيق Application ويتمثل فى برنامج الإكسيل نفسه .

2 – المصنف Work Book  ويتمثل فى كتاب العمل الذى يتم التعامل مع البيانات من خلاله.

3 - ورقة العمل Work Sheet وهى التى تحتوى على مجموعة البيانات

4 – النطاق Range ويتضمن مجموعة من الخلايا Cells وهى التى تحتوى على بيان واحد من البيانات سواء كان بيان نصى أو رقمى أو معادلة أو دالة ويكتب النطاق على النحو التالى

Range(a1:c5) أى نطاق الخلايا من a1 الى c5

ولكل كائن من هذه الكائنات خصائص معينة Properties مثل الاسم Name والعنوان Caption ومجموعة من الأساليب Methods التي تستخدم في تنفيذ أمر معين على الكائن كما أن الكائن قد يقع عليه حدث يؤثر فى سلوكه ورد فعله

 

 

 

 

كائن التطبیق Application


Sub JASMEN1()
Application.Caption = "JASMEN MAHMOUD ELSHRIEF"
End Sub

 

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

 "JASMEN MAHMOUD ELSHRIEF"

 

Sub JANA2 ()
Application.DisplayFormulaBar = False
End Sub

تقوم هذه الخاصية DisplayFormulaBar بإخفاء شريط الصيغ عند استخدام False وبالمقابل إظهاره عند استخدام TRUE

Sub JOUMANA3 ()
Application.DisplayFullScreen = True
End Sub
 

تقوم هذه الخاصية DisplayFullScreen بجعل التطبيق في وضع ملء الشاشة وللرجوع طبعاً يجب ان نجعل القيمة  False

Sub MZM4 ()
Application.DisplayRecentFiles = False
End Sub
 

 تقوم هذه الخاصية DisplayRecentFiles  بعدم عرض المستندات الأخيرة في كائن تطبيق اكسيل وإذا أردنا إستعراضها طبعاً نجعلها تاخد القيمة TRUE

Sub MZM5 ()
Application.WindowState = xlMaximized
End Sub
 

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

Sub MZM6 ()
Application.WindowState = xlMinimized
End Sub
 

تقوم هذه الخاصية WindowState  بعرض البرنامج فى حالة التصغير

Sub MZM7 ()
Application.WindowState = xlNormal
End Sub

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

 

 

 

 

 

 

 

كائن ورقة العمل Worksheet

Sub MZM8 ()
Worksheets("sheet1").Visible = False
End Sub
 

يقوم الكود السابق بإخفاء ورقة العمل المسماه sheet1

وإذا أردنا إظهار الشيت نجعل القيمة TRUE

Sub MZM9 ()
Worksheets(1).Name = "sheet1"
End Sub
 

يقوم الكود بإعادة تسمية الورقة 1 في ترتيب اكسيل  بـ sheet1

Sub MZM10 ()
Worksheets("sheet1").Delete
End Sub
 

يقوم الكود بحذف الورقة المسماه sheet1

Sub MZM11 ()
Worksheets(1).Activate
End Sub
 

 يقوم الكود بتنشيط الورقة المسماه sheet1

Sub MZM12 ()
Worksheets.Add
End Sub
 

يقوم الكود بإضافة ورقة جديدة

Sub MZM13 ()
Worksheets(3).Copy
End Sub
 

يقوم الكود بنسخ الورقة الثالثة ضمن ترتيب ورقات المصنف

 

 

 

 

 

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

تابع الدرس التاسع

 

كائن المدى / النطاق  Range

 

 

نستعرض كائن من نوع النطاق أو ما يسمى بالمدى أو المجال وهو الأكثر شيوعاً أي أن أغلب الأكواد تشير بكثرة لهذا النوع من الكائنات

 

Sub MZM14 ()
Range("d2:i10").Select
End Sub

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

 

 

Sub MZM15 ()
Range("d2:i10").Columns(2).Select
End Sub

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

 

Sub MZM16 ()
Range("b10:f15").Columns(2).Value = 0
End Sub

 

يقوم الكود بكتابة قيمة صفر في العمود الثاني من المجال المحدد بين القوسين

 

Sub MZM17 ()
Range("c5:c10").Rows(1).Value = 100
End Sub

 

يقوم الكود بكتابة قيمة 100 في الصف الأول من المجال المحدد بين القوسين وهو هنا الخلية C5

 

Sub MZM18 ()
Range("d2:i10").Cells(2, 3).Select
End Sub

 

يقوم الكود بتحديد الخلية الواقعة في الصف الثاني من العمود الثالث داخل المجال المحدد بين القوسين وهي الخلية F3

 

Sub MZM19 ()
Range("f10:i15").Cells(3, 2).Value = 200
End Sub

 

يقوم الكود بكتابة قيمة 200 بالخلية الواقعة في الصف الثالث من العمود الثاني داخل المجال المحدد بين القوسين وهي هنا الخلية G12

 

Sub MZM20 ()
Worksheets(3).Range("f1:h5").Value = 100
End Sub

 

يقوم الكود بكتابة قيمة 100 في المجال المحدد من الورقة الثالثة من أوراق المصنف

 

Sub MZM21 ()
Range("d2:i10").Clear
End Sub

 

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

 

Sub MZM22 ()
Worksheets(3).Range("a1:c10").Font.Bold = True
End Sub

 

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

 

Sub MZM23 ()
Worksheets(3).Range("a1:c10").Font.Italic = True
End Sub

 

عند المجال المحدد من الورقة الثالثة في أوراق المصنف قم باختيار خاصية  Italic إمالة الخط

 

Sub MZM24 ()
Worksheets(3).Range("a1:c10").Font.Underline = True
End Sub

 

عند المجال المحدد من الورقة الثالثة في أوراق المصنف قم باختيار خاصية Underline وضع خط تحت البيانات

 

 

Sub MZM25 ()
Worksheets(3).Range("a1:c10").Font.Name = " Arabic Typesetting"
End Sub

 

عند المجال المحدد من الورقة الثالثة في أوراق المصنف قم باختيار نوع الخط Arabic Typesetting

 

 

Sub MZM26 ()
Worksheets(3).Range("a1:c10").Font.Size = 18
End Sub

 

عند المجال المحدد من الورقة الثالثة في أوراق المصنف قم باختيار حجم الخط 18

 

 

Sub MZM27 ()
Worksheets(3).Range("a1:c10").Columns(1).Font.Size = 18
End Sub

 

عند المجال المحدد من الورقة الثالثة في أوراق المصنف بالعمود الأول فقط قم باختيار حجم الخط 18

 

 

Sub MZM28 ()
Worksheets(3).Range("a1:c10").Rows.Font.Bold = True
End Sub

 

عند المجال المحدد من الورقة الثالثة في أوراق المصنف لجميع صفوف المجال قم باختيار خاصية Bold

 

 

 

Sub MZM29 ()
Worksheets(3).Range("a1:c10").Rows(3).Font.Bold = True
End Sub

 

عند المجال المحدد من الورقة الثالثة في أوراق المصنف بالصف الثالث فقط قم باختيار خاصية Bold

 

 

Sub MZM30 ()
Range("f20:i25").Cells.Font.Italic = True
End Sub

 

عند المجال المحدد من الورقة الثالثة في أوراق المصنف بجميع الخلايا قم باختيار خاصية Italic

 

 

Sub MZM31 ()
ActiveCell.Formula = "=C1+D2"
End Sub

 

عند الخلية الحالية النشطة اكتب المعادلة المذكورة

 

 

 

Sub MZM32 ()
Range("h10").FormulaR1C1 = "=r[-1]c[-1]+r[1]c[1]"
End Sub

 

لإدراج المعادلة بمقدار إزاحة اقل من صف وعمود لليمين + إزاحة اكبر من صف وعمود لليسار للخلية المختارة وبالتالي سيكون الناتج معادلة G9+I11

 

 

Sub MZM33 ()
Range("h10").FormulaR1C1 = "=rc[1]+rc[2]"
End Sub

 

لإدراج المعادلة بمقدار إزاحة أكبر من صف وعمود لليسار + إزاحة اكبر من صفين عمودين لليسار للخلية المختارة وبالتالي سيكون الناتج معادلة I10+J10

 

 

Sub MZM34 ()
Worksheets(3).Range("H10").Offset(1, 2).Value = 100
End Sub

 

 

لإدراج القيمة  100 بمقدار إزاحة زائد عمودين لليسار وصف من الخلية المختارة وهي ستكون الخلية J11

 

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

تابع الدرس التاسع

 

 

 

لاحظ الاختصار في الأكسيل فبدلاً من الأسطر المتعددة يمكن الإشارة للمجال المختار بهذه الجملة WHIT

 

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

 

 

Sub MZM ()
With Worksheets(3).Range("A1:h10").Font
.Bold = True
.Italic = True
.Underline = True
.Name = "ARIAL"
.Size = 20
End With
End Sub

 

 

استخدمنا خاصية  WHIT  لتخصيص المجال المحدد بالخاصية المطلوبة FONT لعمل ما يلي من أوامر بعد سطر التخصيصويجب إنهاء جملة التخصيص WHIT   بجملة End With

 

 

 

Sub MZM ()
Worksheets(5).UsedRange.Font.Size = 16
End Sub

 

 

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

 

 

Sub MZM ()
Worksheets(3).Range("a1").CurrentRegion.Font.Size = 16
End Sub

 

 

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

 

 

Sub MZM ()
Worksheets(3).Range("C2:G10").BorderAround ColorIndex:=5
End Sub

 

 

يقوم الكود بإحاطة المجال المختار بحدود باللون الأزرق

 

 

Sub MZM ()
Worksheets(3).Range("C2:G10").Interior.ColorIndex = 6
End Sub

 

 

يقوم الكود بتلوين المجال المحدد باللون الأصفر

 

 

وعلى ذكر ColorIndex قد يتساءل البعض كيف يمكن معرفة رقم اللون المختار ؟

 

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

 

 

6APU39.jpg

 

 

 

 

 

 

 

 

مثال

Sub MZM ()
With Cells(1, "D")
.Value = "منتديات أوفيسنا التعليمية "
.Font.Bold = True
.Font.Name = "Arial"
.Font.Size = 72
.Font.Color = RGB(0, 0, 250)
.Columns.AutoFit
.Interior.Color = RGB(0, 255, 255)
.Borders.Weight = xlThick
.Borders.Color = RGB(0, 0, 255)
End With
End Sub

بالكود السابق

 

استخدمنا الخاصية Cells للإشارة إلى الخلية الأولى من العمود D

 

شرح الكود :

 

-        عند الخلية الأولى من العمود D أعطها قيمة نصية " منتديات أوفيسنا التعليمية"

-        تغليظ الخط قم باستخدام نوع الخط Arial

-        حجم الخط 72

-        اختيار اللون الأزرق

-        استخدم خاصية الاحتواء المناسب لضبط النص داخل الخلية

-        جعل الخلفية باللون التركوازى

-        إحاطة الخلية برسم حد ذي حد غليظ

-        اختيار للحد لوناً أزرق

-        قم بإنهاء جملة WITH

 

 

 

 

ويمكن الإشارة هنا إلى أن أنواع الـ .Borders.Weight هي كما يلي

 

T8QLma.jpg

 

 

Sub MZM ()
With Range("A1:A5,H1:H5")
.Value = "MAHMOUD ELSHRIE"
.Font.Bold = True
. Columns.AutoFit
End With
End Sub

 

 

بالكود أعلاه :

 

-        تم الإشارة لمجالين مختلفين مع جملة WITH

-        تم كتابة قيمة نصية MAHMOUD ELSHRIE

-        تم اختيار نوع الخط الغليظ

-        تم عمل احتواء مناسب للأعمدة

-        ثم إنهاء جملة WITH

 

 

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

 

جميع ما سبق الحديث عنه بالنسبة للمدى كان محدد ومعلوم ، أي أن الأبعاد ثابتة ومحددة مثل

الخلية A1

المدى A1 : H10

 

فماذا لو كان المجال المطلوب العمل ضمنه هو مجال متغير الأبعاد ؟

 

إذا یجب علینا التعرف على ما یلي

جمل التخصیص SET AND LET

 

كلاهما تستخدم لتخصيص قيم المتغيرات المعلن عنها ككائنات والفرق بينهما في أن جملة SET تستخدم لتخصيص المتغيرات من نوع كائن

 

أما LET فتستخدم لتخصيص القيم الرقمية أو الحرفية للمتغيرات الأخرى

 

مثال على جملة SET لأنها هى التى تهمنا الآن :

 

 

Sub MZM()
Dim R1 As Range
Dim R2 As Range
Dim MAHMOUD As Range
Set R1 = Range("B2:C5")
Set R2 = Range("F2:J5")
Set MAHMOUD = Union(r1, r2)
With MAHMOUD
.Value = "MAHMOUD ELSHRIEF "
.Font.Size = 20
.Font.Bold = True
.Font.Italic = True
.Font.ColorIndex = 5
.Borders.Weight = xlMedium
.Borders.Color = RGB(0, 255, 255)
.Interior.ColorIndex = 6
.Columns.AutoFit
End With
End Sub

 

 

السطر الأول والثاني والثالث إعلان عن المتغيرات على أنها من النوع RANGE

 

السطر الرابع والخامس تخصيص المجال المذكور للمجال الأول والثاني R1 ،R2 وذلك باستخدام جملة Set

 

السطر السادس تخصيص المجال MAHMOUD   الذي نريده أن يعبر عن دمج المجالين R1 ،R2 وذلك باستخدام الأمر Union

 

والفائدة من ذلك كله تكٌمن في السطر السابع ، فعند تخصيص المجال MAHMOUD    كمتغير من نوع نطاق ليعبر عن المجالين R1 ،R2 أمكن لنا أن نقرنه بالجملة WHIT ليأخذ الخصائص المطلوبة في الأسطر الباقية من الكود

 

 

مثال آخر :

Sub MZM ()
Dim Z As Worksheet
Set Z = Application.Worksheets(2)
Z.Name = "منتديات أوفيسنا التعليمية "
End Sub

هنا تم تخصيص الكائن من ورقة عمل للمتغير Z وبالتالي عند استخدام خاصية Name مع المتغير Z أمكن تغيير أسم الورقة

 

باختصار فإن المتغير Z بفضل الجملة SET يعبر عن كائن ورقة العمل المحددة

 

 

 

 

 

المدى الدینامیكى

 

 

لا يزال الحديث متصلا بكائن النطاق RANGE والذى استغرق منا تقريباً معظم الحالات

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

 

فماذا لو كان مجال العمل المدى متحرك أى ديناميكى ؟

 

عندها يصبح الكود والعمل المنجز أكثر فعالية ومفعماً بالحيوية

 

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

 

إرهاق لموارد البرنامج وبطء ملحوظ في كفاءة ملف العمل

 

والكود التالي يلخص فكرة  المثال السابق :

 

 

Private Sub Worksheet_Change(ByVal Target As Range)
With Range("MYRANGE")
.Font.Size = 16
.Font.Bold = True
.Font.ColorIndex = 5
.Borders.Weight = xlMedium
.Borders.ColorIndex = 3
.Interior.ColorIndex = 36
.Columns.AutoFit
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.RowHeight = 25
End With
End Sub

جميع اسطر الكود تقريباً تم شرحها سابقاُ فيما عدا أن الكود لا يبدأ بكلمة SUB المعهودة وذلك لأنه مقترن بحدث التغيير بورقة العمل عند المجال MYRANGE الديناميكي

 

 

كذلك سطري الأوامر

 

.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter

واللذان يعنيان توسيط البيانات أفقيا وعمودياً

 

 

أيضا سطر الأوامر

 

.RowHeight = 25

والذي يعني جعل الصفوف متساوية بارتفاع 25 

 
 
مرفق ملف pdf
به كامل الدرس التاسع

الدرس 9.rar

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

الدرس العاشر

 

الكائن Window

 

 

لتغيير التسمية التوضيحية لأسم النافذة للمصنف النشط في الشريط العلوي من البرنامج

Sub MZM ()
ActiveWindow.Caption = "منتديات أوفيسنا التعليمية"
End Sub

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

Sub MZM ()
ActiveWindow.Caption = ""
End Sub

لتنشيط نافذة بعينها مفتوحه فى الخلفية

Sub MZM ()
Windows("Book1").Activate
End Sub

يمكن ان يكون خيار التنشيط باختيار التالي

Sub MZM ()
ActiveWindow.ActivateNext
End Sub

كما يمكن ان يكون خيار التنشيط باختيار السابق


 

Sub MZM ()
ActiveWindow.ActivatePrevious
End Sub

لإنشاء إطار جديد لنافذة المصنف الحالي النشط

Sub MZM ()
ActiveWindow.NewWindow
End Sub

لإخفاء إطار نافذة المصنف الحالي النشط ، طبعاً يمكن إظهاره القائمة إظهار أو اختيار TRUE إذا كنت داخل محرر الأكواد


 

Sub MZM ()
ActiveWindow.Visible = False
End Sub

تكبير حالة النافذة الحالية للمصنف النشط

Sub MZM ()
ActiveWindow.WindowState = xlMaximized
End Sub

تصغير حالة النافذة الحالية للمصنف النشط

Sub MZM ()
ActiveWindow.WindowState = xlMinimized
End Sub

الوضع العادى لحالة النافذة الحالية للمصنف النشط

Sub MZM ()
ActiveWindow.WindowState = xlNormal
End Sub

لإغلاق نافذة المصنف الحالي النشط

Sub MZM ()
ActiveWindow.Close
End Sub
 

لإعطاء زووم بقيمة معينة لنافذة ورقة العمل الحالية

Sub MZM ()
ActiveWindow.Zoom = 80
End Sub

لإخفاء علامات التبويب لأوراق العمل بنافذة المصنف النشط

Sub MZM ()
ActiveWindow.DisplayWorkbookTabs = False
End Sub

لإخفاء رؤوس الأعمدة والصفوف بنافذة ورقة العمل الحالية

Sub MZM ()
ActiveWindow.DisplayHeadings = False
End Sub

لإخفاء شريط التمرير الأفقي بنافذة المصنف النشط الحالي

Sub MZM ()
ActiveWindow.DisplayHorizontalScrollBar = False
End Sub

وللتحكم بشريط التمرير الأفقي من حيث الزيادة والنقصان يمكن التدرج بالشكل التالي


 

Sub MZM ()
ActiveWindow.TabRatio = 1
End Sub

Sub MZM ()
ActiveWindow.TabRatio = 0.5
End Sub

Sub MZM ()
ActiveWindow.TabRatio = 0
End Sub

لإخفاء شريط التمرير العمودي بنافذة المصنف النشط الحالي

Sub MZM ()
ActiveWindow.DisplayVerticalScrollBar = False
End Sub

لعرض جميع الصيغ بنافذة ورقة العمل النشطة

Sub MZM ()
ActiveWindow.DisplayFormulas = True
End Sub

لإخفاء خطوط الشبكة بنافذة ورقة العمل النشطة

Sub MZM ()
ActiveWindow.DisplayGridlines = False
End Sub

لإعطاء لون محدد لخطوط الشبكة بنافذة ورقة العمل النشطة

Sub MZM ()
ActiveWindow.GridlineColor = QBColor(14)
End Sub

لعمل معاينة لفواصل الصفحات للورقة النشطة حالياً

Sub MZM ()
ActiveWindow.View = xlPageBreakPreview
End Sub

وللعودة لوضع العرض العادي بالورقة النشطة حاليا

Sub MZM ()
ActiveWindow.View = xlNormalView
End Sub

لإخفاء القيم الصفرية بنافذة ورقة العمل النشطة

Sub MZM ()
ActiveWindow.DisplayZeros = False
End Sub

لقراءة اسم الورقة الحالية في شكل Message Box

Sub MZM ()
MsgBox Windows(1).ActiveSheet.Name
End Sub

لقراءة عنوان مدى محدد تم اختياره ليظهر العنوان في شكل Message Box

Sub MZM ()
MsgBox ActiveWindow.RangeSelection.Address
End Sub

لقراءة عنوان الخلية النشطة بنافذة المصنف تم اختياره ليظهر العنوان في شكل

Message Box

Sub MZM ()
MsgBox Windows("أوفيسنا").ActiveCell.Address
End Sub

لعمل انقسام داخل نافذة ورقة العمل النشطة

Sub MZM ()
ActiveWindow.Split = True
End Sub

لمعرفة عدد الأجزاء المنقسمة داخل نافذة ورقة العمل النشطة واسترجاع الناتج في شكل مسج

Sub MZM ()
MsgBox ActiveWindow.Panes.Count
End Sub

لعمل تجميد الألواح داخل نافذة ورقة العمل النشطة

Sub MZM ()
ActiveWindow.FreezePanes = True
End Sub

مرفق ملف pdf

به كامل الدرس العاشر

الدرس 10.rar

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

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

اخى الحبيب محمود

مجهود كبير من شخص عظيم

مبذول لاسعاد الاخرين

فأنا شخصيا سعدت جدا بهذا الموضوع

لما فيه من معلومات مفيده جدا

والاجمل هو البساطه فى الاداء

بارك الله فيك

وجعل اعمالك فى ميزان حسناتك

تقبل تحياتى

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

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

اولاً اعتذر لعدم الرد مبكراً لقلة تواجدى على الجهاز

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

جعل الله هذا العمل فى ميزان حسناتك ورزقك من حيث لا تحتسب وانار الله لك بصيرتك

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

إخوانى فى الله

 

الأستاذ الكريم // محمد لطفى 

بارك الله فيكم على مروركم الكريم واضافتكم للملف الذى به الداله الرائعه وثناؤكم على الموضوع

 

الأستاذ الكريم // mohaxnn

بارك الله فيكم على مروركم الكريم ودعاؤكم الطيب

 

الأستاذ الكبير // ابراهيم ابو ليله

بارك الله فيكم على مروركم الكريم

وأسعدنى جدا ان الموضوع اسعدكم 

وشاكرا لكم ثناؤكم على الموضوع ودعاؤكم الطيب

 

الأستاذ الكريم // عادل ابو زيد

بارك الله فيكم على مروركم الكريم وثناؤكم على الموضوع

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

 

الأستاذ الكريم // عمرو طلبه

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

 

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

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

الدرس الحادى عشر

 

حدث الملف workbook

أو حدث الصفحة worksheet

 

 

هناك أكواد يتم كتابتها داخل حدث الملف

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

 

وهناك أكواد يتم كتابتها داخل حدث الصفحة

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

 

وهناك أكواد تكتب داخل موديول ويتم ربطها بكود يكتب داخل حدث الصفحة

 

وأيضا هناك أكواد تكتب داخل موديول ويتم ربطها بكود داخل حدث الفورم

 

سنتحدث بهذا الدرس عن الأكواد التى تكتب داخل حدث الصفحة

ولكن يجب أن نتعرف عليها وأين تكتب هذه الأكواد

 

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

 

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

 

كما بالصورة التالية

MrzLiP.jpg

 

 

 

 

عند اختيار الحدث selectionchange

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

 

 

(Private Sub Worksheet_SelectionChange(ByVal Target As Range

End Sub

ويتم تنفيذ الحدث عندما يتم تغيير الاختيار

أى مثلا كلما قمنا بالإنتقال من خلية الى خلية أخرى

 

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static previous_selection As String
If previous_selection <> "" Then
Range(previous_selection).Interior.ColorIndex = xlColorIndexNone
End If
Target.Interior.Color = RGB(181, 244, 0)
previous_selection = Target.Address
End Sub

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

 

 

 

عند اختيار الحدث Worksheet_Activate

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

 

Private Sub Worksheet_ Activate ( )

End Sub

وهو خاص بعندما يتم تنشيط الورقة أى الدخول الى الورقة

 

 

 

 

عند اختيار الحدث Worksheet_Deactivate

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_Deactivate ( )

End Sub 

وهو خاص بعندما يتم تنشيط ورقة عمل أخرى

 

 

 

 

عند اختيار الحدث Worksheet_BeforeDoubleClick

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub 

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

 

 

 

 

عند اختيار الحدث Worksheet_BeforeRightClick

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean)

End Sub 

وهو خاص بعندما يتم الضغط على كليك يمين على الورقة

 

 

 

 

 

عند اختيار الحدث Worksheet_Calculate

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_Calculate ( )

End Sub 

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

 

 

 

 

عند اختيار الحدث Worksheet_Change

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub 

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

 

 

 

عند اختيار الحدث Worksheet_FollowHyperlink

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

End Sub 

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

 

 

 

 

 

عند اختيار الحدث Worksheet_FollowHyperlink

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

End Sub 

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

 

 

 

 

 

 

ننتقل الى حدث الملف workbook

 

عند اختيار الحدث Workbook_Open

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Workbook_Open ( )

End Sub 

ويتم تنفيذ الحدث عندما يتم تغيير الاختيار

أى مثلا كلما قمنا بالإنتقال من خلية الى خلية أخرى

 

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

 

Private Sub Workbook_Open ( )
" منتديات أوفيسنا ترحب بكم  MsgBox"
End Sub

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

 

 

 

 

عند اختيار الحدث Workbook_BeforeClose

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub 

وهو خاص بتنفيذ تعليمات مباشرة قبل اغلاق الملف

 

 

 

ومرفق مع هذا الدرس مثال عملى به بعض الأكواد المذكوره أعلاه

وبعض الأحداث الخاصة بحدث الملف

وأيضا أكواد  لم تذكر بهذا الدرس خاصه بحدث الملف

وأيضا تطبيقات أخرى

مثل التعرف على كيفية استخدام التاريخ والوقت 

 

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

الدرس 11.rar

مثال عملى.rar

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

الدرس الحادى عشر

 

حدث الملف workbook

أو حدث الصفحة worksheet

 

 

هناك أكواد يتم كتابتها داخل حدث الملف

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

 

وهناك أكواد يتم كتابتها داخل حدث الصفحة

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

 

وهناك أكواد تكتب داخل موديول ويتم ربطها بكود يكتب داخل حدث الصفحة

 

وأيضا هناك أكواد تكتب داخل موديول ويتم ربطها بكود داخل حدث الفورم

 

سنتحدث بهذا الدرس عن الأكواد التى تكتب داخل حدث الصفحة

ولكن يجب أن نتعرف عليها وأين تكتب هذه الأكواد

 

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

 

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

 

كما بالصورة التالية

MrzLiP.jpg

 

 

 

 

عند اختيار الحدث selectionchange

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

(Private Sub Worksheet_SelectionChange(ByVal Target As Range

End Sub

ويتم تنفيذ الحدث عندما يتم تغيير الاختيار

أى مثلا كلما قمنا بالإنتقال من خلية الى خلية أخرى

 

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static previous_selection As String
If previous_selection <> "" Then
Range(previous_selection).Interior.ColorIndex = xlColorIndexNone
End If
Target.Interior.Color = RGB(181, 244, 0)
previous_selection = Target.Address
End Sub

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

 

 

 

عند اختيار الحدث Worksheet_Activate

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_ Activate ( )

End Sub

وهو خاص بعندما يتم تنشيط الورقة أى الدخول الى الورقة

 

 

 

 

عند اختيار الحدث Worksheet_Deactivate

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_Deactivate ( )

End Sub 

وهو خاص بعندما يتم تنشيط ورقة عمل أخرى

 

 

 

 

عند اختيار الحدث Worksheet_BeforeDoubleClick

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub 

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

 

 

 

 

عند اختيار الحدث Worksheet_BeforeRightClick

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean)

End Sub 

وهو خاص بعندما يتم الضغط على كليك يمين على الورقة

 

 

 

 

 

عند اختيار الحدث Worksheet_Calculate

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_Calculate ( )

End Sub 

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

 

 

 

 

عند اختيار الحدث Worksheet_Change

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub 

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

 

 

 

عند اختيار الحدث Worksheet_FollowHyperlink

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

End Sub 

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

 

 

 

 

 

عند اختيار الحدث Worksheet_FollowHyperlink

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

End Sub 

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

 

 

 

 

 

 

ننتقل الى حدث الملف workbook

 

عند اختيار الحدث Workbook_Open

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Workbook_Open ( )

End Sub 

ويتم تنفيذ الحدث عندما يتم تغيير الاختيار

أى مثلا كلما قمنا بالإنتقال من خلية الى خلية أخرى

 

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

Private Sub Workbook_Open ( )
" منتديات أوفيسنا ترحب بكم  MsgBox"
End Sub

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

 

 

 

 

عند اختيار الحدث Workbook_BeforeClose

تلقائيا يتم كتابة رأس الكود ونهايته ويكون الكود هكذا

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub 

وهو خاص بتنفيذ تعليمات مباشرة قبل اغلاق الملف

 

 

 

ومرفق مع هذا الدرس مثال عملى به بعض الأكواد المذكوره أعلاه

وبعض الأحداث الخاصة بحدث الملف

وأيضا أكواد  لم تذكر بهذا الدرس خاصه بحدث الملف

وأيضا تطبيقات أخرى

مثل التعرف على كيفية استخدام التاريخ والوقت 

 

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

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

السَّلام عليْكم ورحْمة الله وبركاته.

سَلامًا كَعَدِّ القَطْرِ وَالرَّمْلِ وَالحَصَى        وَنَبْتِ الصَّحَارَى وَالنُّجُومِ الشَّوَاهِدِ
سَلامًا يُبَارِي الرِّيحَ  مِسْكًا  وَعَنْبَرًا        وَيَعْلُو   بِهَامِ   الوُدِّ   فَوْقَ   الفَرَاقِدِ
وَأَهْلاً  كَمَا  هَبَّ  النَّسِيمُ   المُعَطَّرُ        وَإِلاَّ  فَمِسْكٌ  طَيِّبُ  النَّشْرِ   أَظْفَرُ

 

حيَّاكم الله وأحياكم للأمَّة، تُجدِّدون نضرَتَها، وتُعيدون شبابَها، وتَصلون أسبابَها، وتفتحون أبوابَها، وتَجمعون أصواتَ حُداتِها على إحْياء مواتِها وتدارك فواتِها.

أَمَانَةُ الدِّينِ قَدْ شُدَّتْ  بِعَاتِقِكُمْ        فَمَا   لِغَيْرِكُمُ    تُلْقَى    المَقَالِيدُ
مَنْ أَوْرَدَ الآمَالَ حَوْضَ فَعَالِكُمْ        فَلَهَا الأَمَانُ مِنَ انْ تُزَادَ وَتُصْرَفَا
فَاللَّهُ  يُرْضِيكُمْ  وَيَرْضَى  عَنْكُمُ        وَيُحِلُّكُمْ  غُرَفًا  عَلَوْنَ  وَرَفْرَفَا

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

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

اخوانى فى الله

 

الأستاذ الكريم  // اسلام

الاستاذ الكريم // ريان احمد

الاستاذ الكريم // محمد لطفى

 

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

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

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

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

نرجو الاستمرارية لتلك الدروس الرائعة

كما نرجو من الادارة تثبيت الموضوع . ولكم جزيل الشكر

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

إخوانى فى الله

 

الأستاذ الكريم // زمزم

الأستاذ الكريم // صلاح الصغير

الأستاذ الكريم // حماده سليمان

الأستاذ القدير // ياسر خليل

 

بارك الله فيكم على مروركم الكريم 

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

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

نستكمل سلسلة الدروس 

 

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

 

التطبيقات العملية ( 1 )

الترحيل

 

 

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

 

كيف نكتب كود ؟

كيف نستخدم هذه الأدوات ؟

حتى نخرج بكود منسق نستخدمه فى أمر ما

 

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

 

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

 

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

 

 

ملحوظة هامه جدا :-

 يجب أن نعرف جيدا أن هناك العديد من الطرق لكتابة كود ما ويكون شكله مختلف عن الكود الآخر ولكن نتيجته واحده

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

 

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

 

 

نبدأ التطبيق العملى الأول بهذه السلسلة التعليمية

 

في المثال المرفق ستجد ورقتي عمل Invoice " " List" وسيتم إدخال البيانات في الورقه " Invoice " ثم بعد الإنتهاء نضغط على الزر لتنتقل في أماكن محدده بورقة العمل " List "

 

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

أتحدث الى نفسى الآن

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

 

 

 

 

إذن نقوم بعمل الآتى :

 

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

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

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

( B3 , D3 , A5 , D6 , B8 , D8 )

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

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

بمعنى ان

الخلية B3 بشيت الادخال سترحل الى خليه بالعمود B

الخلية D3 بشيت الادخال سترحل الى خليه بالعمود C

الخلية A5 بشيت الادخال سترحل الى خليه بالعمود D

الخلية D6 بشيت الادخال سترحل الى خليه بالعمود E

الخلية B8 بشيت الادخال سترحل الى خليه بالعمود F

الخلية D8 بشيت الادخال سترحل الى خليه بالعمود G

 

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

 

 

 

شكل شيت الادخال

X6gSmj.jpg

 

 

شكل شيت تجميع البيانات

pI25r7.jpg

 

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

 

 

 

 

 

نبدأ بعون الله

بحفظ ما سبق حتى لا يضيع هباء اثر انقطاع التيار أو خلافه

ثم نقوم بفتح محرر الأكواد بالضغط على ALT+F11

ثم نقوم بإدراج موديول بالضغط على ادراج أو INSERT

ونختار موديول تلقائيا سيتم فتح الموديول وربط الكود بزر للترحيل

 

شكل اجمالى الكود المرفق بالمثال العملى بالموديول 1 كالتالى :

Sub MZM_MoveData()
Dim EndRow As Long
If Sheets("Invoice").Range("B3").Value = "" Or Sheets("Invoice").Range("D3").Value = "" Or Sheets("Invoice").Range("a5").Value = "" Or Sheets("Invoice").Range("D6").Value = "" Or Sheets("Invoice").Range("B8").Value = "" Or Sheets("Invoice").Range("D8").Value = "" Then
MsgBox prompt:="تأكد من إدخال كافة البيانات", Title:="خطأ"
Else
EndRow = Sheets("List").Range("A1").CurrentRegion.Rows.Count
Sheets("List").Cells(EndRow + 1, 1).Value = EndRow
Sheets("List").Cells(EndRow + 1, 2).Value = Sheets("Invoice").Cells(3, 2).Value
Sheets("List").Cells(EndRow + 1, 3).Value = Sheets("Invoice").Cells(3, 4).Value
Sheets("List").Cells(EndRow + 1, 4).Value = Sheets("Invoice").Cells(5, 1).Value
Sheets("List").Cells(EndRow + 1, 5).Value = Sheets("Invoice").Cells(6, 4).Value
Sheets("List").Cells(EndRow + 1, 6).Value = Sheets("Invoice").Cells(8, 2).Value
Sheets("List").Cells(EndRow + 1, 7).Value = Sheets("Invoice").Cells(8, 4).Value
Sheets("Invoice").Range("B3,D3,A5,D6,B8,D8").ClearContents
MsgBox prompt:="تم ترحيل البيانات بنجاح", Title:="رسالة تأكيد"
End If
End Sub

نكتب بداية ونهاية الكود كما أشرنا سابقا

البداية بكلمه SUB ثم اسم للكود  ثم القوسين المغلقين ()

والنهاية تلقائيا يتم كتابتها END SUB

 

هنا لدينا عدد معلوم من الخلايا التى ستستخدم كناقل للشيت الآخر اى سيتم تخزينها لدى ذاكرة الجهاز ومن ثم سيتم ترحيلها ووضعها بالشيت الثانى

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

Dim EndRow As Long

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

 

ماذا نفعل ؟

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

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

If Sheets("Invoice").Range("B3").Value = "" Or Sheets("Invoice").Range("D3").Value = "" Or Sheets("Invoice").Range("a5").Value = "" Or Sheets("Invoice").Range("D6").Value = "" Or Sheets("Invoice").Range("B8").Value = "" Or Sheets("Invoice").Range("D8").Value = "" Then

وإلا سنقوم بتنبيه المستخدم أو انا لو نسيت خليه مثلا برساله تظهر لنا 

"خطأ", Title:= "تأكد من إدخال كافة البيانات"  MsgBox prompt:=

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

Else
EndRow = Sheets("List").Range("A1").CurrentRegion.Rows.Count
Sheets("List").Cells(EndRow + 1, 1).Value = EndRow
Sheets("List").Cells(EndRow + 1, 2).Value = Sheets("Invoice").Cells(3, 2).Value
Sheets("List").Cells(EndRow + 1, 3).Value = Sheets("Invoice").Cells(3, 4).Value
Sheets("List").Cells(EndRow + 1, 4).Value = Sheets("Invoice").Cells(5, 1).Value
Sheets("List").Cells(EndRow + 1, 5).Value = Sheets("Invoice").Cells(6, 4).Value
Sheets("List").Cells(EndRow + 1, 6).Value = Sheets("Invoice").Cells(8, 2).Value
Sheets("List").Cells(EndRow + 1, 7).Value = Sheets("Invoice").Cells(8, 4).Value
Sheets("Invoice").Range("B3,D3,A5,D6,B8,D8").ClearContents
"رسالة تأكيد", Title:= "تم ترحيل البيانات بنجاح"  MsgBox prompt:=
End If

شرح الجزئية السابقة :

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

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

Sheets("List").Cells(EndRow + 1, 2).Value

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

 

نلاحظ أن

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

( 8, 4 ) ورقم 8  يعنى الصف ورقم 4  يعنى العمود اى الخلية ( D8 )

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

-       السطر العاشر ظهور رساله تأكيد بنجاح عملية الترحيل

سؤال : هل هناك طرق أخرى لكتابه هذا الكود بشكل آخر ؟

الاجابة : نعم

فعلى سبيل المثال لا الحصر وفى ضوء ما تم الإشارة اليه بالدروس السابقة 

Sub MoveData()
Set li = ThisWorkbook.Sheets("List")
Set inv = ThisWorkbook.Sheets("Invoice")

Dim EndRow As Long
If inv.Range("B3").Value = "" Or inv.Range("D3").Value = "" Or inv.Range("a5").Value = "" Or inv.Range("D6").Value = "" Or inv.Range("B8").Value = "" Or inv.Range("D8").Value = "" Then
MsgBox prompt:="تأكد من إدخال كافة البيانات", Title:="خطأ"
Else
EndRow = Sheets("List").Range("A1").CurrentRegion.Rows.Count
li.Cells(EndRow + 1, 1).Value = EndRow
li.Cells(EndRow + 1, 2).Value = inv.Cells(3, 2).Value
li.Cells(EndRow + 1, 3).Value = inv.Cells(3, 4).Value
li.Cells(EndRow + 1, 4).Value = inv.Cells(5, 1).Value
li.Cells(EndRow + 1, 5).Value = inv.Cells(6, 4).Value
li.Cells(EndRow + 1, 6).Value = inv.Cells(8, 2).Value
li.Cells(EndRow + 1, 7).Value = inv.Cells(8, 4).Value
inv.Range("B3,D3,A5,D6,B8,D8").ClearContents
MsgBox prompt:="تم ترحيل البيانات بنجاح", Title:="رسالة تأكيد"
End If
End Sub

تم إضافة تخصيص من خلال جمله SET 

لتعريف اسماء الشيتات المستخدمه

وأضفنا جملة ThisWorkbook 

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

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

 

بالمرفقات 

 

 

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

 

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

شرح الترحيل.rar

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

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

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



×
×
  • اضف...

Important Information