بحث مخصص من جوجل فى أوفيسنا
Custom Search
|
-
Posts
2,850 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
7
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو إبراهيم ابوليله
-
السلام عليكم ورحمة الله وبركاته الدرس الثاني عشر 12-Window Events وسوف نتناول فى هذه الدرس الاتى تغيير التسمية التوضيحية لإسم نافذة المصنف النشط تنشيط نافذة معينه مفتوحه إخفاء أو إظهار نافذة مصنف مفتوح إغلاق نافذة مصنف فتح نافذه جديد لمصنف معين تكبير أو تصغبر أو الوضع العادى لنافذة مصنف عمل زووم لنافذة معينه إخفاء علامات التبويب لأوراق العمل فى مصنف معين إخفاء رؤوس الأعمدة والصفوف فى مصنف معين إخفاء شريط التمرير الأفقي فى مصنف معين إخفاء شريط التمرير العمودي فى مصنف معين عرض جميع صيغ المعدلات فى مصنف معين إخفاء خطوط الشبكةفى مصنف معين تلوين خطوط الشبكة فى مصنف معين عمل معاينة لفواصل الصفحات فى مصنف معين إخفاء القيم الصفرية فى مصنف معين اظهار اسم الورقة الحالية في رساله اظهار عنوان الخلية النشطة فى مصنف معين في رساله اظهار عنوان مدى محدد في رساله تجميد الألواح داخل فى مصنف معين عمل انقسام فى مصنف معين معرفة عدد الأجزاء المنقسمة فى مصنف معين ................................................................................................................................................................................. تغيير التسمية التوضيحية لإسم نافذة المصنف النشط لاحظ هنا ان اسم المصنف المفتوح امامك هو LEARN--VBA.xlsb طب لو احنا عايزين نغيره ونخليه مثلا مش مهم تكون محترفvbaالمهم تكون عندك معلومات عنvba.xlsb سيكون شكل الكود Sub A_Window_Caption() ActiveWindow.Caption = "مش مهم تكون محترفvbaالمهم تكون عندك معلومات عنvba.xlsb" End Sub تنشيط نافذة معينه مفتوحه كما يتضح من الصوره ان هناك اكثر من نافذة اكسيل مفتوحه ولكن المصنف النشط هو 9-sky201.xlsb فلو افترضنا اننا نريد اننا عايزين نخلى المصنف النشط هو LEARN--VBA.xlsb ليصبح هكذا سيكون شكل الكود Sub Windows_Activate() Windows("LEARN--VBA.xlsb").Activate End Sub إخفاء أو إظهار إطار نافذة مصنف مفتوح كما يتضح من الصوره اننا لدينا اكثر من مصنف مفتوح فلو اردنا اخفاء نافذه المصنف 9-sky201.xlsb سيكون شكل الكود Sub Windows_Visible() ' اخفاء Windows("9-sky201.xlsb").Visible = False ' اظهار 'Windows("9-sky201.xlsb").Visible = True End Sub إغلاق نافذة مصنف فلو اردنا اغلاق نافذة المصنف 9-sky201.xlsb سيكون الكود كالاتى Sub Windows_CLOSE() Windows("9-sky201.xlsb").Close = True End Sub فتح نافذه جديد لمصنف معين فى الصوره يتضح ان المصنف LEARN--VBA.xlsb مفتوح مره واحده ولفتحه مرتين هكذا لاحظ فى الصوره انه تم اضاف شيت جديد باسم افتراضى LEARN--VBA.xlsb:2 وتم تميز المصنف الاول باسم LEARN--VBA.xlsb:1 وعند غلق اى من المصنفين يتم اعادة اسم المصنف كما كان LEARN--VBA.xlsb سيكون الكود كالاتى Sub NewWindow_() Windows("LEARN--VBA.xlsb").NewWindow End Sub تكبير أو تصغبر أو الوضع العادى لنافذة مصنف سيكون الكود كالاتى Sub WindowState_() 'الوضع العادى Windows("LEARN--VBA.xlsb").WindowState = xlNormal 'تكبير 'Windows("LEARN--VBA.xlsb").WindowState = xlMaximized ' تصغير 'Windows("LEARN--VBA.xlsb").WindowState = xlMinimized End Sub عمل زووم لنافذة معينه سيكون الكود كالاتى Sub WindowZOOM_() Windows("LEARN--VBA.xlsb").Zoom = 80 End Sub إخفاء علامات التبويب لأوراق العمل فى مصنف معين لاحظ اختفاء اسماء الشيتات بعد تنفيذ الكود سيكون الكود كالاتى Sub DisplayWorkbookTabs_() ' اخفاء Windows("LEARN--VBA.xlsb").DisplayWorkbookTabs = False ' اظهار 'Windows("LEARN--VBA.xlsb").DisplayWorkbookTabs = True End Sub إخفاء رؤوس الأعمدة والصفوف بمصنف معين سيكون الكود كالاتى Sub DisplayHeadings_() ' اخفاء Windows("LEARN--VBA.xlsb").DisplayHeadings = False ' اظهار 'Windows("LEARN--VBA.xlsb").DisplayHeadings = True End Sub إخفاء شريط التمرير الأفقي فى مصنف معين سيكون الكود كالاتى Sub DisplayHorizontalScrollBar_() ' اخفاء Windows("LEARN--VBA.xlsb").DisplayHorizontalScrollBar = False ' اظهار 'Windows("LEARN--VBA.xlsb").DisplayHorizontalScrollBar = True End Sub إخفاء شريط التمرير العمودي فى مصنف معين سيكون الكود كالاتى Sub DisplayVerticalScrollBar_() ' اخفاء Windows("LEARN--VBA.xlsb").DisplayVerticalScrollBar = False ' اظهار 'Windows("LEARN--VBA.xlsb").DisplayVerticalScrollBar = True End Sub عرض جميع صيغ المعدلات فى مصنف معين سيكون الكود كالاتى Sub DisplayFormulas_() ' اخفاء Windows("LEARN--VBA.xlsb").DisplayFormulas = False ' اظهار 'Windows("LEARN--VBA.xlsb").DisplayFormulas = True End Sub انتظرو باقى الدرس
-
اخى سليم كود اكثر من رائع بارك الله فيك ومنتظرين المزيد من اعمالك الرائعه تقبل تحياتى
-
السلام عليك ورحمة الله وبركاته اخى الصقر اخى محمد حسن اخى ياسر العربى اخى ياسر خليل كلها محاولات جميله والاجمل التنوع مشكورين جميعا .............................. واسمحو لى بالمشاركه معكم على الرابط الاتى http://www.officena.net/ib/topic/50183-اهداء-الى-المنتدى-بعيدا-عن-الاكواد-تفقيط-المبالغ-باستخدام-المعادلات/ تقبلوا تحياتى
-
السلام عليكم ورحمة الله وبركاته الدرس الحادي عشر 11-Worksheet&Workbook Events احداث الورك بوك والورك شيت وسوف نتناول فى هذه الدرس الاتى Worksheet_SelectionChange Worksheet_Activate Worksheet_Deactivate Worksheet_Change Worksheet_BeforeDoubleClick Worksheet_BeforeRightClick Workbook_Open Workbook_BeforeClose Workbook_BeforeSave Workbook_AfterSave Workbook_SheetActivate Workbook_SheetBeforeDoubleClick Workbook_SheetBeforeRightClick Workbook_NewSheet Workbook_SheetChange Workbook_SheetSelectionChange ............................................................................................. سوف نتناول هنا بعض الاكواد التى توضع فى حدث الورقه مع محاولة توضيح كيفية استخدامها كيفية اضافة الاكواد الخاصه بالحدث Worksheet يتم ذلك عن طريق الدخول الى محرر الاكواد ثم اختيار الشيت الذى نريد تطبيق الكود فيه والضغط مرتين على اسم الشيت فى محرر الاكواد لفتح نافذه الاكواد ثم كتابة الكود داخل النافذه ده طبعا على سبيل المثال بالنسبه لاسم الشيت ولكن اختيار الشيت هيكون على اساس اسماء الشيتات الى عندك انت طبعا Worksheet_SelectionChange هنا يتم تنفيذ الامر كلما يحدث تغير داخل النطاق المحدد شكل الكود Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub Worksheet_Activate هنا يتم تنفيذ الامر كلما يتم الدخول الى الورقه شكل الكود Private Sub Worksheet_Change(ByVal Target As Range) End Sub Worksheet_Deactivate هنا يتم تنفيذ الامر كلما يتم الدخول الى اى ورقه داخل الشيت اى الخروج من الورقه التى بها الكود شكل الكود Private Sub Worksheet_Deactivate() End Sub Worksheet_Change هنا يتم تنفيذ الامر كلما يتم حدوث تغير فى الورقة شكل الكود Private Sub Worksheet_Change(ByVal Target As Range) 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 انتهينا من معظم احداث الورك شيت ................................................................................................................................................................................................................................................................................... نتناول الان معظم احداث الورك بوك الفرق هنا ان هذا الكود يوضه فى حدث الورك بوك وطالما وضع فى حدث الورك بوك فيكون قابل للتنفيذ على جميع الشيتات الموجوده فى الورك بوك وليس على شيت بعينه لكتابة الكود داخل حدث الورك بوك ندخل الى محرر الاكواد ثم نضغط على ThisWorkbook مرتين ثم ندخل الى نافذة محرر الاكواد ونكتب فيها الكود Workbook_Open هنا يتم تنفيذ الامر عند فتح الملف شكل الكود Private Sub Workbook_Open() End Sub Workbook_BeforeClose هنا يتم تنفيذ الامر قبل غلق الملف شكل الكود Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub Workbook_BeforeSave هنا يتم تنفيذ الامر قبل حفظ الملف شكل الكود Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub Workbook_SheetActivate هنا يتم تنفيذ الامر عند التنقل بين اوراق الملف شكل الكود Private Sub Workbook_SheetActivate(ByVal Sh As Object) End Sub Workbook_AfterSave هنا يتم تنفيذ الامر بعد حفظ الملف شكل الكود Private Sub Workbook_AfterSave(ByVal Success As Boolean) End Sub Workbook_SheetBeforeDoubleClick هنا يتم تنفيذ الامر كلما يتم الضغط على زر الماوس الايسر مرتين فى كل اوراق الملف شكل الكود Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) End Sub Workbook_SheetBeforeRightClick هنا يتم تنفيذ الامر كلما يتم الضغط على زر الماوس الايمن فى كل اوراق الملف شكل الكود Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) End Sub Workbook_NewSheet هنا يتم تنفيذ الامر كلما يتم اضافة ورقه جديده شكل الكود Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub Workbook_SheetChange هنا يتم تنفيذ الامر عند حدوث تغير فى اى ورقه من اوراق العمل شكل الكود Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) End Sub Workbook_SheetSelectionChange هنا يتم تنفيذ الامر عند حدوث تغير فى نطاق المحدد فى اى ورقه من اوراق العل شكل الكود Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) End Sub انتهينا من معظم احداث الورك شيت ............................................... طبعا فى كتير بيسأل دلوقتى احنا استفدنا ايه من الاكواد دى ولو عايزين نستخدمها هنستخدما ازاى امثـلـــــــــــــــــــــــه عـمـلـيـــــــــــــــــــــه Worksheet_SelectionChange نفترض اننا عايزين حينما يتم التنقل فى الخلايا من a3:a10 يتم ادخال رقم الصف فى الخليه المقابله فى العمود2 يعنى لما ننتقل الى الخليه a3 يتم كتابة رقم الصف فى الخليه b3 ولما ننتقل فى a4 يتم ادخال رقم الصف فى b4 وهكذا كيف نستطيع ان نقوم بعمل ذلك جرب استخدام الكود الاتى Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row > 10 Then Exit Sub ' فى حالة ان السطر اكبر من 10يتم الخروج من الكود وعدم تنفيذ شئ If Target.Column = 1 Then 'فى حالة العمود الاول If Target.Row >= 3 Then 'فى حالة ان السطر اكبر من او يساوى السطر3 Target.Offset(0, 1).Value = Target.Offset(0, 0).Row ' يتم اعطاء الخليه التى تلى خلية ادخال البيانات بعمود رقم السطر الحالى End If End If End Sub Worksheet_Change نفترض اننا عايزين حينما يتم الكتابه فى الخلايا من a3:a10 يتم ادخال رقم الصف فى الخليه المقابله فى العمود2 يعنى لما نكتب فى الخليه a3 يتم كتابة رقم الصف فى الخليه b3 ولما نكتب فى a4 يتم ادخال رقم الصف فى b4 وهكذا كيف نستطيع ان نقوم بعمل ذلك جرب استخدام الكود الاتى Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Row > 10 Then Exit Sub ' فى حالة ان السطر اكبر من 10يتم الخروج من الكود وعدم تنفيذ شئ If Target.Column = 1 Then 'فى حالة العمود الاول If Target.Row >= 3 Then 'فى حالة ان السطر اكبر من او يساوى السطر3 Target.Offset(0, 1).Value = Target.Offset(0, 0).Row ' يتم اعطاء الخليه التى تلى خلية ادخال البيانات بعمود رقم السطر الحالى End If End If End Sub Worksheet_Activate نفترض اننا عايزين اول ما ندخل على الشيت رقم 3 يتم ظهور رسالة ترحيب كيف يتم عمل ذلك جرب وضع الكود الاتى فى حدث الشيت رقم 3 Private Sub Worksheet_Activate() MsgBox "ابراهيم محمد" End Sub Worksheet_Deactivate نفترض اننا عايزين او ما نخرج من الشيت رقم3 ونروح لاى شيت اخر يتم ظهور رسالة ترحيب كيف يتم عمل ذلك جرب وضع الكود الاتى فى حدث الشيت رقم 3 Private Sub Worksheet_Deactivate() MsgBox "ابراهيم محمد" End Sub Worksheet_BeforeDoubleClick نفترض اننا عايزين لما نضغط فى دبل كليك فى العمود الاول فقط تظهر لنا رسالة ترحيب كيف يتم عمل ذلك جرب وضع الكود الاتى فى حدث الشيت رقم 3 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column > 1 Then Exit Sub If Target.Column = 1 Then MsgBox "ابراهيم محمد" End If End Sub هذا على سبيل المثال يمكنك اضافة الاكود التى تريدونها على حسب احتياجكم اتمنى ان يكون الدرس مفيدا مرفق شيت اكسيل به التطبيقات learnvba.rar تقبلوا تحياتى learnvba.rar
-
اخى جرب المرفق الاتى نموزج-فاتورة-بدون-فورم-نهائى.rar
-
اخى حسام الف مليون مبروك عليك الترقيه ترقيه مستحقه باذن الله الى مزيد من التقدم فى انتظار المزيد من اعمالك الجيده تقبل تحياتى
- 16 replies
-
- 1
-
- تهانينا
- تستحقها بجدارة
-
(و1 أكثر)
موسوم بكلمه :
-
اخى الايمان اعتزر بشده لعدم الرد لكننى لم ارى مشاركتك لارد عليها جايز ده بسبب الانشغال فى امور الحياه عموما على العموم اكرر الاعتزار --------------------------- اخى عبد العزيز مشكورا على الرد وبالفعل هذه النسخ الثلاث تفى بالغرض تقبلوا تحياتى
-
اخى محمد حسن منور الموضوع وطبعا غيابك عنا يحزننا كثيرا فحن دائما ما نريد الاستمتاع بكلامك الطيب بارك الله فيك واتمنى لك التوفيق تقبل تحياتى .............................................. اخى elameen منور المشاركه واتمنى لك التويفيق اليك الملف كاملا تقبل تحياتى نموزج-فاتورة-بدون-فورم-نهائى.rar learnvba.rar
-
السلام عليكم ورحمة الله وبركاته الدرس العاشر 10-InputBox صندوق الإدخال تستخدم InputBox كوسيله لادخال البيانات او للتحقق من بيانات معينه وللتعرف على كيفية استخدامها لابد لنا من التعرف على محتواها InputBox("القيمه الافتراضيه", "العنوان", "النص") مثال على كيفية استخدامها فى ادخال البيانات نريد ادخال اسم hima فى الخليه A3 عن طريق InputBox سيكون شكل الكود كالاتى Sub InputBox_() Dim hima As String 'hima متغير من نوع النصوص hima = InputBox("النص", "العنوان", "hima") ' InputBoxقيمة himaاعطاء المتغير Range("a3") = hima 'InputBox اى himaتساوى قيمة المتغير a3 هنا نقول ان الخليه End If End Sub مثال على كيفية استخدامها فى التحقق من البيانات نريد ادخال اسم hima فى الخليه A3 عن طريق InputBox ونريد ان تظهر لناInputBox نقوم بادخال باسوورد123 كشرط لادخال لظهور InputBox اخرى يتم استخدامها فى ادخال البيانات ولعمل ذلك قم بكتابة الكود الاتى Sub InputBox_1() Dim h As Integer h = 123 'hima متغير من نوع النصوص hima = InputBox("ادخل الرقم السرى", "العنوان") If IsNull(hima) Or hima = "" Then GoTo xx ' xxفى حالة الفراغ يتم الذهاب الى If h = hima Then ' hفى حالة تساوى القيمة المدخله مع المتغير hima1 = InputBox("النص", "العنوان") Range("a3") = hima1 'InputBox اى himaتساوى قيمة المتغير a3 هنا نقول ان الخليه Else xx: MsgBox "كلمة مرور غير صحيحة" & Chr(13) & " الرجاء اعادة ادخال كلمة المرور ", vbOKOnly End If End Sub اتمنى ان يكون الدرس مفيدا مرفق شيت اكسيل به التطبيقات learnvba.rar تقبلوا تحياتى learnvba.rar
-
السلام عليكم ورحمة الله وبركاته الدرس التاسع 9-MsgBox الرساله وسوف نتناول فى هذه الدرس الاتى شكل السطر الخاص بالرساله الاسماء الخاصه بالازرار والارقام التى يمكن استبدال الاسم بها اضافة سطر فاصل فى الرساله كيفية استخدام الجمل الشرطيه if مع MsgBox كيفية استخدام Select Case مع MsgBox شكل السطر الخاص بالرساله نحتاج الى استخدام الرسائل داخل الاكواد لتذكرينا بشئ معين او تنبيهنا بشئ معين كهذا ولمعرفة كيفية عمل ذلك دعونا نستعرض السطر الخاص بالكود الخاص بالرساله MsgBox([النص], [الازرار], [العنوان]) النص-----هنا يتم كتابة نص الرساله التى سوف تظهر لك الازرار---اختيار الازرار التى تظهر فى الرسالهyes, no, cancelويوجد ايضا ازرار اخرى العنوان---عنوان الرساله راجع الصوره الاتيه ولتنفيذ رساله بهذا الشكل نقوم بكتابة الكود الاتى Sub msgbox_() MsgBox "لاتنسونى بصالح الدعاء", vbYesNoCancel, "اللهم تقبل من صالح الاعمال" End Sub وفى هذا الكود قلنا ان محتوى النص -- لاتنسونى بصالح الدعاء تكون الازرار--الموجوده فيها yes-no-cancel يكون العنوان-- اللهم تقبل من صالح الاعمال ولو افترضنا اننا نريد اظهار الزر yes فقط نقوم باستبدال السطر الاتى vbYesNoCancel ب السطر الاتى vbYes اما اذا اردنا اظهار الزر yes والزر no يكون سطر الكود كالاتى vbYesNo ملحوظه بسيطه يمكن الاستغناء عن كتابة الاسم الخاص بكل زر واستبدال الاسم بالرقم الخاص بالزر لاحظ الكود الاتى Sub msgbox_1() MsgBox "لاتنسونى بصالح الدعاء", 3, "اللهم تقبل من صالح الاعمال" End Sub لاحظ اننا استخدمنا الرقم 3 بدلا من vbYesNoCancel وذلك من اجل اظهار الازرار yes - no -cancel الاسماء الخاصه بالازرار والارقام التى يمكن استبدال الاسم بها ولمعرفة المزيد من الاسماء الخاصه بالازرار والارقام التى تعبر عن كل زر وكيفية كتابة الاكواد راجع الصوره الاتيه اضافة سطر فاصل فى الرساله هناك طريقتان لعمل ذلك الطريقه الاولى تعتمد هذه الطريقه على استخدام الخاصيه Chr مع استخدام الرقم 10 الخاص باضافة سطر فاصل وتكون شكل الرساله كالاتى وبالتالى نجد شكل الكود كالأتى Sub Line_MsgBox() MsgBox "النص الاول" & Chr(10) & "النص الثانى" & Chr(10) & "النص الثالث", vbYesNoCancel + vbDefaultButton3, "العنوان" End Sub الطريقه الثانيه تعتمد على استخدام vbNewLine وتكون شكل الرساله كالاتى وبالتالى نجد شكل الكود كالأتى Sub Line_MsgBox1() MsgBox "النص الاول" & vbNewLine & "النص الثانى" & vbNewLine & "النص الثالث", vbYesNoCancel + vbDefaultButton3, "العنوان" End Sub كيفية استخدام الجمل الشرطيه if مع MsgBox مثال نفترض اننا لدينا الخليه a51 نريد ادخال الاسم ابراهيم فيها ونريد ان تظهر لنا رساله تفيد هل تريد ادخال الاسم فى الخليه نعم ام لا--ثم اذا كانت الاجابه بنعم تظهر لنا رساله تفيد بأنه تم ادخال الاسم بنجاح واما اذا كانت الاجابه ب لا تظهر رساله تفيد بانه قد تم الالغاء كما يتضح من الصوره فى حالة الضغط على نعم فى حالة الضغط على زر لا ولمعرفة كيفية عمل ذلك نستعرض محتوى الرساله النص----هل نريد ادخال الاسم فى الخليه a51 نعم ام لا الازرار-- زر نعم---زر لا العنوان--تنبيه راجع الكود الاتى Sub if_MsgBox() Range("a51").ClearContents ' حزف محتوى الخليه Dim Answer As String 'Answer متغير تم تعريفه على انه من النوع نصوص Answer = MsgBox("هل نريد ادخال الاسم فى الخليه a51 نعم ام لا", vbYesNo, "تنبيه") If Answer = vbYes Then Range("a51") = "إبراهيم" MsgBox "تم ادخال الاسم بنجاح", vbOKOnly, "تنبيه" ElseIf Answer = vbNo Then MsgBox "تم إلغاء عملية الادخال", vbOKOnly, "تنبيه" End If End Sub كيفية استخدام Select Case مع MsgBox مثال نفترض اننا لدينا الخليه a60 نريد ادخال الاسم أبوليله فيها ونريد ان تظهر لنا رساله تفيد هل تريد ادخال الاسم فى الخليه نعم ام لا--ثم اذا كانت الاجابه بنعم تظهر لنا رساله تفيد بأنه تم ادخال الاسم بنجاح واما اذا كانت الاجابه ب لا تظهر رساله تفيد بانه قد تم الالغاء كما يتضح من الصوره فى حالة الضغط على نعم فى حالة الضغط على زر لا ولمعرفة كيفية عمل ذلك نستعرض محتوى الرساله النص----هل نريد ادخال الاسم فى الخليه a60 نعم ام لا الازرار-- زر نعم---زر لا العنوان--تنبيه راجع الكود الاتى Sub SelectCase_MsgBox() Range("a60").ClearContents Dim lReply As Long Reply = MsgBox("هل نريد ادخال الاسم فى الخليه a60 نعم ام لا", vbYesNo, "تنبيه") Select Case Reply Case vbYes Range("a60") = "أبوليله" MsgBox "تم ادخال الاسم بنجاح", vbOKOnly, "تنبيه" Case vbNo MsgBox "تم إلغاء عملية الادخال", vbOKOnly, "تنبيه" End Select End Sub اتمنى ان يكون الدرس مفيدا مرفق شيت اكسيل به التطبيقات learnvba.rar تقبلوا تحياتى learnvba.rar
-
اخى واستاذى محمد ناصر ...................... بالنسبه لطريقة الحل الخاصه بى فبصراحه انا جربت استخدام on error resume next .............................. طبعا الحل المقدم من حضرتك متقن و جميل والفكره هى الاجمل الكود يعمل بنجاح ولكن اذا جاء الميعاد وخرجت الرساله وقمنا بغلق الملف ثم قمنا بارجاع تاريخ الجهاز للخلف ثم اعدنا فتح الملف سنجد انه يمكننا الدخول الى الملف ارجو التعديل انا طبعا حاولت تخطى هذه المشكله والحمد لله نجحت فى ذلك ولكنى اطمع فى ان ارى طريقتك فى حل هذا اللغز تقبل تحياتى
-
اخى عبد العزيز اشكرك على الكلمات الطيبه بارك الله فيك واسأل الله ان يزيدك من فضله وعلمه ............................................................ ولكن صبرا صبرا فلم ننتهى من هذه الدروس حتى الان وكما ذكرنا فى عنوان الموضوع انك باذن الله لن تحتاج الى السؤال حينما تتعامل مع VBA فى الحالات البسيطه بحيث يكون لديك معلومات تستطيع بها تنفيذ مطالبك وطبعا من ضمن هذه الدروس سيكون الترحيل باذن الله تقبل تحياتى
-
اخى محمد لازلنا فى شرح الدروس اما مرحلة التطبيقات ستاتى لاحقا تقبل تحياتى اخى واستاذى عادل طبعا شرف كبير انك تكون احد المشاركين والمتابعين للموضوع بارك الله فيك تقبل تحياتى اخى ابو يوسف ملوحوظه فى محلها وان كنت اخدت بالى منها وللكن المشكله ان ارقام المشاركات فى النسخه الجديده للمنتدى مكنتش بتظهر وبعدين بدأت تظهر وبعدين معدتش بتظهر شوفت انت بقى اللغبطه دى بس على العموم ان شاء الله هيكون فيه رابط المشاركات الخاصه بكل درس تقبل تحياتى
-
ياه KHMB فينك من زمان ياراجل لسه فاكر او مشاكه ما بينا اعتقد كانت بخصوص فاتوره على الاكسيل واعتقد ان بسببك تم انتاج العمل نموذج فاتوره بدون فورم على العموم متغيبش عننا كتير تقبل تحياتى اخى عبد العزيز طبعا الشكر موصول لاخونا KHMB على التوضيح وتحيه خاصه ليك طبعا على المتابعه المستمره للموضوع والتشجيع المستمر ليا علشان نستكمل الموضوع وان شاء الله رغم قله المشاهده وقلة المتابعين الا اننى مصر على عرض المعلومات التى لدى لعل شخص واحد فقط يستفيد منها تقبل تحاتى
-
السلام عليكم ورحمة الله وبركاته الدرس الثامن 8-Loop الحلقات التكراريه وسوف نتناول فى هذه الدرس الاتى لماذا نستخدم الحلقات التكراريه انواع الحلقات التكراريه الخروج من الحلقه التكراريه كيفية استخدام اكثر من حلقه داخل الكود ......................................................................... لماذا نستخدم الحلقات التكراريه انا شخصيا بعتبر الحلقات التكراريه واحده من اهم المواضيع التى يجب معرفتها حينما يتم الدخول الى عالم vba يتم استخدام الحلقات التكراريه لتنفيذ اكثر من امر فى وقت واحد مما يوفر الوقت ولتوضيح ذلك راجع المثال الاتى نفترض اننا لدينا مجموعه من الارقام مثلا 7 ارقام (1-2-3-4-5-6-7) ونريد ادخال هذه الارقم فى السطر الثامن بداية من العمود الخامس اى العمود e فكيف سنقوم بعمل ذلك طبعا الى معندوش فكره عن كيفية استخدام الحلقات التكراريه هيستخدم الكود الاتى Sub enterdata() [e8] = "1" [f8] = "2" [g8] = "3" [h8] = "4" [i8] = "5" [j8] = "6" [k8] = "7" End Sub اى سيقوم بالاشاره الى كل خليه على حده واعطاء كل خليه قيمتها كما هو متضح من الصوره وبالتالى بعد كتابة هذه الكود وتخصيص زر لتنفيذه او بالوقوف داخل الكود بالماوس ثم الضغط على f5 سوف يتم ملئ الخلايا بالبيانات كما فى الصوره دعونا الان نتطرق الى كيفيه تنفيذ ذلك بالحلقات التكراريه انواع الحلقات التكراريه 1- FOR 2- WHILE 3- DO ................................................................................................................................................................................................................................................................ الحلقه الاولى for …next هذه الحلقه تبدأ بكلمة FOR وتنتهى بكلمة NEXT وفيما بين الكلميتن هو ما سوف يتم تنفيذه للتوضيح اكتر For بداية الحلقه = اسم الحلقه To طريقه تنفيذ الحلقه] نهايةالحلقه] [ماسيتم تنفيذه داخل الحلقه] [Exit For] الخروج من الحلقه Next استكمال الحلقه حت النهاية وهنا يجب ان نشير الى ان اى حلقه تكراريه لابد ان يكون لها اسم يعبر عنها وليكن مثلا H ثم يجب ان يكون لها بدايه ولها نهايه وليكن ستبدأ من 1 وتنتهى فى 10 ثم سيكون هناك ما ينفذ داخل الحلقه والمقصود بطريقة تنفيذ الحلقه اى هل سيتم تنفيذها خطوه بخطوه وهذا هو الشائع فى الاستخدام ام كل خطويتن ام كل ثلاث خطوات وهكذا ولتطبيق ذلك سنتعرف على كيفية استخدام الحلقه for فى ادخال البيانات فلو اننا نريد ادخال الارقام من 1 الى 4 فى السطر 26 بداية من العمود 8 كيف سنقوم بعمل ذلك 1-نعطى الحلقه اسم معين FOR H H 2-نحدد البدايه 8 ونحدد النهاية 11 FOR H =8 TO 11 لاحظ ان عدد الحلقات هنا 4 عباره عن 8و9و10و111 3-ماسيتم تنفيذه Cells(26, h) = h - 7 4-استكمال الحلقه NEXT وبالتالى سيكون شكل الكود كالاتى Sub enterdata_for() For h = 8 To 11 ' h----- متغير تم تعريه على انه يبدأ من 8 وينتهى عند 11 ' اى ان عدد حلقاته هى 4 عباره عن 8ثم9ثم10ثم11 Cells(26, h) = h - 7 ' هنا يتم تنفيذ الكود ' هنا نقول ان الخليه التى تقع فى السطر26 وفى العمود من8الى11 ' مطروحا منه 7 ارقام ليصبح قيمة المتغير تساوى1hتساوى قيمة المتغير ' Cells(26, H)--- الرقم26هنا يدل على رقم السطر الذى سينفذ فيه الكود ' Cells(26, H)--- عباره عن العمود الذى سينفذ فيه الكود وبذلك يتضحh ' hلنا ان الكود سوف ينفذ على الاعمده من 8الى11 لانها تساوى قيمة المتغير ' h-7 يبدأ من الرقم8وينتهى عند الرقم11 فحينما ينم طرحhبما ان المتغير ' الرقم7 من المتغير بذلك تصبح قيمة المتغير تبدأ من الرقم1وتنتهى عند الرقم4 'وبذلك يكون تنفيذ الكود كالاتى ' الخليه فى السطر26وفى العمود5تساوى الرقم1ثم ' الخليه فى السطر26وفى العمود6تساوى الرقم2ثم ' الخليه فى السطر26وفى العمود6تساوى الرقم3ثم ' وهكذا حت نصل الى اخر الحلقه التكراريه اى العمود11 Next ' hتكرار عمل الكود حتى نهاية المتغير ' next---- forاقفال الحلقه التكراريه End Sub ويكون ناتج الكود بهذا الشكل اما اذا اردنا تنفيذ الكود على الخلايا بشكل عمودى بدلا من الخلايا الافقيه بمعنى لو اننا اردنا مثلا تنفيذ نفس الكود على الخلايا من h23 الى h26 اى فى الخلايا h23 و h24 و h25 و h26 كيف سيكون شكل الكود الكود هيكون نفس الكود السابق ولكن ما سيختلف هو اننا سوف نعيد تغير قيمة المتغير h الخاص بالحلقه التكراريه ليصبح من 23 الى 26 ثم نقوم بتغير موضع المتغير h الخاص بالحلقه التكراريه من الصف الى العمود للتوضيح اكثر الفكره هكلها محصوره فى السطرين دول For h = 8 To 11 هنا طبعا قيمة المتغير h الخاص بالحلقه التكراريه من 8 الى 11 احنا عايزين نخليه يبقى من 23 الى 26 يبقى هيكون بالشكل ده For h = 23 To 26 وكمان فى السطر ده Cells(26, h) = h - 7 وطبعا احنا قولنا ان الجزئيه دى Cells(26 تعنى ان الكود سوف ينفذ على السطر 26 والجزئيه دى Cells( , h) تعنى انه هينفذ على العمود h وطبعا h احنا معرفينه على انه من8 الى 11 اى انه سينفذ على العمود 8 ثم العمود 9 ثم العمود10 ثم العمود11 .................................................................................................... طب حنا عايزين ننفذ الكود على العمود h اى العمود رقم 8 يبقى سطر الكود هيكون بالشكل ده Cells( , 8) وعلى السطور من 23 الى 26 وبما اننا عرفنا h على انه من 23 الى 26 يبقى سطر الكود هيصبح بالشكل ده Cells(h, ) وفى النهاية هنلاقى ان سطر الكود بالكامل بالشكل ده Cells(h,8 ) اى ان الكود سينفذ على السطور h الى احنا عرفناها على انها من 23 الى 26 وعلى العمود رقم 8 وبعد كده تأتى الجزئيه دى = h - 7 ولاننا كنا معرفين h يبدأ من الرقم 8 فطرحنا من h الرقم 7 للحصول على الرقم 1 الى هو اول رقم احنا عايزين ندخله فلا او خليه وبما اننا لسه بردو عايزين نخلى الرقم 1 هو اول رقم يتم ادخاله ولكننا قمنا بتغير قيمة المتغير h لتصبح من 23 وللحصول على الرقم 1 يبقى لابد اننا نطرح من المتغير h ما يعطينا الرقم 1 وبالتالى سنجد سطر الكود هيكون كده = h - 22 وفى النهاية سيكون شكل الكود كده Sub enterdata_for1() Dim h As Integer For h = 23 To 26 Cells(h, 8) = h - 22 Next End Sub ويكون ناتج الكود بهذا الشكل الحلقه الثانيه While سوف نتعرف على كيفيه استخدام الحلقه التكراريه While...Wend هذه الحلقه تبدأ بكلمة While وتنتهى بكلمة Wend وفيما بين الكلميتن هو ما سوف يتم تنفيذه للتوضيح اكتر While [ الشرط ] ما يتم تنفيذه Wend نهاية الحلقه فلو اننا نريد ادخال الارقام من 1 الى 4 فى السطر 38 بداية من العمود 8 كيف سيكون شكل الكود Sub EnterwhileWend() Dim h As Integer ' H--- متغير تم تعريفه على انه رقم صحيح h = 8 ' متغير تم تعريفه على انه يساوى الرقم8----- While h <= 11 ' هنا نقول ان الحلقه التكراريه تكون اقل من الرقم11او تساويه Cells(38, h) = h - 7 ' Cells(38, H)--- الرقم38هنا يدل على رقم السطر الذى سينفذ فيه الكود ' Cells(38, H)--- عباره عن العمود الذى سينفذ فيه الكود وبذلك يتضحh ' hلنا ان الكود سوف ينفذ بديةمن العمود8 لانها تساوى قيمة المتغير ' h-7 يساوى الرقم8 فحينما يتم طرحhبما ان المتغير ' الرقم7 من المتغير بذلك تصبح قيمة المتغير تساوى الرقم1 h = h + 1 'h = h + 1 هنا نقول انه يتم زياده قيمة المتغير بقيمة1صحيح مع كل ' حلقه تكراريه حتى نصل الى الشرط وهو ان يكون اقل من او يساوى11 Wend '-------'نهاية الحلقه While End Sub ويكون ناتج الكود بهذا الشكل الحلقه الثالثه Do تنقسم الى ثلاثة انواع النوع الاول Do While Loop فلو اننا نريد ادخال الارقام من 1 الى 4 فى السطر 57 بداية من العمود 8 كيف سيكون شكل الكود Sub EnterDoWhile() Dim h As Integer ' H--- متغير تم تعريفه على انه رقم صحيح h = 8 ' متغير تم تعريفه على انه يساوى الرقم8----- Do While h <= 11 ' هنا نقول ان الحلقه التكراريه تكون اقل من الرقم11او تساويه Cells(57, h) = h - 7 ' Cells(57, H)--- الرقم57هنا يدل على رقم السطر الذى سينفذ فيه الكود ' Cells(57, H)--- عباره عن العمود الذى سينفذ فيه الكود وبذلك يتضحh ' hلنا ان الكود سوف ينفذ بديةمن العمود8 لانها تساوى قيمة المتغير ' h-7 يساوى الرقم8 فحينما يتم طرحhبما ان المتغير ' الرقم7 من المتغير بذلك تصبح قيمة المتغير تساوى الرقم1 h = h + 1 'h = h + 1 هنا نقول انه يتم زياده قيمة المتغير بقيمة1صحيح مع كل ' حلقه تكراريه حتى نصل الى الشرط وهو ان يكون اقل من او يساوى11 Loop '-------'نهاية الحلقه Do While End Sub ويكون ناتج الكود بهذا الشكل النوع الثانى Do Loop While فلو اننا نريد ادخال الارقام من1 الى 4 فى السطر 67 بداية من العمود 8 كيف سيكون شكل الكود Sub EnterDo() Dim h As Integer ' H--- متغير تم تعريفه على انه رقم صحيح h = 8 ' متغير تم تعريفه على انه يساوى الرقم8----- Do Cells(67, h) = h - 7 ' Cells(67, H)--- الرقم67هنا يدل على رقم السطر الذى سينفذ فيه الكود ' Cells(67, H)--- عباره عن العمود الذى سينفذ فيه الكود وبذلك يتضحh ' hلنا ان الكود سوف ينفذ بديةمن العمود8 لانها تساوى قيمة المتغير ' h-7 يساوى الرقم8 فحينما يتم طرحhبما ان المتغير ' الرقم7 من المتغير بذلك تصبح قيمة المتغير تساوى الرقم1 h = h + 1 'h = h + 1 هنا نقول انه يتم زياده قيمة المتغير بقيمة1صحيح مع كل ' حلقه تكراريه حتى نصل الى الشرط وهو ان يكون اقل من او يساوى11 Loop While h <= 11 ' هنا نقول ان الحلقه التكراريه تكون اقل من الرقم11او تساويه '-------'نهاية الحلقه Do End Sub ويكون ناتج الكود بهذا الشكل النوع الثالث Do Until Loop فلو اننا نريد ادخال الارقام من 1 الى 4 فى السطر 77 بداية من العمود 8 كيف سيكون شكل الكود Sub EnterDoUntil() Dim h As Integer ' H--- متغير تم تعريفه على انه رقم صحيح h = 8 ' متغير تم تعريفه على انه يساوى الرقم8----- Do Until h > 11 ' هنا نقول ان الحلقه التكراريه سوف تنفذ حتى الرقم11 Cells(77, h) = h - 7 ' Cells(77, H)--- الرقم77هنا يدل على رقم السطر الذى سينفذ فيه الكود ' Cells(77, H)--- عباره عن العمود الذى سينفذ فيه الكود وبذلك يتضحh ' hلنا ان الكود سوف ينفذ بديةمن العمود8 لانها تساوى قيمة المتغير ' h-7 يساوى الرقم8 فحينما يتم طرحhبما ان المتغير ' الرقم7 من المتغير بذلك تصبح قيمة المتغير تساوى الرقم1 h = h + 1 'h = h + 1 هنا نقول انه يتم زياده قيمة المتغير بقيمة1صحيح مع كل ' حلقه تكراريه حتى نصل الى الشرط وهو ان يكون اقل من او يساوى11 Loop '-------'نهاية الحلقه Do Until End Sub ويكون ناتج الكود بهذا الشكل الخروج من الحلقه التكراريه نتعرف هنا على كيفيه الخروج من الحلقه التكراريه مثال لو اننا لدينا اسماء فى الخلايا من a80:a85 ونريد فى حالة تطابق الاسم الاسم الموجود فى الخليه b80 مع الاسماء الموجود فى النطاق يتم كتابة الرقم 1 فى الخلايا من c80:c85 وفى حالة فراغ الخليه يتم الخروج من الحلقه التكراريه كيف سيتم تنفيذ ذلك بالكود لاحظ كما فى الصوره ان الخلايا الموجوده فى العمود c فارغه جرب تنفيذ الكود الاتى Sub hima() Dim h As Integer For h = 80 To 85 If Cells(h, 1) = [b80] Then Cells(h, 3) = 1 End If Next End Sub شاهد النتيجه بعد تنفيذ الكود ستلاحظ انه تم ادخال الرقم فى كل خلايا العمود c التى تقابلها فى العمود a الاسم a اما اذا قمنا باضافة exit for الى الكود هكذا Sub hima() Dim h As Integer For h = 80 To 85 If Cells(h, 1) <> [b80] Then Exit For End If If Cells(h, 1) = [b80] Then Cells(h, 3) = 1 End If Next End Sub لاحظ هنا انه تم اضافة هذه الاسطر الى الكود If Cells(h, 1) <> [b80] Then Exit For End If وهنا نقول انه فى حالة ان الخلايا فى العمود الاول لاتساوى الخليه b80 يتم الخروج من الحلقه التكراريه ولا يتم تنفيذ شئ اخر وهنا نلاحظ الاتى كما فى الصوره ان الخليه a80 بها الاسم a وان الخليه a81 بها الاسم b لذلك فان الكود خلال تنفيذه تم اكتشاف ان لااسم فى الخليه الاولى a80 مطابق فتم اعطاء الخليه المقابله لها فى العمود c الرقم1 ثم حينما تم الوصول الى الخليه الثانيه a81 تم اكتشاف انها غير مطابقه فتم الانتقال الى السطر exit for وبذلك تم الخروج من الكود ولم يتم تنفيذ شئ اخر نجد ان exit for تستخدم للخروج من الحلقه التكراريه For Next نجد ان exit do تستخدم للخروج من الحلقه التكراريه do نجد ان exit Sub تستخدم للخروج من الكود نهائيا مثال تلوين الخلايا من g95:k95 باللون الاحمر Sub color_loop() Dim h As Integer For h = 7 To 11 Cells(95, h).Interior.Color = RGB(255, 0, 0) ' red Next End Sub استخدام اكثر من حلقه فى كود واحد مثال ماذا لو اردنا تلوين الخلايا من g102:k102 بالوان مختلفه بحيث تأخذ الخليه ذات الزوجى اللون الاسمر Sub color_loop1() Dim h As Integer For h = 7 To 11 If h Mod 2 = 0 Then Cells(102, h).Interior.Color = RGB(0, 0, 0) ' red Else Cells(102, h).Interior.Color = RGB(200, 0, 0) ' blak End If Next End Sub ماذا لو اردنا ادخال الاسم فردى فى السطور الفرديه والاسم زوجى فى السطور الزوجيه من g109:k114 بحيث يأخذ السطر الفردى الاسم فردى والسطر الزوجى الاسم زوجى Sub color_loop2() Dim h As Integer Dim hh As Integer For h = 1 To 5 For hh = 7 To 11 If h Mod 2 = 0 Then Cells(h + 108, hh) = "زوجى" Else Cells(h + 108, hh) = "فردى" End If Next Next End Sub اتمنى ان يكون الدرس مفيدا مرفق شيت اكسيل به التطبيقات learnvba.rar تقبلوا تحياتى learnvba.rar