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

نجوم المشاركات

  1. kanory

    kanory

    الخبراء


    • نقاط

      17

    • Posts

      2,189


  2. محمود_الشريف

    محمود_الشريف

    الخبراء


    • نقاط

      10

    • Posts

      1,846


  3. محمد أبوعبدالله

    • نقاط

      6

    • Posts

      1,998


  4. عبدالله المجرب

    • نقاط

      4

    • Posts

      5,409


Popular Content

Showing content with the highest reputation on 10 يول, 2020 in all areas

  1. أخي الكريم لاحظ الصورة ..... تجد فيه الفرز حسب الفرز الموجود في النموذج بالتوفيق .....
    5 points
  2. تفضل ----------> Nouveau Microsoft Access قاعدة بيانات.accdb
    3 points
  3. فيديو شرح للفرز المتخصص حسب تسلسل المنصب وليس الابجدية https://www.youtube.com/watch?v=2yeQw4COGeI ان شاء الله تستفيدون منه
    2 points
  4. تفضل أخي تم اضافه معيار تاريخ تحويل-غياب - Copie.rar
    2 points
  5. تم كتابة المعادلات للبحث، وتم انشاء أعمدة مساعدة ويمكنك البحث بالرقم أو اسم أو اسم واسم آخر وتم تجاهل نقاط الياء، وكذلك التاء المربوطة ة أما الهمزة فالاكسل يتجاهلها بالتوفيق البحث.xlsx
    2 points
  6. السلام عليكم ورحمة الله وبركاته اولا احب اشكر الاستاذ محمد ابو عبدالله على اخلاقه العالية وعلى مساعدته للجميع دون استثناء وكذلك اشكر القائمين على هذا المنتدي الرائع بصراحة انا سعيد جدا باني اشتركت معاكم في هذا المنتدي الملئ بالكفاءات والشخصيات المحترمة كان في فكرة تطرء على بالي دائما وهي لو عندي قاعدة بيانات على اكسيس تحوي العديد من البيانات الهامة جدا هل من الممكن تنفيذ لها تطبيق يعمل على الهاتف سواء كان ايفون او سامسونج واذا في الامكانية دي فعلا هل البيانات ستكون بامان عند مشاركة التطبيق على منصة الايفون او سامسونج
    1 point
  7. ومن باب ارجاع الفضل لأهله قد نبهي لهذا الخطأ هذا الرابط لأستاذنا محمد أيمن جزاه الله خيرا. https://www.officena.net/ib/topic/79080-تطبيق-البحث-في-اكثر-من-حقل-دون-استخدام-الاستعلامات/
    1 point
  8. السلام عليكم ورحمة الله وبركاته جزا الله أخوتي وأساتذتي الكرام كل خير أحسن الله اليكما لقد وجدت الحل والحمد لله - كنت أكتب الاستعلام بطريقة خاطئة أضفت علامة أقتباس زائدة بدون قصد (دا الأكسس دا المعاملة معاه صعبة قوي حرف واحد ما بيعدهوش دا ايه معاملة يهود 😀).
    1 point
  9. السلام عليكم غير المعيار في الاستعلام الى [forms]![نموذج استعلام بالجهة]![الكلية] قاعدة ابوبكر.rar تحياتي
    1 point
  10. حل اخر يمكنك وضع حقل في الجدول يتم فيه وضع الترقيم يدوي من خلال النموذج الفرعي وفي هذه الحالة لن تحتاج الى اكواد بالمرة فقط اضبط معيار الاستعلام لهذا الحقل تنازلي تحياتي
    1 point
  11. وعليكم السلام ورحمة الله وبركاته تفضل اخي الكريم ارجو ان يكون هو المطلوب Allijan.rar تحياتي
    1 point
  12. حياك الله اخي الفاضل اعذروني على الغياب الطويل وجدت اليوم فرصة لرفع الشرح فاحببت مشاركتكم به ان شاء ساحاول التواجد وان لم يتسنى لي ذلك فانتم في القلب
    1 point
  13. بالاضافة الى ما تفضل به استانا @الفلاحجى وله الشكر يمكنك استخدام البخث والنصفية بالطريقة التالية ( اسرع + تجنب المشكلة الحالية ) ان شاء الله تحياتي
    1 point
  14. مجدى فين انت من هذه الإجابة الممتازة ؟!!! أين الضغط على الإعجاب ؟!!!💙
    1 point
  15. بارك الله لمهندس الاكسل الذى قدم لى مساعدة سريعةوصحيحة ونتمنى الله دوام النجاح والنفوق
    1 point
  16. جزاك الله خيرا اخى امحمد شوف ضبط الاعدادات التالى جزاه الله خيرا استاذ عبدالرحمن هاشم
    1 point
  17. جزاك الله خيرا أخي أبو بسملة اشتقنا للتواصل معكم ومع سائر الاساتذة الكرام بالمنتدي. أخي جرب هذا ولكن لم يفلح ظهرت رسالة خطأ 3420 تقول "object invailid or longer set" = وأظن أن هذا يعني أن "ALike" غير موجودة بالأكسس ملاحظة: أنا مازلت استخدم الأكسس كواجهة امامية
    1 point
  18. السلام عليكم اخى واستاذى العزيز محمد @أبو عبدالله الحلوانى جرب استعمال ان شاء الله تظبط معك ALike بالتوفيق اخى محمد
    1 point
  19. qqqq1 فين انت كل هذه المدة من هذه الإجابة الرائعة أين الضغط على الإعجاب على هذه الإجابة الممتازة ؟!!!💙
    1 point
  20. السلام عليكم اخي sabry fahmy ارسل صورة للشهادة الموجودة لديك لتحديد ابعاد البيانات عليها
    1 point
  21. كبداية يمكن تجربة هذا الملف 1-- الضغط على اي خلية خضراء في الشيت "Data " يذهب بك فوراً الى الورقة المطلوبة 2- الضغط على زر " Add_sheets" يضيف صفحات جديدة (باسماء الجنسيات الجديدة غير الموجودة) اذا كانت الجنسية لها صفجة يتغاضى الكود عنها 3- الضغط غلى الخلية "D1 " من أي صفحة يعيدك الى صفحة "Data" Disribution_Om_Hz_super.xlsm
    1 point
  22. سيق وقلت 1- اسماء الشيتات باللغة الأجنبية 2- لا ضرورة لأكثر من 20 صف ( و ذلك لمتابعة عمل الكود) لأن الكود الذي يعمل على صف واحد يمكنه العمل على الوف الصفوف 3-ضعي النتائج المتوقعة في صفحة مستقلة صفحة "Resultt" من هذا الملف Disribution_Om_Hz.xlsx
    1 point
  23. مرفق المطلوب ، وعليك نقل المعادلة للمكان المطلوب لأنه غير واضح في الملف (بيانات كثيرة ولم يظهر لي مكان الصافي ومكان المعادلة 😆) المعادلة المطلوبة لحالتك هي: =IF(E12-2000<=0;0;IF(E12-2000<=250;(E12-2000)*0.125;(E12-2250)*0.1+31.25)) مع ملاحظة أن E12 هي الخلية التي تحتوي (الصافي) لاحظ أنه لاداعي للضرب بـ 12 ثم القسمة بعد ذلك على 12 فبدلا من الضرب بـ 12 وخصم 24000 أصبحنا نطرح 2000 مباشرة ونحسب القسط الشهري مباشرة وللتأكيد قمت على اليسار باستخدام التفصيل الذي ذكرته أنت للحساب (الضرب بـ 12 ثم خصم 24000 ثم ... ثم... ثم...) وقارنتها بالمعادلة المختصرة التي اختصرتها أنا والنتائج نفسها لنجعل الحياة أسهل 😄 على العموم إذا كنت مصر على الطريق الطويل فقد عملت لك معادلة مخصوص لاقناعك فقط تجدها أسفل المعادلة المختصرة ولا تقلق فيها الضرب بـ 12 ثم القسمة على 12 =(IF((E23*12)-24000<=0;0;IF((E23*12)-24000<=3000;((E23*12)-24000)*0.125;((E23*12)-27000)*0.1+375)))/12 ملاحظة أخرى: افترضنا أنه إذا كان الصافي أقل من 2000 فلا يوجد عليه ضريبة، أليس كذلك؟ تحياتي وبالتوفيق مرتبات.xls
    1 point
  24. تفضل اخي الفاضل برنامج ميزان1.accdb ودي اداة تفعيل الباركود يوجد ملف تكست به شرح التفعيل تفعيل الباركود.rar
    1 point
  25. السلام عليكم ورحمة الله استخدم هذا الكود Sub AnalysesData() Dim ws As Worksheet, Sh As Worksheet Dim LR As Long, i As Long, j As Long, p As Long Dim Arr, Data As String Set ws = Sheets("ورقة1") Set Sh = Sheets("ورقة2") Sh.Range("B5").Resize(100, 6).ClearContents LR = ws.Range("D" & Rows.Count).End(xlUp).Row Data = Sh.Range("B2") Arr = ws.Range("B3:G" & LR).Value ReDim Preserve Arr(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) For i = 1 To UBound(Arr, 1) If Arr(i, 4) = Data Then p = p + 1 For j = 1 To UBound(Arr, 2) Arr(p, j) = Arr(i, j) Next End If Next If p > 0 Then Sh.Range("B5").Resize(p, UBound(Arr, 2)).Value = Arr End Sub
    1 point
  26. كان يجب توضيح هذا الأمر مسبقاً من الصعب جداً عمل ذلك بالمعادلات لانه يمكن ان يكون هناك اكثر من ورقتي عمل يمكنك تجربة هذا الكود Option Explicit Sub get_all_1() Dim Sh As Worksheet Dim Arr(), I%, k%, m%, x%, t% Dim My_rg As Range m = 2 For Each Sh In Sheets If UCase(Sh.Name) <> UCase("salim") Then ReDim Preserve Arr(k) Arr(k) = Sh.Name k = k + 1 End If Sheets("Salim").Range("B:B").ClearContents Next Sh For k = LBound(Arr) To UBound(Arr) With Sheets(Arr(k)) x = .Cells(Rows.Count, 2).End(3).Row Set My_rg = .Range("b2:b" & x).SpecialCells(2) My_rg.Copy Sheets("Salim").Range("B" & m) m = Sheets("Salim").Cells(Rows.Count, 2).End(3).Row + 1 End With Next k Sheets("Salim").Range("B1") = "Data" Erase Arr End Sub الملف من جديد H_Rady_1.xlsm
    1 point
  27. السلام عليكم ورحمة الله وبركاته مرحبا اخي الكريم الكود الجديد الآن يمكن التحكم بناتج البحث متاطبق وغير متاطابق (جزء من الاسم ) وذلك عن طريق المتغير chk ويمكن التحكم بقيمة المتغير كالتالي chk = 0 غير متطابق chk = 1 متطابق والان كود البحث كالتالي On Error Resume Next Dim mySqL As String Dim mySQLWhere As String Dim mySqLAnd As String Dim chk As Integer ' ÛíÑ ãÊØÇÈÞ ' chk = 0 ' ãÊÇØÇÈÞ chk = 1 mySqLAnd = " AND " mySqL = "SELECT * FROM tblSearch " If Len(Me.X1 & vbNullString) Then If (chk) Then mySQLWhere = "[X1] Like " & Chr$(39) & "*" & Me.X1 & "*" & Chr$(39) Else mySQLWhere = "[X1] = " & Chr$(39) & Me.X1 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X2 & vbNullString) Then If (chk) Then mySQLWhere = "[X2] Like " & Chr$(39) & "*" & Me.X2 & "*" & Chr$(39) Else mySQLWhere = "[X2] = " & Chr$(39) & Me.X2 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X3 & vbNullString) Then If (chk) Then mySQLWhere = "[X3] Like " & Chr$(39) & "*" & Me.X3 & "*" & Chr$(39) Else mySQLWhere = "[X3] = " & Chr$(39) & Me.X3 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X4 & vbNullString) Then If (chk) Then mySQLWhere = "[X4] Like " & Chr$(39) & "*" & Me.X4 & "*" & Chr$(39) Else mySQLWhere = "[X4] = " & Chr$(39) & Me.X4 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X5 & vbNullString) Then If (chk) Then mySQLWhere = "[X5] Like " & Chr$(39) & "*" & Me.X5 & "*" & Chr$(39) Else mySQLWhere = "[X5] = " & Chr$(39) & Me.X5 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X6 & vbNullString) Then If (chk) Then mySQLWhere = "[X6] Like " & Chr$(39) & "*" & Me.X6 & "*" & Chr$(39) Else mySQLWhere = "[X6] = " & Chr$(39) & Me.X6 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X7 & vbNullString) Then If (chk) Then mySQLWhere = "[X7] Like " & Chr$(39) & "*" & Me.X7 & "*" & Chr$(39) Else mySQLWhere = "[X7] = " & Chr$(39) & Me.X7 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X8 & vbNullString) Then If (chk) Then mySQLWhere = "[X8] Like " & Chr$(39) & "*" & Me.X8 & "*" & Chr$(39) Else mySQLWhere = "[X8] = " & Chr$(39) & Me.X8 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X9 & vbNullString) Then If (chk) Then mySQLWhere = "[X9] Like " & Chr$(39) & "*" & Me.X9 & "*" & Chr$(39) Else mySQLWhere = "[X9] = " & Chr$(39) & Me.X9 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(mySQLWhere) Then mySQLWhere = Left$(mySQLWhere, Len(mySQLWhere) - (Len(mySqLAnd) - 1)) End If Me.Search2.Form.Filter = mySQLWhere Me.Search2.Form.FilterOn = True وكود الطباعة كالتالي On Error Resume Next Dim stDocName As String Dim mySqL As String Dim mySQLWhere As String Dim mySqLAnd As String Dim chk As Integer ' ÛíÑ ãÊØÇÈÞ ' chk = 0 ' ãÊØÇÈÞ chk = 1 mySqLAnd = " AND " mySqL = "SELECT * FROM tblSearch " If Len(Me.X1 & vbNullString) Then If (chk) Then mySQLWhere = "[X1] Like " & Chr$(39) & "*" & Me.X1 & "*" & Chr$(39) Else mySQLWhere = "[X1] = " & Chr$(39) & Me.X1 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X2 & vbNullString) Then If (chk) Then mySQLWhere = "[x2] Like " & Chr$(39) & "*" & Me.X2 & "*" & Chr$(39) Else mySQLWhere = "[x2] = " & Chr$(39) & Me.X2 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X3 & vbNullString) Then If (chk) Then mySQLWhere = "[X3] Like " & Chr$(39) & "*" & Me.X3 & "*" & Chr$(39) Else mySQLWhere = "[X3] = " & Chr$(39) & Me.X3 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X4 & vbNullString) Then If (chk) Then mySQLWhere = "[X4] Like " & Chr$(39) & "*" & Me.X4 & "*" & Chr$(39) Else mySQLWhere = "[X4] = " & Chr$(39) & Me.X4 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X5 & vbNullString) Then If (chk) Then mySQLWhere = "[X5] Like " & Chr$(39) & "*" & Me.X5 & "*" & Chr$(39) Else mySQLWhere = "[X5] = " & Chr$(39) & Me.X5 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X6 & vbNullString) Then If (chk) Then mySQLWhere = "[X6] Like " & Chr$(39) & "*" & Me.X6 & "*" & Chr$(39) Else mySQLWhere = "[X6] = " & Chr$(39) & Me.X6 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X7 & vbNullString) Then If (chk) Then mySQLWhere = "[X7] Like " & Chr$(39) & "*" & Me.X7 & "*" & Chr$(39) Else mySQLWhere = "[X7] = " & Chr$(39) & Me.X7 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X8 & vbNullString) Then If (chk) Then mySQLWhere = "[X8] Like " & Chr$(39) & "*" & Me.X8 & "*" & Chr$(39) Else mySQLWhere = "[X8] = " & Chr$(39) & Me.X8 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(Me.X9 & vbNullString) Then If (chk) Then mySQLWhere = "[X9] Like " & Chr$(39) & "*" & Me.X9 & "*" & Chr$(39) Else mySQLWhere = "[X9] = " & Chr$(39) & Me.X9 & Chr$(39) End If mySQLWhere = mySQLWhere & mySqLAnd End If If Len(mySQLWhere) Then mySQLWhere = Left$(mySQLWhere, Len(mySQLWhere) - (Len(mySqLAnd) - 1)) End If Debug.Print mySQLWhere Me.Visible = False stDocName = "rep1" DoCmd.OpenReport stDocName, acPreview, , mySQLWhere 003.zip تحياتي
    1 point
  28. بسم الله الرحمن الرحيم دروس فى VBA Excel هذه الدروس نتيجة جهد مستفاد من شروحات وأعمال السادة أساتذة منتديات أوفيسنا أسأل الله عز وجل لهم أن تكون فى ميزان حسناتهم http://www.officena.net/ib/index.php الدرس الأول قبل أن نبدأ، دعونا نتأكد من أن الأدوات التي نحتاجها موجودة. إذا كنت تستخدم ( Excel 2007) أو إصدار أعلى click ". Office button, then click Excel Options بالاسفل سيتم إضافة علامة تبويب جديدة وهى Developer سوف نحتاج فى العمل مع التعليمات البرمجية ل VBA ، محرر، يتم تثبيته بشكل افتراضى. يمكنك فتحه عن طريق الضغط على تركيبة مفتاح الاختصار " Alt+ F11 ": او انقر على الشكل المشار له بالسهم بالصورة السابقة انتهى الدرس الأول مرفق ملف PDF يرجى ان كان هناك أى استفسار يكون فى مضمون الدرس حتى لا يتم التشتيت وتقبلوا منى وافر الإحترام والتقدير الدرس 1VBA Excel.rar
    1 point
  29. ‏‏السبت‏، 28‏/10‏/1430هـ الموافق ‏17‏/10‏/2009م السلام عليكم و رحمة الله وبركاته هذه فكرة برنامج اقساط جاري تنفيذها تستطيع الإختيار بين تحديد عدد الشهور - اذا سوف يتم توزيع المبلغ المتبقي على عدد الشهور تحديد قيمة القسط الشهري - اذا سوف يتم تقسيم المبلغ المتبقي على القسط الشهري = عدد الشهور 1-تم عمل قائمة منسدلة تشمل اسماء العملاء ليتم اختيار اسم العميل منها 2-اكتب في الخلايا الصفراء فقط و لا تكتب في الخلايا الحمراء 3-تم عمل التحقق من صحة للخلايا التي لايجب الكتابه فيهااذا ادخلت تاريخ هجري لن تستطيع الكتابة في خانة تاريخ ميلادي الا بعد مسح بيانات التاريخ الهجري و كذلك العكس صحيحاذا ادخلت قيمة القسط الشهري لن تستطيع الكتابة في خانة عدد الأقساط و كذلك العكس صحيح 4-تم عمل حماية للورقة بحيث يمكنك التنقل بين الخلايا المسموح بالكتابة بها ولا يمكن الوقوف على أي خلية غير مخصصة للكتابةبدء العمل على ورقة حفظ بيانات الأقساط 1_توزيع_الأقساط_ومتابعتهاQest.rar
    1 point
  30. نستكمل سلسلة الدروس ندخل فى مرحله تطبيق ما تعرفنا عليه من خلال الدروس السابقة التطبيقات العملية ( 1 ) الترحيل السؤال الذى يطرح نفسه بعد ما تعرفنا على ما سبق الحديث عنه من الأدوات وبعض المعادلات والمتغيرات والكائنات والمدى والرسائل المستخدمه فى كتابة الأكواد سواء كان داخل موديول أو بحدث الملف ( المصنف ) أو بحدث الصفحه كيف نكتب كود ؟ كيف نستخدم هذه الأدوات ؟ حتى نخرج بكود منسق نستخدمه فى أمر ما رأيت أن نبدأ بالتعرف على كتابة الأكواد التى تستخدم فى أمر الترحيل حتى يكون أول تطبيق عملى نبدأ به للتعرف الملموس على لغة البرمجه داخل الاكسل وسيكون بإذن الله هناك سلسلة كاملة من التطبيقات العملية التى تستخدم فى عده مجالات خلاف الترحيل حتى نتعرف تماما على كيفية استخدام ما ورد بالدروس السابقة والإستفاده منها لذا أتمنى من متابعى هذه الدروس مراجعه ما سبق جيدا حتى يكون الامر سهلا ميسرا ملحوظة هامه جدا :- يجب أن نعرف جيدا أن هناك العديد من الطرق لكتابة كود ما ويكون شكله مختلف عن الكود الآخر ولكن نتيجته واحده فالهدف هنا من تلك الدروس أن نكون على الطريق الصحيح لفهم العملية التطبيقية للإستفاده وليس حصر جميع الاكواد الخاصة بموضوع ما ************************************* نبدأ التطبيق العملى الأول بهذه السلسلة التعليمية في المثال المرفق ستجد ورقتي عمل Invoice " " List" وسيتم إدخال البيانات في الورقه " Invoice " ثم بعد الإنتهاء نضغط على الزر لتنتقل في أماكن محدده بورقة العمل " List " حاليا أهيأ نفسى لكتابة البيانات التى أريدها فى ورقة خارجية يدويا لمعرفة ما هو المطلوب للشكل الذى أريده أتحدث الى نفسى الآن مطلوب منى أو أنا أريد كتابة بيانات خاصة بموظف ما فى شيت ثم ارحل تلك البيانات الى شيت آخر ولكن الشيت الثانى عبارة عن جدول تجميعى لبيانات جميع الموظفين إذن نقوم بعمل الآتى : أولا : نقوم بتحديد الذى نريده حتى تتضح لنا فكرة الترحيل ثانيا : تنسيق شيت الادخال بما يتناسب مع حجم البيانات المطلوبه لترحيلها لشيت الادخال مع توضيح اذا كان هناك بيانات اساسية يجب ادخالها من عدمه ومعرفة الخلايا التى سيتم كتابه البيانات داخلها لجميع خلايا ادخال البيانات وبالنموذج المرفق جميع البيانات يجب ادخالها ليتم الترحيل وسنتعرف على ذلك بالكود والخلايا هى كالتالى ( B3 , D3 , A5 , D6 , B8 , D8 ) ثالثا : تنسيق الشيت الثانى حتى يكون ملائما لشكل جدول تجميعى خاص بجميع الموظفين ويكون معلوم لدينا ان كل خليه ستنتقل الى خليه بعمود معين بترتيب معين أسفل بعض فى كل عمليه ادخال وترحيل بمعنى ان الخلية B3 بشيت الادخال سترحل الى خليه بالعمود B الخلية D3 بشيت الادخال سترحل الى خليه بالعمود C الخلية A5 بشيت الادخال سترحل الى خليه بالعمود D الخلية D6 بشيت الادخال سترحل الى خليه بالعمود E الخلية B8 بشيت الادخال سترحل الى خليه بالعمود F الخلية D8 بشيت الادخال سترحل الى خليه بالعمود G على أن يتم ترحيل كل عملية أسفل بعض بشيت التجميعى أى القائمة التى بها جدول تجميع جميع بيانات الموظفين شكل شيت الادخال شكل شيت تجميع البيانات تبقى لنا هنا كتابة الكود الذى سينفذ ما تخيلته ووضعته فى الشيت بإستخدام ما تعرفنا عليه بالدروس السابقة نبدأ بعون الله بحفظ ما سبق حتى لا يضيع هباء اثر انقطاع التيار أو خلافه ثم نقوم بفتح محرر الأكواد بالضغط على 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
    1 point
  31. الدرس الحادى عشر حدث الملف workbook أو حدث الصفحة worksheet هناك أكواد يتم كتابتها داخل حدث الملف وتعنى بتطبيق هذا الكود على كامل الملف مثل اكواد الحماية أو عندما يتم فتح الملف تظهر رساله ما أو فورم للدخول أو ...الخ وهناك أكواد يتم كتابتها داخل حدث الصفحة وتعنى بتطبيق هذا الكود على هذه الصفحة فقط أو تنفيذ اجراء معين داخل هذه الصفحة وهناك أكواد تكتب داخل موديول ويتم ربطها بكود يكتب داخل حدث الصفحة وأيضا هناك أكواد تكتب داخل موديول ويتم ربطها بكود داخل حدث الفورم سنتحدث بهذا الدرس عن الأكواد التى تكتب داخل حدث الصفحة ولكن يجب أن نتعرف عليها وأين تكتب هذه الأكواد عند الدخول الى محرر الأكواد نجد على اليسار اسماء الشيتات أى الصفحات لو قمنا بالنقر عليها مرتين تفتح لنا صفحة على اليمين هذه تسمى محرر الأكواد الخاص بالصفحة نفسها أى حدث الصفحة كذلك مع حدث الملف نجد بهذه الصفحة مستطيلين بهم رأسين لسهم اتجاه للأسفل بالضغط على السهمين تظهر لنا قائمة نختار منها رأس الكود بما يتناسب مع المطلوب أى المراد تنفيذه من خلال هذا الكود كما بالصورة التالية عند اختيار الحدث 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
    1 point
  32. الدرس العاشر الكائن 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
    1 point
  33. تابع الدرس التاسع لاحظ الاختصار في الأكسيل فبدلاً من الأسطر المتعددة يمكن الإشارة للمجال المختار بهذه الجملة 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 قد يتساءل البعض كيف يمكن معرفة رقم اللون المختار ؟ وفيما يلى جدول بالرقم الخاص بكل لون قدر المستطاع مثال 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 هي كما يلي 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
    1 point
  34. الدرس الثامن جملة Do While Loop تُستخدم العبارة Do Loop لتنفيذ العبارات ضمنها، مادام الشرط المحدد محققاً. مثال تعد حلقة Do.Loop التالية من 1 وحتى 1000 : Dim Counter Counter=1 Do While Counter < 1001 Counter = Counter + 1 Loop ملاحظات : 1 - يتم تجهيز المتغير Counter بإسناد القيمة الابتدائية 1 اليه ، ثم تبدأ بعدها حلقة DoWhile.Loop 2 - يتحقق السطر الأول من أن قيمة Counter أصغر من ١٠٠١ فإذا كان الأمر كذلك، تنفذ العبارات الواقعة بين السطر DoWhile والسطر Loop وفي مثالنا هذا ، توجد عبارة واحدة بين هذين السطرين Counter = Counter +1 والتي تزيد قيمة العداد Counter بمقدار 1 3 - يعود البرنامج بعد ذلك إلى السطر Do While ويتحقق من قيمة العداد Counter والتي تساوى الى الآن 2 4 - لهذا فسوف يعاد تنفيذ العبارة الواقعة بين السطر Do While والسطر Loop وتستمر المعالجة حتى تصبح قيمة Counter مساوية إلى 1001 وعندها يختل الشرط ويستأنف تنفيذ البرنامج بدءا من العبارة التي تلي السطر Loop جملة Do-Loop-While العبارات ضمن الحلقة Do While.Loop في الفقرة السابقة قد تنفذ أو لا تنفذ ، تبعاً لتحقيق الشرط. فمثلاً العبارات في حلقة DoWhile.Loop التالية لن تنفذ أبداً Dim Counter Counter = 2000 Do While Counter < 1001 Counter = Counter + 1 Loop فعندما يتحقق البرنامج من السطر DoWhile فإنه سيكتشف أن Counter تساوى 2000 ولهذا فلن تنفذ العبارة الواقعة بين السطر DoWhile والسطر Loop يتطلب البرنامج أحياناً الدخول ضمن الحلقة لمرة واحدة على الأقل دون تحقيق أي شرط لذلك تُستخدم الحلقة Do.Loop While مثل هذه الحاله Dim Counter Counter = 2000 Do Counter = Counter + 1 Loop While Counter < 1001 ينفذ البرنامج العبارات الواقعة بين السطر Do والسطر Loop While مهما تكن الأحوال وبعد ذلك يحدد البرنامج إذا كان الشرط محققاً (أي Counter أصغر من 1001 ) يعيد البرنامج تكرار تنفيذ الحلقة إذا تحقق الشرط وبالتالي يعيد تنفيذ العبارات الواقعة بين السطر Do والسطر Loop While أما إذا اختل الشرط (أي Counter ليست أصغر من 1001 ) فعندها يستأنف التنفيذ من العبارة التي تأتي مباشرة بعد السطر Loop While وفى المثال التالى تعد جملة Do.Loop While من 50 الى 200 Dim Counter Counter = 50 Do Counter = Counter + 1 Loop While Counter < 201 العبارة Exit DO تنتهي الحلقة DoWhile.Loop باستخدام Exit DO مثال : Dim I I = 1 Do While I < 10001 (txtResult.Text = Str(I I = I + 2 If I > 500 Then Exit Do End If Loop تعد الحلقة السابقة بدءاً من الواحد وبزيادة قدرها 2 وينتهى تنفيذ الحلقة عندما تصبح قيمة I أكبر من 500 الحلقة اللامنتهية قد تقع أحياناً في خطأ يشبه ذلك المبين في الحلقة التالية : Dim I I = 1 Do While I < 10001 (txtResult.Text = Str(I If I > 500 Then Exit Do End If Loop نلاحظ أننا نسينا كتابة العبارة التالية: I = I + 2 تبقى قيمة Counter ثابتة في الحلقة Do While.Loop السابقة (I = 1 ) وهذا بسبب نسيان زيادة قيمته. يبقى البرنامج في هذه الحالة ضمن الحلقة إلى اللانهاية لأن قيمة I دوماً أصغر من 1001 ولكن تكون أبداً أكبر من 500 بل في الواقع تساوي 1 على الدوام الحلقة For Next التكرارية تعتبر جملة For Next وسيلة أخرى لصنع الحلقات التكرارية مثال تعد الحلقة التالية من 1 الى 100 Dim7 I For I = 1 to 100 Step 1 (txtMyTextArea.Text = Str(I Next أما للتعداد من 1 وحتى 100 وبخطوة زيادة في كل مرة قدرها 2 فتستطيع استخدام الحلقة For Next التالية : Dim I For I = 1 to 100 Step 2 (txtMyTextArea.Text = Str(I Next تعد هذه الحلقة بالشكل التالي 1 ، 3 ، 5 ، .... 99 تساوي قيمة Step في الحالة الافتراضية أي عند تجاهل كتابتها الى 1 وبالتالي فالحلقتين التاليين متشابهان الحلقة الأولى Dim I For I = 1 to 100 Step 1 (txtMyTextArea.Text = Str(I Next الحلقة الثانية Dim I For I = 1 to 100 (txtMyTextArea.Text = Str(I Next العبارة Exit For تستطيع الخروج من الحلقة For.Next باستخدام عبارة Exit For مثال Dim I For I = 1 to 1000 (txtResult.Text = Str(I If I = 500 Then Exit For End If Next يعد جزء البرنامج هذا بدءاً من الواحد وبزيادة قدرها 1 للمتغير Z مع كل تكرار للحلقة يتحقق شرط عبارة If الداخلية عندما تصبح قيمة I مساوية إلى 500 ونتيجة ذلك تنفذ العبارة Exit For التي تنهي بدورها تنفيذ الحلقة For.Next قبل انتهاء الحلقة الدالة Inputbox تستخدم فى إدخال بيانات بواسطة المستخدم من خلال مستطيل يطلب منه إدخال البيان المطلوب . مثل إدخال معدل الضريبة الكلى يتم حساب الضرائب التي تستقطع من العاملين أو إدخال الراتب الاساسى لموظف حساب صافى مستحقاته بعد إضافة الحوافز والمكافآت وخصم الضريبة والاستقطاعات وتأخذ هذه الدالة الشكل التالي : الشكل العام للدالة Inputbox مثال : الدرس 8.rar
    1 point
  35. الدرس السابع الجملة الشرطية Select Case المثال السابق وهو قبل الأخير الذى ذكرناه فى جملة If - then - elseif – else والخاص بتقديرات الطلبة يمكن تطبيقه بشكل أفضل وأسهل بكثير باستخدام جملة Select Case سوف نقوم بتطبيق المثال مرة أخرى باستخدام جملة Select case ثم نقوم بالتعليق على المثال وشرح الملاحظات : الشرح : سنتحدث عن ما يخص جملة Select case 1 - بدأت الجملة بكلمة Select case ثم اسم المتغير الذى سيتم تتبع حالته . 2 - الحالة الأولى قيمة المتغير التى تم إدخالها فى صندوق النصوص هى بين صفر ، 49 3 - ظهور صندوق رسالة يفيد أن الطالب راسب 4 - يتم إدخال قيمة كل حالة وهكذا فى جميع الحالات بنفس الطريقة الملاحظات : 1 - تبدأ الجملة بكلمة Select case وتنتهى بجملة End select 2 - تم وضع الجملة الآتية فى بداية الكود On Error GoTo mistake ومعناها ومعناها أنه فى حالة وجود أى خطأ يتم الانتقال إلى العنوان Mistake وذلك تحسبا لقيام المستخدم بإدخال قيمة نصية وبالتالى يصعب اختبارها وفى هذه الحالة سوف يتم نقل الكود للخطوة الأخيرة والتى يظهر بها صندوق نص يفيد أن المستخدم لم يدخل قيمة عددية وعليه إعادة إدخال قيمة عددية ليتم اختبارها . وفى هذه الحالة سيتم إعادته مرة أخرى للبداية إلى العنوان Start 3 - يمكن تسمية العناوين بأى اسم مثال (X – Y – Z – Yasser ) ولكن يفضل أن يكون الاسم معبرا . 4 - نلاحظ أننا وضعنا مدى فى قيم المتغير فى خطوات الجملة وهذا ليس شرطا بل يمكن وضعه قيمة قيمة ولكن سيكون ذلك تطويلا لا طائل منه مثل التالى Case 1 Case 2 Case 3 Case 100 مرفق ملف pdf به كامل الدرس وتقبلوا منى وافر الاحترام والتقدير الدرس 7.rar
    1 point
  36. الدرس السادس الأوامر والدوال فى لغة الـ Visual Basic سنركز فى هذا الدرس على عدد من الجمل والدوال ومن أهم هذه الجمل والدوال : 1 – جملة If – then 2 – جملة Select Case 3 – جملة For – next 4 – جملة Do while loop 5 – جملة Do loop while 6 – دالة صندوق الرسائل Message Box وقد سبق الحديث عنها بالدروس السابقة ولكننا سنتحدث أيضا عنها بهذا الدرس وبشىء من التفصيل بدرس مستقل . 7 – دالة صندوق الإدخال Input Box 8 – إنشاء الدوال الخاصة الجملة الشرطية If – then تستخدم هذه الجملة فى حالة وجود احتماليين منطقيين كنتيجة لوجود شرط معين . وتأخذ هذه الدالة الأشكال التالية : 1 – جملة IF ذات السطر الواحد أمر Then الشرط IF مثال : If x = 5 then y = x 2 – جملة IF ذات السطور المتعددة Then الشرط IF الأوامر End IF مثال : If x = 5 then Y = x End IF نلاحظ الآتى : - لا يتم كتابه اى شىء بعد Then - أنه تم اغلاق جملة IF بكلمة End IF 3 – جملة If – then – else Then الشرط IF مجموعة الأوامر Else مجموعة الأوامر End IF مثال : If x = 5 then Y = x Else Y = z End If نلاحظ الآتى : - لا يتم كتابة أى شىء بعد Then - إذا تحقق الشرط يتم تنفيذ الأوامر الموجودة فى ( السطر / السطور ) التى تلى كلمة Then - فى حالة عدم تحقق الشرط يتم تنفيذ الأوامر الموجودة فى ( السطر / السطور ) التى تلى كلمة Else - يتم إغلاق جملة IF بكلمة End IF 4 – جملة If – Then - Else if – Else Then الشرط IF مجموعة الأوامر Else IF مجموعة الأوامر Else مجموعة الأوامر End IF نلاحظ التالى : ذكرنا سابقا أن جملة IF تستخدم فى حالة وجود احتماليين منطقيين كنتيجة لوجود شرط معين ولكن هذه الحالة الرابعة سوف تحتمل أكثر من شرط وبالطبع كل شرط له احتمالين إما أن يتحقق أو لن يتحقق وسوف نلاحظ الآتى فى هذه الحالة : - لا يتم كتابة أى شىء بعد كلمة Then - إذا تحقق الشرط يتم تنفيذ الأوامر الموجودة فى ) السطر / السطور ( التى تلى كلمة Then - فى حالة عدم تحقق الشرط لا يتم تنفيذ الأوامر التى تلى كلمة Then ويتم الانتقال لاختبار الشرط الثانى المكتوب بعد كلمة Else IF ويلي الشرط مباشرة كلمة Then أيضا . - إذا لم يتحقق الشرط الثانى ووجد شرط ثالث يتم كتابته بعد كلمة Else IF أيضا بنفس الطريقة السابقة فى الخطوة السابقة . - وفى حالة عدم تحقق الشروط جميعا يتم تنفيذ الأوامر الموجودة فى ( السطر /السطور) التى تلى كلمة Else - تأتى كلمة Else فى نهاية كافة الشروط وهى آخر احتمال فى الجملة حيث يتم إغلاق الجملة بعدها نهائيا بكلمة Else IF ويجب ملاحظة ألا يسبق سطر Else أى سطر به كلمة Else IF وإلا تسبب فى خطأ جملة IF بالكامل . - يجب ملاحظة أننا فى إطار جملة IF واحدة وأن كلمة Else ليست مثل Else IF وأيضا IF ليست مثل Else IF حيث أن كل هذه الكلمات تدخل ضمن جملة IF الرئيسية وبالتالى فإنه يتم إغلاق جملة IF بكلمة End IF واحدة فقط . مثال : 5 – جملة IF المتداخلة (Nested if ) Then الشرط IF Then الشرط IF مجموعة الأوامر Else مجموعة الأوامر End IF Else مجموعة الأوامر End IF نلاحظ التالى : هذه الحالة مختلفة لأنه يوجد جملتى IF وسوف يتم إغلاقهما بكلمتى End IF نشرح هذه الحالة الخامسة بالمثال التالى : وهو مثال هام إذا أردنا اختبار اسم المستخدم وكلمة المرور عند الدخول للموقع أو البرنامج أو الإيميل الشكل البسيط جدا لذلك هو إخراج رسالة للمستخدم تفيد التالى (هناك خطأ فى اسم المستخدم أو فى كلمة المرور ) إلا أن هذا لا يليق بمبرمج محترف حيث يجب أن يوضح للمستخدم سبب الخطأ هل فى اسم المستخدم أو فى كلمة المرور وبالتالى فإن الرسالة يجب أن تكون كالتالى (هناك خطأ فى كلمة المرور ) وهذا معناه أن المستخدم قد أدخل اسم المستخدم بشكل صحيح والعكس أيضا . ويكون الكود كالتالى : مرفق ملف pdf به كامل الدرس السادس وتقبلوا منى وافر الاحترام والتقدير الدرس 6.rar
    1 point
  37. الجزء الثانى الدرس الخامس مقدمة عن البرمجة بلغة VBA فى برنامج إكسیل يتميز برنامج EXCEL بالواجهة الرسومية شانه شأن كافة البرامج التى تعمل تحت نظام التشغيل Windows وهذه الواجهة الرسومية تخفى خلفها الأوامر التى أصدرها للحاسب والتى تكون عادة مكتوبة بلغة من لغات الحاسب التى تعتمد على ما يسمى بالبرمجة الحدثية ( أو البرمجة الموجهة بالأحداث ) Events Programming تعتمد على حدوث حدث بواسطة المستخدم – مثل الضغط بزر الماوس الأيسر على زر تخيلى على الشاشة وبناء على هذا الحدث يتم تنفيذ مجموعة من الأوامر كما هو الحال فى وحدات الماكرو التى سبق الإشارة إليها . والواقع ان هذه الأزرار تخفى خلفها التعليمات التى تعطى للحاسب ، من خلال لغة الـ Visual Basic حيث يتم كتابتها بطريقة محددة وفقا لقواعد اللغة وكل مجموعة وهذه التعليمات تسمى الاكواد Codes وكل إجراء يرتبط تنفيذه بحدث معين يحدث من الأكواد او التعليمات تسمى إجراء Procedure من قبل المستخدم مثل الضغط بزر الماوس الأيمن او الأيسر على زر او تحريك الماوس او فتح كائن أو إغلاقه وتعتبر وحدات الماكرو احد الأدوات المستخدمة بواسطة Excel لكى يقوم المستخدم بتخزين مجموعة من التعليمات او الاكواد وتنفيذها من خلال حدث معين دون الحاجة إلى كتابة هذه التعليمات بنفسه بواسطة لغة Visual Basic ودون الحاجة الى تعلم قواعدها. ونتناول فى هذا الفصل كيفية التعامل مع أوامر لغة Visual Basic من خلال برنامج Excel وذلك بهدف التعرف على كيفية تصميم برامج تطبيقية قوية باستخدام Excel تتمتع بخواص وإمكانيات متقدمة يسهل من خلالها إدخال البيانات والتعامل معها . نبدأ على بركه الله تعالى فى شرح بعض الأمور الخاصة بالفيجوال بيسك اكسل وهى فى غايه الأهمية كونها توضح لنا العديد من الأمور المستخدمه فى الأكواد وبرجاء قرائتها بتأنى وبدقه لإستيعاب ما بها من نقاط هامه جدا التعامل مع محرر الكود فى الفيجوال بيسك اكسل 1 – فتح Visual Basic من خلال برنامج الأكسل : سبق الإشارة الى كيفية فتح محرر الأكواد راجع درس الماكرو 2 – إنشاء الإجراء Procedure : الإجراء Procedure هو مجموعة الجمل أو الأوامر التي يتم كتابتها لتنفيذ مهمة معينة . ولإنشاء الإجراء يستخدم الأمر sub ويعنى ذلك إنشاء إجراء جديد ويعقب ذلك اسم الإجراء ويكون من اختيار المبرمج أو المستخدم فنجد أن البرنامج يكتب تلقائيا جملة End sub على أن يتم كتابة الأوامر الخاصة بالإجراء بين جملتي الإعلان والنهاية . 3 – تنفيذ الإجراء : يتم تنفيذ الإجراء من خلال ورقة العمل بأحد طريقتين: الأولى : من خلال تنفيذ أمر أدوات / ماكرو/ وحدات ماكرو واختيار الإجراء الذى تم حفظه ويتم حفظ الإجراء ضمن وحدات الماكرو بالاسم الذى تم اختياره والضغط على زر تشغيل . الثانية : عمل زر خاص لتنفيذ الماكرو باستخدام أشرطة أدوات النماذج واختيار الأمر إنشاء زر وتخصيص الزر للماكرو المحدد ويتم تنفيذ الماكرو بالضغط على هذا الزر . 4 – المتغيرات Variables : يقصد بالمتغير مكان يتم حجزه فى ذاكرة الحاسب يتم فيه تخزين قيمة او مجموعة من القيم لكى يتم استخدامها داخل البرنامج . ولابد من إعطاء اسم لكل متغير حتى يتسنى فيما بعد استخدام هذا المتغير فى الوصول الى النتائج المطلوب تحقيقها من البرنامج . وهناك شروط محددة يجب توافرها فى اسم المتغير وإلا تم رفضها من قبل البرنامج . شروط تسمية المتغيرات : 1 - يجب ألا يبدأ اسم المتغير برقم وأن يبدأ بحرف . 2 - الحروف التى تلى الحرف الأول يمكن أن تكون حروف أو أرقام أو الاثنين معا . 3 - لا يجوز أن يحتوى اسم المتغير على مسافات أو نقطة أو رموز خاصة مثل ( ؟ ، * ،/ ، ..... الخ ) ولكن يمكن استخدام الشرطه السفليه ( _ ) . 4 - ألا يكون اسم من الأسماء المحجوزة مثل (if ، Else, dim, double, ...... الخ ) 5 - يجب ألا يكون مستخدما من قبل . بمعنى لو هناك كود بإسم MZM فلا يجوز كتابه كود آخر داخل نفس المصنف بنفس الاسم . أمثلة على أسماء صحيحة للمتغيرات : Salma – Mahmoud – mynameisyasser – Howareyou - Y2011 أمثلة على أسماء غير صحيحة للمتغيرات : Ali Gomaa - Good Morning - Howareyou? - 1210 5 – الثوابت Constants : عرضنا فيما سبق ما يخص المتغيرات وأنواعها وشروط تسميتها ، والثوابت هى مثل المتغيرات والفرق الوحيد بينهما هو أن الثوابت لا تتغير قيمتها أثناء عمل البرنامج وأيضا نجد أن شروط تسمية الثوابت هى نفس شروط تسمية المتغيرات وأيضا أنواع الثوابت هى نفس أنواع المتغيرات . 6 – الإعلان عن المتغيرات : الإعلان عن المتغير هو أن نخبر لغة visual basic عن اسم المتغير ونوع البيان وهناك طريقة للإعلان عن المتغيرات وهى بكلمة dim . وهناك أساليب مختلفة لعملية الإعلان وهى كالتالى : 1 - الإعلان عن متغير واحد فقط فى كل سطر من سطور الإعلان مثل : Dim a as integer Dim b as single 2 - الإعلان عن أكثر من متغير فى سطر الإعلان مثل : Dim a, b as integer 3 - الإعلان عن متغير وتخصيص قيمة له فى سطر الإعلان : Dim C as integer = 7 4 - الإعلان عن متغيرات ليست من نفس النوع وإعطاء قيمة لها فى نفس السطر "Dim X as integer = 9 , Y as string = "Mr. Mzm EL-Shrief 5 - الإعلان عن متغير وتخصيص قيمة له من ناتج معادلة رياضية فى نفس السطر Dim X as integer = a + b 7 – تخصيص القيم للمتغيرات : عند تخصيص قيمة للمتغير فإن هذه القيمة تأخذ أحد الأشكال التالية : 1 - قيمة مجردة X = 3 2 - متغير آخر X = Y 3 - عملية حسابية X = a + b ملاحظات : · عند الإعلان عن متغير ولم يتم وضع قيمة له فإنه يتم افتراض قيمة له كالآتي : 1 - المتغيرات الرقمية تأخذ الرقم صفر . 2 - المتغير المنطقي يأخذ القيمة False . 3 - المتغيرات الحرفية تأخذ قيمة فارغة " ". 4 – المتغير date يأخذ التاريخ 31/ 12 /1899 . · القيمة الحرفية "" لا تساوى القيمة الحرفية " " حيث أن الأولى قيمة فارغة أما القيمة الثانية فهى عبارة عن مجموعة من المسافات والمسافة لها قيمة . · يمكن جمع الأرقام وأيضا النصوص وذلك باستخدام علامات الربط & أو علامة + مثال Dim X , Y , Z as string "X = " Deiaa "Y = " Mahmoud Z = X + Y وعلى ذلك تكون قيمة Z هى Deiaa Mahmoud انتهى الدرس الخامس مرفق ملف pdf به كامل الدرس الخامس وتقبلوا منى وافر الاحترام والتقدير الدرس 5.rar
    1 point
  38. تابع الدرس الثانى ندخل الى مرحله تنفيذ الماكرو الذى قمنا بتسجيله ولها خطوات معينة كالتالى : نذهب الى الشيت ثم نضغط على Insert تظهر لنا نافذة نختار منها Button ثم نقوم بوضعه داخل الشيت كما بالصور التالية ثم نقوم بالضغط على الزر كليك يمين ونختار تعيين ماكرو كالتالى تظهر لنا نافذة نختر منها اسم الماكرو وهنا قد اسميته MZM_ELSHRIEF ثم نختار This Workbook ثم نضغط على OK كالتالى الآن يمكنك تنفيذ الماكرو الذى قمنا بتسجيله بمجرد الضغط على الزر أى Button يمكنك أيضا تغيير اسم الزر اذا اردت ذلك كالتالى بالضغط كليك يمين على الزر تظهر لك نافذة اختر منها اضافة نص حفظ الملف عند حفظ الملف تظهر لنا رساله كما بالصورة التالية نضغط على زر NO فتظهر لنا رساله أخرى كما بالصورة التالية نضغط على زر Yes فتظهر لنا نافذة كما بالصورة التالية نقوم بإختيار من Save as type Excel Macro-Enbled Workbook ثم نضغط على Save الخيار التالى كما بالصورة التالية فتكون أيقونه الملف كما بالصورة التالية انتهى الدرس الثانى مرفق ملف PDF به كامل الدرس الثانى يرجى فى حاله هناك استفسار أن يكون فى مضمون الدرس حتى لا يتم التشتيت وتقبلوا منى وافر الاحترام والتقدير الدرس 2.rar
    1 point
×
×
  • اضف...

Important Information