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

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

  1. Gamal.Saad

    Gamal.Saad

    الخبراء


    • نقاط

      8

    • Posts

      211


  2. خالد الرشيدى

    خالد الرشيدى

    الخبراء


    • نقاط

      4

    • Posts

      889


  3. Shivan Rekany

    Shivan Rekany

    الخبراء


    • نقاط

      4

    • Posts

      3,491


  4. محمد ايمن

    محمد ايمن

    الخبراء


    • نقاط

      3

    • Posts

      1,667


Popular Content

Showing content with the highest reputation on 15 يون, 2017 in all areas

  1. اتفضل اليك وحدة نمطية هذا Function DeleteAll() On Error Resume Next Dim db As Database Dim idx As Long Dim strName As String Set db = CurrentDb ''Relationships For idx = db.Relations.Count - 1 To 0 Step -1 strName = db.Relations(idx).Name If Left(strName, 4) <> "msys" Then db.Relations.Delete strName Else Debug.Print strName End If Next idx ''Forms For idx = CurrentProject.AllForms.Count - 1 To 0 Step -1 strName = CurrentProject.AllForms(idx).Name DoCmd.DeleteObject acForm, strName Next idx ''Macros For idx = CurrentProject.AllMacros.Count - 1 To 0 Step -1 strName = CurrentProject.AllMacros(idx).Name DoCmd.DeleteObject acMacro, strName Next idx ''Reports For idx = CurrentProject.AllReports.Count - 1 To 0 Step -1 strName = CurrentProject.AllReports(idx).Name DoCmd.DeleteObject acReport, strName Next idx ''Queries For idx = db.QueryDefs.Count - 1 To 0 Step -1 strName = db.QueryDefs(idx).Name If Left(strName, 4) <> "~sq_" Then db.QueryDefs.Delete strName Else Debug.Print strName End If Next idx ''Tables For idx = db.TableDefs.Count - 1 To 0 Step -1 strName = db.TableDefs(idx).Name If Left(strName, 4) <> "msys" Then db.TableDefs.Delete strName Else Debug.Print strName End If Next idx ''Modules For idx = CurrentProject.AllModules.Count - 1 To 0 Step -1 strName = CurrentProject.AllModules(idx).Name If strName <> "Module5" Then DoCmd.DeleteObject acModule, strName End If Next idx End Function وفي النموذج ليس لديه مصدر في خلف زر مثلا او اي حدث اكتب Call DeleteAll
    3 points
  2. السلام عليكم اولا اعتذر من الاستاذ ابا خليل وتطفلت بان حاولت اطبق فكرته وقد يكون الواقع والذي في باله غير ذلك وهذه ضحايا الموانة الزايدة اخي جمال شكرا واعتقد انك تستحق خبير من الان ومن خلال قرائتي لمشاركاتك اخي الزهراني جرب الاستعلام التالي وكمصدر للنموذج : اي اذهب لمصدر النموذج والصق هذا الاستعلام بديلا لمصدر السابق ثم اذهب لعرض التصميم للاستعلام لتختبر المحاولة وهل هي لما تريد وتقصد SELECT Table1.ID, Table1.User, Table1.Section, Table1.Status FROM Table1 WHERE (((IIf(IsNull([forms]![Form1]![SectionSearch]),1,InStr(1,[Section],[Forms]![Form1]![SectionSearch])))>0) AND ((IIf(IsNull([forms]![form1]![UserSearch]),1,InStr(1,[user],[Forms]![Form1]![UserSearch])))>0) AND ((IIf(IsNull([forms]![form1]![StatusSearch]),1,InStr(1,[status],[Forms]![Form1]![StatusSearch])))>0)); بالتوفيق
    3 points
  3. إخوتى الكرام .. الملف التالى يتناول شرح الدوال الإحصائية .. اتمنى ان يمثل إضافه بسيطة .. وكل عام وانتم بخير .. المرفقـــات الدوال الاحصائية.rar
    2 points
  4. في بالي لوكان المرفق mdb لاشارككم استاذنا تمون واكثر .. وأشكرك على تواضعك ولطفك وبالعكس مثل هذه تحمل بين طياتها التقدير والمحبة ، اكرر شكري وتقديري .. ترشيح محل اعتبار
    2 points
  5. السلام عليكم جزاك الله خيراً استاذي سليم واذن لى ان ارد على السؤال الخاص بالتواريخ الهجرية اخى الكريم يمكن ذلك ولكن مع تعديل بسيط وهو كالتالى : C3: =DATEDIF($A3,VALUE("a"&$B3),"y") ' السنوات E3: =DATEDIF($A3,VALUE("a"&$B3),"ym") ' الشهور G3: =DATEDIF($A3,VALUE("a"&$B3),"md") ' الايام تقبلوا مرورى وتحياتى
    2 points
  6. الطريقة 100% وسهلة الإستخدام بالنسبة لي أو بالمعنى الصحيح بما إني مبتدئ فهذا الكود سهل علي أقدر أعدل عليه واضيف مثل ما أبي أتمنى أخوي Gamal.Saad ما يتضايق من كلامي شكـــراً شكــراً لكم جميعاً ..............................
    2 points
  7. كلمة مرور اضافة وتعديل الاصناف 123برنامج متابعة المخزون 23.9.rar
    1 point
  8. السلام عليكم ورحمة الله تم تعديل بعض أوامر الكود للمحاكاة مع الملف الجديد... بن علية حاجي طباعة متخصصة.rar
    1 point
  9. منذ ان نشأ بخاطرى عمل برنامج محاسبى بعد عمل دام 200 يوم من تاريخ 10-3-2014م وحتى تاريخ اليوم أقدم لكم هذا البرنامج المتواضع أهداء لكل الاساتذه والاخوة بالمنتدى هو الاصدار الاول من الجزء الاول من برنامج EMA بالادارة المالية ادعو الله ان اكون وفقت بهذا العمل ويكون نفع للجميع أود أن اشكرك كل القائمين على هذا المنتدى هذا الصرح العظيم وكل القائمين علية وأخص بالذكر العلامه القدير / استاذنا / عبدالله باقشير والاستاذ / محمد طاهر والاستاذ الفاضل / رجب جاويش والاستاذ/ عبدالله المجرب والاستاذ / طارق محمود والاستاذة / أم عبدالله والاستاذ / محمود الشريف والاستاذ / حمادة عمر والاستاذ / ضاحى الغريب والاستاذ/ ابراهيم ابوليله والاستاذ / سليم حاصبيا والاستاذ/بن علية حاجى والاستاذ/ محمود حموده وكل الاساتذه بهذا الصرح المبارك جعله الله فى ميزان حسانتكم أتمنى من الاخوة كتابة اى تعليق او ملاحظه او أخطا تم اكتشافه لا يتردد لحظة بمراسلتى سوف اقوم بعملية الشرح لكيفية العمل واستخدام البرنامج وانتظرو الجزء الثانى من البرنامج ( المخازن-والمشتريات-والمبيعات) فى نفس الملف واليكم البرنامج على امتداد XLSB الرقم السرى 123 اتمنى منكم دعوه صادقه من القلب لى ولوالدى EMA.zip
    1 point
  10. الجدول Farez غير موجود بالقاعدة يا أخى اعمله استيراد عشان نجرب نفيدك تفضل جرب المرفق 2.rar
    1 point
  11. هل التحويل الى هذا النوع مجرب من قبل حضرتكم استاذ ؟ هل ينفع هذا الشي لتحمل بيانات اكبر وحجم اكبر ؟ جاي التجربه وسأعلمك بالنتائج ؟ شكرا لاهتمامك
    1 point
  12. أ / محمد صالح ممتاز مشاركتك أستاذنا @ دالتين جميلتين أعتذر لانتهاء رصيدي من اللايك اليوم لك عندي واحدة
    1 point
  13. جزاكم الله خيرا أستاذنا عمرو وعقبال ما أشوفك القائد العام للمنتدى وزعيم جبهة أكسس
    1 point
  14. افيدك انا يا استاذ جمال الرسائل الخاصة بتتفعل لما توصل لعضو فعال بعد 100 مشاركة يعنى وكده كده لما تترقى وتبقى خبير ياباشا كل حاجة هتبقى مفتوحة
    1 point
  15. السلام عليكم ورحمة الله وبركاته بعد إذن الأستاذ الفاضل جمال سعد بالنسبة للتقريب في الرياضيات هو ما كان أكبر من نصف الرقم الذي نقرب إليه يتم جبره لأعلى وما كان أصغر من نصف الرقم الذي نقرب إليه يتم جبره لأسفل مثال 141 الواحد أقل من نصف 5 لذلك تجبر لأسفل فتصير 140 أما 143 فتجبر لأعلى فتصير 145 وكنت قد صممت دالة لهذا الغرض تساوي دالة mround الموجودة في إكسل Function masround(ByVal n As Double, Optional ByVal m As Double = 1) As Double masround = IIf(n - (m * (n \ m)) >= (m / 2), m * (n \ m + 1), m * (n \ m)) End Function وهي مرنة بحيث يتم تمرير العدد والمضاعف فمثلا لأقرب 5 masround([n],5) ولأقرب 20 masround([n],20) ولأقرب نصف masround([n],0.5) وهكذا أما إذا كان المطلوب هو الرفع لأقرب أعلى 5 وهو دور دالة ceiling في إكسل فهذه أيضا دالة لهذا الغرض Function masCeiling(ByVal X As Double, Optional ByVal Factor As Double = 1) As Double masCeiling = (Int(X / Factor) - (X / Factor - Int(X / Factor) > 0)) * Factor End Function ودورها رفع 121 إلى 125 ورفع 126 إلى 130 لأقرب أعلى 5 فاختر لنفسك أي الطريقتين تريد في حساباتك وفقنا الله وإياكم لكل ما يحب ويرضى
    1 point
  16. شكرا لك استاذ سليم وفيت وكفيت بارك الله فيه. ربي يوفقك ويعطيك ما تتمنى.
    1 point
  17. أوك شوف يا سيدي تم عمل جدول مؤقت مماثل لجدولك الرئيسي ثم استعلام أول يستخرج اسم الأب من خلال دالة مختصرة وسريعة في موديول ثم استعلام ثان يقوم بالالحاق من الاستعلام الأول إلى الجدول المؤقت ثم استعلام ثالث يستخرج الاسماء المكررة لأولياء الأمور ويحسب عددهم من دالة مختصرة ثم استعلام أخير يقوم بتحديث البيانات من الجدول المؤقت للجدول الرئيسي وكل الاستعلامات قابلة للتعديل وقد تجنبت استخدام أكواد سوى جود تشغيل تلك الاستعلامات بالترتيب
    1 point
  18. يا فندم هذه شهادة أعتز بها من محترف مثلك بالنسبة للصورة بتاعة الخبراء كنت أظن إن بعض الاعضاء المحترفين يختاروا صورة خبير ويضعوها تحت الاسم ههههههه كنت هرفع صورة من عندي بس لوصف آخر وكنت هبحث عن مكان الرفع ياباشا اختر ما شئت من الفاكهة لن يتضايق أحد من اختيارك بس عندي سؤال ومش عاوز أطرحه في موضوع مستقل بس ضروري ولازم أستأذن من صاحب الموضوع والاداريين طبعا. والسؤال هو كنت من فترة بدخل في منتديات وكان هناك رسائل خاصة بين الأعضاء هل هي متوقفة في هذا التصميم من المنتديات عاوز ابحث رسالة خاصة لأحد الأعضاء بدلا من ازعاج الباقين بكلام لن يفيدهم عندي بجوار الاسم صورة جرس يأتيني بالتنبيهات ولا يوجد أي رابط للرسائل
    1 point
  19. جزاك الله خيرا اخي الفاضا جمال هذا هو المطلوب سلمت يداك تحياتي
    1 point
  20. السلام عليكم ضع هذة المعادلة بالخلية a2 واسحب الى اسفل =IF($B2="منتدى اوفسينا";$C2;$D2) تقبل وافر تقديرى واحترامى وجزاكم الله خيرا
    1 point
  21. 1 point
  22. لو عاوز رأيي خاصة مع البطء الشديد في دالة اسم الأب الأصلية ياريت تقتنع بالمرفق الذي أرفقته لك بيعمل كل ما تطلبه وأسرع وبياخد في الحسبان الاسماء المركبة الموجودة بالجدول tblSpecialParts وينقص فقط كود ولي الأمر الناجحين3.rar
    1 point
  23. السلام عليكم ورحمة الله وبركاته اخي @Rebaz Bahram كتير من الاعضاء يخطؤن ويعمل علامة صح امام مشاركته علامة صح هو لجواب الاصح لذا اعمل علامة صح امام جواب الاصح اي امام جواب استاذنا @أبو إبراهيم الغامدي لكي من يزور هذا الموضوع يعرف ما هو الجواب لهذا السؤال ولكي يستفيد منه مع تقدير
    1 point
  24. Gamal.Saad أستاذنا يعطيك العافية الكود اشتغل 100% ألف شكر لك. Amr Ashraf فالنفترض أحد المستخدمين ما أدخل بيانات في حقل ما لإنه ما يحتاجها حالياً أو غير متوفرة البيانات عنده ومستقبلاً حب يضيف داخل الحقل الفارغ البيانات المطلوبة ، كيف راح يقدر يبحث عنها إذا السجل أساساً ما ظهر وقت البحث !
    1 point
  25. جرب هذه المعادلات في الخلايا C3: =DATEDIF($A3,$B3,"y") E3: =DATEDIF($A3,$B3,"ym") G3: =DATEDIF($A3,$B3,"md")
    1 point
  26. سيبك من الأجانب دول تفكيرهم تقليدي 1 + 1 = 2 وده طبعا مينفعش معانا لازم تبتكر يعني مثلا 1+1 = 3 - 1 المهم فكرة الدالة على السريع إنها بتشوف القيم المسجلة في المربعات الثلاثة مجتمعة وبناءا على تلك القيم يتم انشاء كود استعلام ثم نجعله مصدر النموذج لذلك لكي تطبق الدالة عليك أولا أن تختار مصدر بيانات النموذج هو الجدول وثانيا تكتب الكود التالي في محرر الفيجوال بيسك وجرب واعمل أكثر من تجربة مرة قيمة خالية هنا ومرة قيمتين خاليتين هناك وهكذا Option Compare Database Dim strSQL, a, b, c As String Private Sub SectionSearch_AfterUpdate() rs End Sub Private Sub StatusSearch_AfterUpdate() rs End Sub Private Sub UserSearch_AfterUpdate() rs End Sub Function rs() strSQL = "" a = strSQL & IIf(Nz(Me.UserSearch, 0) = 0, "", " (Table1.User) Like '*" & "" & Me.UserSearch & "" & "*'") b = strSQL & IIf(Nz(Me.SectionSearch, 0) = 0, "", " (Table1.Section) Like '*" & "" & Me.SectionSearch & "" & "*'") c = strSQL & IIf(Nz(Me.StatusSearch, 0) = 0, "", " (Table1.Status) Like '*" & "" & Me.StatusSearch & "" & "*'") If Nz(Me.UserSearch, 0) = 0 And Nz(Me.SectionSearch, 0) = 0 And Nz(Me.StatusSearch, 0) = 0 Then Me.RecordSource = "SELECT Table1.ID, Table1.User, Table1.Section, Table1.Status FROM Table1; " Else strSQL = "SELECT Table1.ID, Table1.User, Table1.Section, Table1.Status FROM Table1 WHERE " If Nz(Me.UserSearch, 0) <> 0 Then strSQL = strSQL & a If Nz(Me.SectionSearch, 0) <> 0 Then strSQL = strSQL & " and " & b If Nz(Me.StatusSearch, 0) <> 0 Then strSQL = strSQL & " and " & c Else If Nz(Me.StatusSearch, 0) <> 0 Then strSQL = strSQL & " and " & c End If Else If Nz(Me.SectionSearch, 0) <> 0 Then strSQL = strSQL & b If Nz(Me.StatusSearch, 0) <> 0 Then strSQL = strSQL & " and " & c Else If Nz(Me.StatusSearch, 0) <> 0 Then strSQL = strSQL & c End If End If Me.RecordSource = strSQL End If Me.Requery End Function
    1 point
  27. نفذت لك الفكرة التي أخبرتك عنها سابقا وهي الاستعانة بجدول وسيط لكن ارجو أن تنتبه إلى أن البرنامج يتعامل مع الاسماء التالية باعتبار أنهم ليسوا أخوة مثلا "حمدي الظايط طه عبدالرحمن" " فتحي الظايط طه عبدالرحمن محمد" نظرا لعدم كتابة الاسم الرباعي في أحدهم الناجحين3.rar
    1 point
  28. جرب هذا التعديل على الماكرو Option Explicit Sub give_data1() Dim i, r, k, My_row As Integer Dim My_rg As Range Dim My_Sh As Worksheet Dim S1, S2 As String Application.ScreenUpdating = False For i = Sheets.Count To 2 Step -1 Application.DisplayAlerts = False Sheets(i).Delete Next Application.DisplayAlerts = True For i = 6 To 36 If Main.Range("a" & i) = "" Then Exit For On Error Resume Next S1 = Main.Range("a" & i).Value S2 = Sheets(S1).Name If S1 <> S2 Then Sheets.Add After:=Sheets(Sheets.Count) With ActiveSheet .Name = Main.Range("a" & i) With .Range("a1:d1") .Value = Array("النوع", "الكميّة", "السعر", "قيمة الاستهلاك الشهري") .Interior.ColorIndex = 6 .Range("e2") = "مواد تستهلك الفطور الصباح" End With End With On Error GoTo 0 End If Next Main.Select For i = 6 To 36 r = 2 Set My_rg = Main.Range("a5:cx5") Set My_Sh = Sheets(Main.Range("a" & i) & "") For k = 2 To My_rg.Count If k = 10 Or k = 21 Or k = 67 Then My_row = My_Sh.Cells(Rows.Count, 1).End(3).Row My_Sh.Rows(My_row + 1).Insert Shift:=xlDown: r = My_row + 2 Select Case k Case 10 My_Sh.Range("e" & My_row + 2) = "مواد تستهلك في العشاء فقط" Case 21 My_Sh.Range("e" & My_row + 2) = " مواد تستهلك في الغداء فقط" Case 67 My_Sh.Range("e" & My_row + 2) = "مواد مشتركة بين الغداء والعشاء" End Select End If If Main.Cells(i, k) <> "" Then With My_Sh .Cells(r, 1) = Main.Cells(i, k) .Cells(r, 2) = My_rg.Cells(k) .Cells(r, 3) = My_rg.Cells(k).Offset(-1, 0) .Cells(r, 4) = My_rg.Cells(k).Offset(-2, 0) .Columns.AutoFit End With r = r + 1 End If Next Next Application.ScreenUpdating = True End Sub
    1 point
  29. الفرق بين ByVal و ByRef Byval يقصد بها الاستدعاء بالقيمة ByRef يقصد بها الاستدعاء بالمرجع الكود التالي سيوضح الفكرة أكثر لنفرض لدينا عددين و نريد تطبيق كود معين او معادلة ما على هذين العددين 'نضع هذا الكود خلف زر امر في نموذج dim x as intger dim y as intger dim i as intger x=10 y=5 'استدعاء كود الجمع بالقيمة و اظهار الناتج i=add1(x,y) msgbox i msgbox x 'استدعاء كود الجمع بالمرجع و اظهار الناتج i=add2(x,y) msgbox i msgbox x 'كود الجمع باستخدام Byval private function add1(byval n1, byval n2) as intger add1=n1+n2 n1=3 end function 'كود الجمع باستخدام ByRef private function add2(byref n1, byref n2) as intger add2=n1+n2 n1=3 end function الشرح في المثال انشئت وظيفة بسيطة لجمع عددين هما X Y عرفت متغيرين و وضعت قيم فيها وهي (x=10) و (y=5) الوظيفة Add1 انشئت وظيفة اسمها Add1 تستقبل عددين هما n1 و n2 ( بالقيمة ) Byval تقوم الوظيفة بجمع العددين و ارجاع الناتج ( و هنا الناتج 15 ) من خلال هذا السطر add1=n1+n2 ثم غيرت قيمة العدد الاول من 10 الى 3 من خلال هذا الكود n1=3 هذا يعني ان x يجب ان تصبح قيمتها 3 ولكن ستجد ان قيمة X مازالت 10 !!!!!!!!!!!!!!!! ( لاحظ انه بعد تعديل قيمة X من الوظيفة وضعت رسالة لتعطي قيمة x ) الوظيفة Add2 الوظيفة Add2 في نفس الوظيفة Add1 لكن الفرق ان الوظيفة Add2 تستقبل القيم n1 و n2 ( بالمرجع ) ByRef تقوم الوظيفة بجمع العددين و ارجاع الناتج ثم غيرت قيمة العدد الاول من 10 الى 3 ولكن هنا ستجد ان قيمة X اصبحت 3 !!!!!!!!!!!!!!!! السبب ان Byval تحافظ على القيمة الاصلية للمتغير المرسل لها اما Byref فهي تغير القيم للمتغير المرسل لها ارجو ان اكون قد وفقت في الشرح
    1 point
  30. الفرق بين Class و module الوحدة النمطية يخزن بها كود يستدعى من اي مكان في قاعدة البيانات وهو يخفف من كتابة الكود و تسهيل تطوير قاعدة البيانات في المثال السابق عندما عرفنا الوظيفة AdNum وهي تقوم بجمع عددين لنفرض انه لدينا 10 نماذج و نحن بحاجة لتطبيق كود الجمع في جميع هذه النماذج من غير المنطقي تكرار كتابة الوظيفة في كل نموذج اي اننا سنكتب الكود السابق 10 مرات و اذا اردنا ان نعدل او نطور الكود ستكون العملية صعبة و مملة و قابلة للخطا لذلك ننشئ وحدة نمطية ونضع الكود داخلها و بذلك يمكن استدعاء الكود من اي مكان class الكلاس هي تقريبا نفس الوحدة النمطية و لكن يوجد بعض الفروق الاساسية بينهما يتم التعامل مع الوحدة النطية باسم الكود المكتوب ضمنها مثال لنفرض لدينا وحدة نمطية اسمها Mod1 وبداخلها عشرة اكواد code 1 code 2 code 3 وهكذا و انا بحاجة الى استخدام الكود الاول في النموذج اقوم باستدعائه بهذا الشكل call code1 اما الكلاس فالموضوع يختلف لنفرض لدينا كلاس اسمها Class1 و بها عشرة اكواد code1 code2 code3 الخ وانا اريد استخدام الكود الثاني لا يمكن ابدا كتابة الاستدعاء هكذا Call Code2 السبب لانه عليك تعريف متغير يحتوي على الكلاس اولا ثم استخدامه ويتم تعريفها بهذا الشكل dim Cl = new class1 cl.code2 يتبع
    1 point
  31. اهلا بك اخي الكريم private تعني خاص مثال private sub total في السطر السابق قمت بتعريف كود على انه خاص اي ان هذا الكود يستدعى و يعمل ضمن النموذج المكتوب فيه الكود و اذا حاولت استدعائه من غير نموذج لن يجدي ذلك نفعا public تعني عام مثال public sub total في السطر السابق قمت بتعريف كود على انه كود عام اي انك اذا وضعت الكود السابق في نموذج فيمكنك استدعائه من نموذج آخر دون الحاجة لكتابة الكود مرة اخرى global تعني عالمي Global Strcod as String في السطر السابق تم تعريف متغير من نوع نص على انه عالمي و المقصود هنا ان المتغير يمكن استخدامه في اي مكان من قاعدة البيانات مع ملاحظة انه يمكنك ايضا تعريف المتغيرات بكلمة Public Public Strcod as String لكن عندما تريد استخدام المتغيرات لكافة النماذج يجب عليك وضعها ضمن وحدة نمطية كلمة ( Global ) هي كلمة قديمة و حاليا يحل محلها كلمة ( Public ) dim كلمة يقصد بها تعريف متغير Dim ii as Intger في السطر السابق تم تعريف المتغير ii على انه متغير من نوع رقمي set وتعني ضبط dim db as dao.database set db=currentdb في الكود السابق dim ii as intger المتغير في هذه الحالة يملك قيمة افتراضية وهي 0 اما في السطر السابق قمت بتعريف المتغير Db كقاعدة بيانات و لكنه مازال بحاجة الى تعريف قاعدة البيانات التي عرفته بها لذلك تستخدم كلمة Set و في هذا المثال ضبطت المتغير على قاعدة البيانات الحالية يتبع الفرق بين Sub و Function sub تعني موضوع او كود في في هذه الحالة الكود ينفذ دون ارجاع قيمة مثال public sub Amsg msgbox "aa" end sub عرفت الكود ليعطي رسالة مكتوب فيها aa و يستدعى بهذا الشكل call Amsg لاحظ هنا ان الكود لا يعيد قيمة هو فقط يعطي رسالة اما Function فهي وظيفة و هي تعيد قيمة مثال Public Function AdNum (ii as intger,ss as intger) as intger adnum=ii+ss end function في هذا المثال عرفت الوظيفة لتقوم بجمع عددين وتعطي الناتج حيث يمثل Adnum اسم الوظيفة و ii العدد الاول و ss العدد الثاني تستدعى بهذا الشكل call AdNum(10,15) لاحظ هنا ان الوظيفة تعيد قيمة وهي ناتج جمع العددين يتبع
    1 point
  32. الدرس الرابع: الحلقات التكرارية أو الدورانية Looping في كثير الأحيان يحتاج المبرمج أو المستخدم إلى تكرار تعليمة عدد من المرات حسب الحاجة. و هناك نوعان من الحلقات التكرارية , الأولى في حالة كان عدد مرات التكرار معروف و الثانية في حالة كان عدد التكرار مرتبط بشرط معين. أولا: الحلقة (For … Next) تستخدم الحلقة (For … Next) لتكرار عدد من المرات بحيث يكون عدد التكرارات معلوم. For counter = start To end [step increment] Statement Next counter Counter: متغير يمثل عداد الحلقة Start: القيمة الابتدائية للدوران End: القيمة النهائية للدوران Increment: مقدار الزيادة في كل حلقة من حلقات الدوران و إذا لم يوضع يأخذ القيمة 1 افتراضيا مثال1: For i = 1 To 10 Me.y = Me.y + i Next i هذا البرنامج يقوم بحساب مجموع الأعداد من 1 إلى 10 . بحيث i هو العداد و y مربع نص تظهر به النتيجة و القيمة الابتدائية له يجب أن تكون 0 مثال2: For i = 0 To 10 Step 2 Me.y = Me.y + i Next i في هذا البرنامج وضعنا قيمة الانتقال 2 يعني أن البرنامج سوف يحسب مجموع الأعداد الزوجية فقط (من 0 إلى 10) ثانيا: الحلقة (For Each … Next) تستخدم الحلقة (For Each… Next) عندما نريد تنفيذ تعليمة أو مجموعة من التعليمات لكل عنصر في مصفوفة أو مجموعة. و رغم أنها تشبه (For … Next) كثير إلا أنها تقوم بتنفيذ حلقة لكل عنصر مما يعني أنه لا يوجد عداد في هذا النوع من الحلقات. و يمكن استخدامها في المصفوفات أو مع الكائنات. صيغتها: For Each element In Group [statement 1] [statement 2] .... [statement n] Next مثال1: Dim Array_n() as string Array_n = Array(1, 2, 3, 5) Dim sum As Integer sum=0 For Each Item In Array_n sum = sum + Item Next Me.y = sum Array_n هي مصفوفة بها 4 عناصر. هذا البرنامج يقوم بحساب مجموع هذه العناصر و يضعها في مربع النص y Item : هي العنصر i: هو العداد مثال2: Dim frm As Form Dim fc As Control Set frm = Me For Each fc In frm.Controls Me.listbox.AddItem (fc.Name) Next هذا البرنامج يقوم بإضافة جميع أسماء عناصر النموذج الحالي إلى مربع قائمة listbox. السطر الأول هو تعريف المتغير frm من Form (نموذج) السطر الثاني تعريف المتغير fc من Control (عنصر تحكم) السطر الثالث إسناد النموذج الحالي (Me) للمتغير frm و ذلك باستعمال عبارة set لأن النموذج عبارة عن كائن (Object) . السطر الرابع هو القيام بالدوران لكل عنصر من عناصر النموذج(frm.Controls) السطر الخامس إضافة اسم العنصر(fc.Name) Listbox إلى مربع القائمة و ذلك بإستعمال التعليمة AddItem ثالثا: الحلقة (Do Until condition ... Loop) تقوم هذه الحلقة بتفحص الشرط قبل الدخول للحلقة إذا كان الشرط محقق (True) فإن البرنامج يقفز إلى ما بعد حلقة التكرارية أي أنه لن يتم الدخول للحلقة. و إذا كان الشرط غير محقق (False) فسيتم تنفيذ التعليمات Statments, ثم يرجع للسطر Do until لاختبار الشرط ثانية. و هكذا. يعني أنه سوف يتم تكرار الحلقة عدد من المرات حتى يتحقق الشرط. و لن ينفذه و لو مرة واحدة إذا كان الشرط صحيح من البداية. صيغتها: Do Until condition Statments Loop مثال: Dim i As Integer Dim sum As Integer i = 1 sum = 0 Do Until i > 10 sum = sum + i i = i + 1 Loop Me.y = sum يقوم هذا البرنامج بحساب مجموع الأعداد من 1 إلى 10 . i متغير من نوع integer يمثل العداد بالنسبة للحلقة في كل حلقة يزداد 1 و فيمته الابتدائية هي 1. sum متغير من نوع integer يمثل مجموع الأعداد قيمته الابتدائية هي 0. مادام i<10 فإن البرنامج يبقى يكرر العملية حتى يصبح i>10 و بعد نهاية الدوران يضع القيمة النهائية في مربع النص y رابعا: الحلقة (Do ... Loop Until condition ) هذا النوع من الحلقات يقوم بتنفيذ الدوران على الأقل مرة واحدة لأنه يختبر الشرط في نهاية الحلقة و بالتالي فإنه يتم الدخول للحلقة أولا ثم في نهاية الحلقة يتم تفحص الشرط. صيغتها: Do Statements Loop Until condition مثال: Dim i As Integer Dim sum As Integer i = 1 sum = 0 Do sum = sum + i i = i +2 Loop Until i > 10 Me.y = sum هذا البرنامج يقوم بحساب مجموع الأعداد الفردية من 0 إلى 10 لأن القيمة الابتدائية للعداد هي 1 و مقدار الزيادة في كل حلقة (الخطوة) هو 2 خامسا: الحلقة (Do While condition ... Loop) هذا النوع من الحلقات يقوم بتنفيذ الدوران مادام الشرط Condition محقق وإلا يتم التوقف عن الدوران في الحلقة و تقوم هذه الدالة بتفحص الشرط في بداية الحلقة. صيغتها: Do While Condition Statements Loop مثال: Dim i As Integer Dim sum As Integer i = 0 sum = 0 Do While i <= 10 sum = sum + i i = i + 2 Loop Me.y = sum يقوم هذا البرنامج بحساب مجموع الأعداد الزوجية من 0 إلى 10 مادام i<=10 فإن البرنامج يعيد الدوران. في كل دورة يقوم بإضافة 2 للعداد حتى يصبح i>10 سادسا: الحلقة (Do ... Loop While condition) هذا النوع من الحلقات الدورانية المشروطة يتم فيه تنفيذ التعليمات مرة واحدة على الأقل لأنها تختبر الشرط في نهاية الحلقة و هي تشبه النوع الرابع كثيرا, إلا أنها تستمر في الدوران مادام الشرط محقق و تتوقف عندما يصبح الشرط غير محقق. صيغتها: Do Statements Loop While Condition مثال: Dim i As Integer Dim mult As Long i = 10 mult = 1 Do mult = mult * i i = i - 1 Loop While i > 0 Me.y = mult هذا البرنامج يقوم بحساب جداء الأعداد من 10 إلى 1 و يضع النتيجة في me.y هنا وضعنا العداد i تنازليا (i=i-1) في كل دورة ينقص 1 من العداد حتى يصل إلى 0 نلاحظ هنا بالنسبة للمتغير mult و الذي يمثل الناتج أنني وضعت نوعه Long Integer بدلا من و السبب يرجع لأن النوع integer أقصى قيمة له هي 32767 و في هذه الحالة الناتج يفوق هذا العدد و بالتالي سوف يظهر لنا الخطأ رقم 6 (Overflow)
    1 point
  33. الحمد لله نحن نشترك في هذا الأمر و أنا أيضا لم ادرس البرمجة و لكن تعلمت الخورزميات وحدي بالمطالعة فهي أساس البرمجة ثم مارست لغة الفجوال بسيك قليلا قبل الإنتقال إلى الأكسس و الآن أنا أتعلم الدلفي إلى جانب الأكسس هذا كله هواية للبرمجة. مع العلم أن إختصاصي مختلف تماما و هو "ماستر هندسة كهربائية"
    1 point
  34. اعتذر رفعت مرفق خاطئ البرنامج مرفق المراسلة.rar
    1 point
  35. تفضلى المرفق واهلا بكى بين اخوتك حساب السن.rar
    1 point
  36. هنا سنتحدث عن فتح النموذج بالكود سواء بكامل السجلات او علي سجل محدد و هذا يتم باستخدام أمر Docmd.openForm و هذا الامر له ستة معاملات arguments نختار منها ما نريد و نترك ما نريد ليأخذ قيمته الافتراضية الجزء الأول هواسم النموذج المراد فتحه و نكتبه بين "" فيكون الحد الادني للجملة مثلا هو docmd.openForm "form1" و اذا بدأنا نكتب فى الفيجوال بيزيك فسيساعدنا ليذكرنا بمكونات كل جزء بعد كتابة الفاصلة التي تفصل بين الاجزاء المختلفة للجملة .. جرب كتابة فاصلة بعد الجزء الاول و ستري ما أقصد الجزء الثاني هو طريقة عرض النموذج بعد فتحه هل فى وضع العرض العادي ، أو وضع التصميم أو ورقة البيانات ... الجزء الثالث هو اسم فلتر معد مسبقا علي هيئة استعلام ، علي أن يحوي الاستعلام علي الحقول الموجودة فى النموذج الجزء الرابع الشرط و يكون علي هيئة [fieldname] = Forms![formname]![controlname on other form] و هو الجزء الذي استخدمناه فى المثال السابق بان رقم الموظف = رقم الموظف الموجود فى مربع النص فى النموذج الجزء الخامس يعبر عن طريقة فتح النموذج من حيث التعامل مع البيانات ، أي فتح النموذج فى وضعية التعديل أم الاضافة ام القراءة فقط الجزء الأخير طريقة فتح نافذة النموذج عادي - مخفي - Modal .. و الافتراضي هو عادي Normal و فى المثال عندما أردنا فتح النموذج بكامل سجلاته اختر خصائص الزر و من صفحة الاحداث ، اختر حدث عند النقر لتشاهد الكود و هو Dim stDocName As String Dim stLinkCriteria As String stDocName = "FrmMainEmp" DoCmd.OpenForm stDocName, , , stLinkCriteria و هي طريقة منظمة يستخدمها المعالج لاستخدام المتغيرات داخل الجملة كخطوة وسيطة و الكود السابق يناظر DoCmd.OpenForm "FrmMainEmp" حيث أن stLinkCriteria لم يتم اعطاؤه قيمة و علي العكس فى زر فتح نموذج علي موظف معين ، فقد تم تعيين قيمة للشرط stLinkCriteria Dim stDocName As String Dim stLinkCriteria As String stDocName = "FrmMainEmp" stLinkCriteria = "[EmpID]=" & Me![EmpID] DoCmd.OpenForm stDocName, , , stLinkCriteria اي انها تناظر DoCmd.OpenForm "FrmMainEmp", , , "[EmpID]=" & Me![EmpID] هذا حال كون حقل EmpID رقمي اما اذا كان نص فنضيف علامتي '' الي الجملة ، فتصبح DoCmd.OpenForm "FrmMainEmp", , , "[EmpID]='" & Me![EmpID] & "'"
    1 point
×
×
  • اضف...

Important Information