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

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

  1. jjafferr

    jjafferr

    أوفيسنا


    • نقاط

      20

    • Posts

      9,756


  2. أ / محمد صالح

    أ / محمد صالح

    أوفيسنا


    • نقاط

      5

    • Posts

      4,357


  3. Shivan Rekany

    Shivan Rekany

    الخبراء


    • نقاط

      5

    • Posts

      3,490


  4. عبد الفتاح كيرة

    • نقاط

      3

    • Posts

      3,015


Popular Content

Showing content with the highest reputation on 22 ماي, 2017 in all areas

  1. السلام عليكم المنتدى كان على هيئة نقاش ، فتم تغييره الى اسئلة واجوبة واحد اهم الفوائد من هذا التغيير هو: ليمكن اختيار الاجابة الصحيحة و تظهر تلقائيا بعد اول سؤال ان شاء الله نتعود على الحلّة الجديدة بسرعة ، ونستفيد منها بالاضافة الى ان المنتدى سيرتقي الى النسخة الاحدث: فنرجوا من الاعضاء ان يوسعوا صدورهم لهذا الكم الهائل من التغييرات ، والى الافضل دائما جعفر
    4 points
  2. وعليكم السلام أخي كرار انا اعتذر ، بس بالفعل نسيت في الكثير من مشاركاتي ، اضع صور ثابته ، وفيها دوائر او مربعات او اسهم ، او كتابة ، والبرنامج اللي استخدمه هو IrfanView ، http://www.irfanview.com/ وهنا رابط شرح بسيط له: http://eport.soundpiper.com:8080/pictutor/irfanview.html وعند الضغط على الزر F12 ، نستطيع استعمال ادوات الرسم: http://www.mitalia.net/irfanpaint/?manual انا بدأت استخدم هذا البرنامج المجاني من حوالي سنة 1998 ، ولا اعمل على اي كمبيوتر بدونه ، وفيه ميزات لا تُعد ولا تُحصى ، بالاضافة الى ميزة التحكم فيه عن طريق Commandline ، وقد قام احد المبرمجين بعمل برنامج اكسس بسيط له (مرفق ، والصور مالي ) وانا استعمله في برامج قواعد بيانات الاكسس ، والتي تحتاج الى اي شئ له علاقة بالصور اما الصور المتحركة (gif animation) ، فاستخدم البرنامج المجاني ScreenToGif: https://screentogif.codeplex.com/ جعفر IrfanView_MDB.zip
    3 points
  3. وعليكم السلام ورحمة الله وبركاته واحد منهم كان انا شكرا لك انا نزلت البرامج ووصلت للمطلوب تقبل تحياتي
    2 points
  4. شكرا على البديل أخوي شفان هنا بدون بديل: . ثم الكود يصبح: Private Sub lst_Click() Me.نوع_التعامل = DLookup("[نوع اتعامل]", "التعامل", "[رمز الخدمة]=" & Me.lst) End Sub Private Sub opt_Click() Me.نوع_التعامل = DLookup("[نوع اتعامل]", "التعامل", "[رمز الخدمة]=" & Me.opt) End Sub جعفر 657.Database1.accdb.zip
    2 points
  5. اتفضل تم اضافة هذا الكود على مثال استاذنا @jjafferr هذا لاوبشن كروب Private Sub opt_Click() If Me.opt = 1 Then Me.نوع_التعامل = "مميز" ElseIf Me.opt = 2 Then Me.نوع_التعامل = "عادي" ElseIf Me.opt = 3 Then Me.نوع_التعامل = "جيد جدا" End If End Sub وهذا ل ليست بوكس Private Sub lst_Click() If Me.lst = 1 Then Me.نوع_التعامل = "مميز" ElseIf Me.lst = 2 Then Me.نوع_التعامل = "عادي" ElseIf Me.lst = 3 Then Me.نوع_التعامل = "جيد جدا" End If End Sub ما في فرق بينهما واتفضل القاعدة الك بعد اضافة الكود 657.Database1.accdb.zip
    2 points
  6. السلام عليكم عندي ملف آكسل فيه عدة الخلايا ، أحتاج كود او معادلة تمنع الكتابة مثلاً في الخلية A11 الا بعد الكاتبة في الخلية A1 . يكون شرط اساسي عند الضغط على الخليه تظهر رسالة أرجو تعبة الاسم اولاً ( مثلاُ ) وشكراً مقدما للجميع .
    1 point
  7. المطلوب غير واضح بصورة كافية برجاء التوضيح بمنتهى التفصيل حيث أن المتطوع للإجابة لا يعرف شيئا عن البرنامج إلا من خلال ما تدلي به من معلومات
    1 point
  8. :::هل قمت بكافة الاعدادات اللازم لعمل مشاركة قاعدة البيانات ..؟ كفصل القاعد الى قاعدتين احدهما(الرئيسية) مع الجداول. والاخرى المشاركة فقط استعلامات ونماذج .... الخ
    1 point
  9. لا أدري ما السبب فيما يحدث في هذا الشيت لقد أوقف برنامج الإكسل وتجمد (هانج) والحل هو نسخ المحتويات لشيت جديد ولكن بتحديد النطاق المطلوب فقط وليس تحديد الشيت كله جرب هذا الشيت بعد التعديل 2222.rar
    1 point
  10. السلام عليكم حل آخر بعمود إضافي ومعادلات بسيطة وتنسيق شرطي... بن علية wsh_hben.rar
    1 point
  11. إليكم طريقة أخرى للحل Public Function Last2Records(id, Position) On Error Resume Next Dim RS As Recordset, L2R Set RS = CurrentDb.OpenRecordset("Select emp_id,CInt(rep_year) as RepYear,rep From report " _ & "Where emp_id=" & id _ & " ORDER BY emp_id,Cint(rep_year) Desc") L2R = RS.GetRows(2) Last2Records = L2R(1, Position) End Function بعد فرز البيانات تنازليا من السجلات العائدة من الاستعلام بشرط معرف الموظف نأخذ أول سجلين منها (تمثل أعلى قيمتين) عن طريق ()GetRows يعيد هذا المنهج مصفوفة ثائية الآبعاد؛ البعد الأول يمثل حقل البيانات، والآخر يمثل سطر البيانات تأخذ الوظيفة متغيرين الأول معرف الموظف، والثاني موضع السجل قيمة؛ بين (0 و 1) يصدر عن الوظيفة الخطأ (Out Of Range) إذا كانت اسطر البيانات أقل من أثنين.. يمكن تجاوزه بـ (Resume Next) استخدمت هذه الوظيفة في استعلام لجدول الموظفين؛ اسندت السجل الأول (0) إلى Rep_last باعتباره أعلى قيمة والسجل الثاني(1) إلى Rep_before باعتباره أدنى قيمة الرجاء مراجعة الاستعلام Last2Years db2.zip
    1 point
  12. ::: الخطا انك قمت بادخال قيمتين متشابهتين في حقل مفتاح اساسي مفرس لا يقبل التكرار . تاكد من ذلك .
    1 point
  13. وعليكم السلام هذه طريقة معرفة الارقام الناقصة بين الارقام جعفر
    1 point
  14. اهاااااااا سهله جدا ان شاء الله فقط فى استعلام2 غير المعيار الاتى فى الحقل1 <=1000 الى المعيار الاتى <=DLast("[رقم]";"Sheet1") وممكن برضو <=DMax("[رقم]";"Sheet1") Serial (1).rar
    1 point
  15. اتفضل Serial.rar فى استعلام2 وضعت المعيار الاتى فى الحقل1 <=1000
    1 point
  16. بعد اذن اخي خالد انظر الى هذا الملف ريما يكون المطلوب تم حمابة المعادلات لعدم العبث بها عن طريق الخطأ wsh_Salim.rar
    1 point
  17. السلام عليكم سألني الكثير من الاعضاء عن البرامج اللي استعملها في مشاركاتي والتي استعملها للصور والدوائر والاسهم والصور المتحركة ، وهذا رابط فيه شرح بسيط ومعظم البرامج التي استعملها هي مجانية ، والحمدلله هناك الكثير منها ، بكفاءة متناهية جعفر
    1 point
  18. السلام عليكم انظر المرفق التالى وابدي ملاحظاتك wsh.rar
    1 point
  19. هذا موضوع قيم جدا صارت عندنا أرصدة من الحلول الجزئية و الكلية وفقكم الله
    1 point
  20. 1. نعم أخوي ابوخليل هذا واضح 2. في الواقع انا لما انتقل للكود بدل الاستعلام ، فتصبح يدي وشهيتي مفتوحة بدل ان نأخذ اعلى قيمة ثم نأخذ اللي بعدها ، خلينا نفرز جميع القيم من الاكبر الى الاصغر ، مثلا للموظف رقم 2 . ولاحظ بأني حذفت السنة 1916 . وبتغيير في كود أخوي ابوخليل ، فتم الموضوع Private Sub cmd_update_Click() On Error GoTo err_cmd_update_Click Dim db As DAO.Database Dim rs As DAO.Recordset Dim rs_Report As DAO.Recordset Dim j, i, ii, x As Integer Dim r, rr As String Set db = CurrentDb Set rs = db.OpenRecordset("emp") rs.MoveLast rs.MoveFirst For j = 1 To rs.RecordCount x = rs!emp_id Set rs_Report = db.OpenRecordset("SELECT Val([rep_year]) as r_Year, rep, emp_id FROM Report WHERE emp_id =" & x & " ORDER BY Val([rep_year]) DESC") rs_Report.MoveLast: rs_Report.MoveFirst i = rs_Report!r_Year r = rs_Report!rep rs_Report.MoveNext ii = rs_Report!r_Year rr = rs_Report!rep rs.Edit rs!rep_last = r rs!rep_befor = rr rs.Update rs.MoveNext Next j MsgBox "??" Set db = Nothing rs.Close: Set rs = Nothing rs_Report.Close: Set rs_Report = Nothing Exit Sub err_cmd_update_Click: If Err.Number = 3021 Then ii = "" rr = "" Resume Next Else MsgBox Err.Number & vbCrLf & Err.Description End If End Sub . 3. وهاي عالجناها بأنه اذا مافي سجل ، لا تعطينا لا خطأ والقيمة ستكون "" ، وكذلك تراها في السجل الرابع ، حيث جعلت له سجل واحد فقط جعفر 655.3.db1.mdb.zip
    1 point
  21. 1 point
  22. ممكن تستعمل حدث عند تغيير تحديد الحلايا للرجوع للخلية المطلوبة جرب هذا الكود Private Sub Worksheet_SelectionChange(ByVal Target As Range) If [f8] = "" Then [f8].Select End Sub
    1 point
  23. السلام عليكم اخى الكريم - فى ذهني فكرتان - الاول في السطر الخاص ب ( ارقام الاعمده المطلوب نقلها ) ستلاحظ ان هناك 5و5و5 يمكنك ان تستبدل الاولى والثانيه برقم عمود لا يحوي بيانات وليكن 104 مثلاً -- هذه فكره - الثانية -وهى قابله للتطوير - لا احبذ ان تعمل بها بهذا الملف - ولكن - سأطرحها لربما شارك اساتذتى بالمنتدي بطريقة افضل منها وعندها ستمثل لى إضافة - وهى تقسيم مصفوفة النتائج الى جزئين - الجزء الاول يعبأ بالنطاق a:O , الجزء الثاني R:AZ وذلك بإستبدل الكود الخاص بتعبئة المصفوفة .Range("A11").Resize(j - 1, UBound(temp, 1)).Value = temp بهذين الكودين ( مع حذف الخمسة الاولى والثانية الموجوده بارقام الاعمده المطلوب نقلها ) .Range("A11").Resize(j - 1, 15).Value = Application.Index(temp, [row(1:7000)], Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)) .Range("R11").Resize(j - 1, c - 14).Value = Application.Index(temp, [row(1:7000)], Array(16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50))
    1 point
  24. في الكود الأول حتى يتم تغيير النطاق الذي يتم تصديره يجب تعديل الكود ولكن في التعديل الأخير تم تغيير آلية التصدير وهي أن تقوم بتحديد النطاق الذي تريد تصديره ثم تضغط على الزر بدون الدخول على الكود وتعديله بالإضافة إلى أنه تم وضع مسار سطح المكتب بغض النظر عن اسم المستخدم في الويندوز وفقنا الله وإياكم لكل خير وعلمنا ما ينفعنا ونفعنا بما علمنا
    1 point
  25. تمام ظهرت الرؤيا وفقكم الله لكن هذا الحقل حقل العام يبدو أنه حقل ممسوس لأنى بعد أن حولته إلى حقل رقمى بقيت فيه آثار من النصية أفسدت الربط كان يجب حذفه و عمله من جديد ما رأيك هل هذا ممكن الحدوث
    1 point
  26. حياك الله اخوي عبدالفتاح ، والطيبين دائما على راسي 1. كود اخي ابوخليل في المرفق هو نفسه الذي عرضه في المشاركة ، ولم يستخدم Val في امر Dmax ، وانما استخدمه في الاسطر التالية في الامر Dlookup 2. اضافة الجدول او الاستعلام مرة ثانية وثالثة و... في الربط يكون كأنك تتعامل مع جدول/استعلام جديد ، بشروطه ومعاييره ، ولا في اي شيء خاص ، ولكني للتجربة اضفت نفس الجدول 24 مرة ، فلاحظت في تأخير في الاستعلام 3. الرسالة تأتي لأنك تربط حقل رقم بحقل نص ، وهذا لا يقبله الاكسس وهذا الذي كنت اشير اليه في مشاركتي الثانية ، لهذا السبب قمت ببعض الخطوات الاضافية مثل Val و Int ، حتى يتم توحيد الحقول الى رقم ، ومنها يتم الربط جعفر
    1 point
  27. السلام عليكم انا عملت التنبيه مرتين باللون البني: ومرة اخرى هنا . ولكن الظاهر لم تنتبهوا لها ، فاعذروني اثبته لكم المشكلة كلها اننا نتعامل مع حقل نص وليس رقم: لذلك كود أخي ابوخليل يحتاج تعديل ، وملاحظة اخي عبدالفتاح غير دقيقة: . الى الاثبات: 1. حقل التاريخ في الجدول هو نص . اذا طبقنا كود اخي ابوخليل على التواريخ كما هي في الجدول ، فالنتيجة تكون صحيحة (وذلك بسبب الحرف الاول للسنوات كلها 1) : . بينما اذا استعملنا التواريخ التالية ، فنرى ان الكود يعطي نتائج غير صحيحة ، والسبب هو طريقة فرز الارقام يبدأ من الصغير الى الكبير ، بينما فرز النص يختلف ، فالفرز يكون بالحرف الاول ، والحرف 9 يكون دائما اكبر من الحرف 1 (1 و 12 و 100 و 1000 ، اول حرف لها هو 1) . لعلاج هذه المشكلة ، يجب ان نأخذ القيمة الرقمية لحقل التاريخ ، وليس قيمته كما هو في الجدول (قيمة نصّية) ، فعليه يصبح كود اخي ابوخليل: بدل i = DMax("rep_year", "report", "emp_id=" & x) ii = DMax("rep_year", "report", "emp_id=" & x) - 1 نغير rep_year الى Val([rep_year]) فيصبح الكود i = DMax("Val([rep_year])", "report", "emp_id=" & x) ii = DMax("Val([rep_year])", "report", "emp_id=" & x) - 1 . والنتيجة تكون صحيحة: . جعفر 655.2.db1.mdb.zip
    1 point
  28. الفاضل @ابوخليل مهمتنا الرد على السائل ويتحمل هو مسئولية نتائج التطبيق و للسائل أقول ماذا تعنى كلمة تحديث فى أكسيس إنها تعنى تغيير بيانات حقول معينة فكيف يكون تحديث جدول كامل لو كنا سنحدث جدولا بكامله فالأولى استبداله بجدول جديد مثلا نحدث جدول الطلاب لحقل الصف لنقلهم من صف لصف أعلى
    1 point
  29. السلام عليكم .. اذا سمحتم لي اريد ابداء وجهة نظر ما الغرض من الفكرة ؟ وكيف يتم تغيير بيانات تاريخية ؟ تم رصدها في وقتها ، انا اعتبر هذا غير صحيح ومخالف لقوانين التوثيق المتعارف عليه ان التحديث الجماعي يكون على جدول حالي كجدول الاصناف لتعديل الاسعار مثلا واذا تقول انا ما يهم اخالف كل القوانين : فتحديث سجل كامل غير منطقي .. يعني المعقول احدث منه حقل حقلين واذا ستصر على فكرتك : اعمل كما تفضل الاستاذ عبد الفتاح ولكن تعمل خطوة قبلها وهي تحذف السجلات القديمة وتلحق الجديدة
    1 point
  30. ما شاء الله .. دقة ومتابعة وكأن العمل يخصك , نعم مر بخاطري -1 هذا لذا قلت تطبيق لفكرة الاستاذ جعفر فكرت في Dlast ان كنا سنتعامل مع السجلات وليس القيم ولكني لم اجرب لذا تظهر هنا جليا فائدة الترقيم التلقائي كمفاتيح للجداول اما مسألة تقرير واحد فلم يخطر ببالي ,, يعني تحتاج شرط . صح ؟
    1 point
  31. ولاكن استاذي العزيز انت عملت كود الحاق لجدول rasael_custmer بينما انا اريد تحديث بياناته بحسب البيانات الموجودة في جدول N_rasael_custmer1 هذا مطلبي بارط الله فيك وللتوضيح اكثر عندما يتم عمل استعلام تحديث لاي جدول فانه يتم تحديد الحقول المراد تحديثها في الاستعلام فهل يمكن عمل كود لتحديث اي جدول للحقول بالكامل بدون تحديد الحقول لانه اذا كان الجدول به مثلا ثلاثون حقل وانت تريد تحديثها بالكامل فالامر يكون متعب في استعلام التحديث وذلك مثل استعلام الالحاق فانك تستغني عن الحقول باستخدام النجمة
    1 point
  32. السلام عليكم ورحمة الله شكرا لك استاذى العزيز / خالد نصائحك دائما فى العقل والقلب بارك الله فيك و فى جميع اساتذتنا الاجلاء
    1 point
  33. أحي لوسمحت لا تعمل اكثر من موضوع لنفس السؤال لقد تم حذف الموضوع الآخر شكرا لك أخي شفان جعفر
    1 point
  34. تفضل ، حسب فهمي للسؤال . جعفر 657.Database1.accdb.zip
    1 point
  35. لا لا لا رحمة ولا شفقة بعد اليوم ههههه يا باشا حتى ولو وضعت بالكود نصف كيلو لحمة هههههههه معلش أصل اللحوم غالية اليومين دول سيعمل أيضا كالتالي : Private Sub Command11_Click() If IsNull(txts) Then MsgBox "مربع النص خالي" Exit Sub End If Loopy = (CDbl(Len([txts]) - Len(Replace([txts], ")", "")))) txtx = "" c0 = 1 Do c1 = Nz(InStr(c0 + 1, Me.txts, "("), 0) c2 = Nz(InStr(c1 + 1, Me.txts, ")"), 0) c3 = c2 - c1 If c1 <> 0 And c2 <> 0 Then c4 = Mid(Me.txts, c1 + 1, c3 - 1) Loopy = Loopy - 1 c0 = c2 Me.txtx = Me.txtx + CHARW(c4) Loop Until Loopy = 0 End Sub بس طبعا لو اللحمة زادت ممكن الكود يتعطل
    1 point
  36. ::: يتم تغيير البيانات في المستطيل الاخضر لانها مرتبطة بنفس السجل في الاحمر ؟ .... عموما مالذي تريده بالضبط مالبرنامج الذي تريد تصميمه وما هي فكرتك لاساعدك .. ::: كلما فهمنا اكثر ساعدناك افضل .... تحياتي . لاتنسى ارفاق مثال . مع ملاحضة مشاركة الاستاذ @عبد الله قدور .
    1 point
  37. السلام عليكم ورحمة الله تم التعديل وتم تجريب الكود بعد عمل صفحة جديدة غير محمية حيث لم اتمكن من التجربة فى المرات السابقة اليك الكود Sub TransKinds() Dim ws As Worksheet, sh As Worksheet Dim Arr As Variant, Temp As Variant Dim i As Long, j As Long, p As Long Dim Kname As String Set ws = Sheets("حركة اليوميه") Set sh = Sheets("كارت الصنف") Kname = sh.Range("F2").Value Application.ScreenUpdating = False Arr = ws.Range("D5:O" & ws.Range("F" & Rows.Count).End(xlUp).Row).Value ReDim Temp(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) For i = 1 To UBound(Arr, 1) If Arr(i, 3) = Kname Then p = p + 1 For j = 1 To 10 Temp(p, j) = Arr(i, Choose(j, 1, 4, 3, 6, 7, 8, 9, 10, 11, 12)) Next End If Next If p > 0 Then sh.Range("E5").Resize(p, UBound(Temp, 2)).Value = Temp Application.ScreenUpdating = True End Sub
    1 point
  38. وعليكم السلام أخي واهلا وسهلا بك في المنتدى الجواب هو نعم ، وتلقائيا جعفر
    1 point
  39. تم رفع هذا الكود فى مشاركة منفصله حتى لا ننسى هذه المشاركة البحث السريع تم ارفاق كود الحل من الفاضل ا / أبوعبد الله مرفق الملف البحث السريع حسب الورقة.rar و لا تنسونا من صالح الدعاء تحياتى
    1 point
  40. حياك الله اخي الكريم بالترتيب من خصائص النموذج .... بيانات ... تأمين السجلات ... اختر سجل محرر بالتوفيق
    1 point
  41. شكرا جزيلا يا استاذي انا اعرف انه مشاغلك كثيرة ... ربي يعينك وخصوصا علينا ...
    1 point
  42. تفضل . . وهذا ما كانت رسالة الخطأ تقول: جعفر
    1 point
  43. مرحباً أستاذ نارت ردك على سؤالي فيه بركة . والحمدلله لقد وجدت الحل . حيث أنني جعلت النموذج الرئيسي سجل محرر , ووضعت نموذج آخر متصل بالنموذج الرئيسي . ولم تعد تظهر تلك الرسالة .
    1 point
  44. اخي osamram انظر المرفق واي استفسار او تعديل اعلمني تحياتي لك CONTROL1.rar
    1 point
  45. أخى العزيز نزار : حاولت مرارا ان افعل ما اخبرتنى به ولم افلح ولهذا ارسل لك صفحه من صفحات ملف الكنترول الخاص بى لكى تتكرم بتنفيذ ما ذكرته ثم سأحاول تطبيقها على باقى صفحات الملف عندى . ارجو الا اكون قد اثقلت عليك أسامة ارجو ان يكون الفرز لكل عمود سواء كان ماده بالكامل أو فرع من فروعها CONTROL.rar
    1 point
  46. اخي osamram السلام عليكم ورحمة الله في الماكرو لم يتم تحديد لنهاية المدى ولكن التحديد لبداية المدى وهو B2 الى آخر الجدول كذلك اذا اردت استخدام الكود مع اي جدول خاص بك ما عليك سوى نسخ الكود من الموديل Nizar الى الملف الخاص بك مع نسخ الكود الموجود في صفحة اسم التلميذ مع مراعاة اسم الصفحة في الملف الخاص بك هذه بصورة مبسطة لكيفية عمل الكود مع ملفات الكنترول لديك اما عملية مرة تصاعدي ومرة تنازلي فيوجد امر في الفقرة الرابعة يقوم بمقارنة القيمة في اول العمود مع القيمة في آخر العمود فاذا كانت القيمة في بداية العمود اكبر من القيمة في نهاية العمود يتم الفرز تنازلي والعكس بالعكس. ولعمل خلايا الفرز من مربع ادوات الرسم يوجد مربع Rectangle عند الضغط عليه تقوم بتحديد مكان الخلية في الصفحة والتي سيبدأ الفرز من عندها وتقوم برسم المستطيل وتسجيل الماكرو الجديد هذا بشكل مختصر واذا واجهتك اي صعوبة في تنفيذ اي شئ فلا تتردد بالكتابة تحياتي لك
    1 point
  47. الدرس الاول - الدالة IFدالة الدوال او ام الدوال . كما سميتها وسبب التسمية انة لا يخلو برنامج مهما كان بسيط من وجود هذة الدالة . حيث تعتبر من اكثر الدوال استخداما ودمجنا مع بقية الدوال الاخري . اسم الدالة : IF وهي تعني (أذا) الشرطية . استخدامتها : الدالة IF من الدوال المنطقية . وهي تستخدم في الغالب لفحص البيانات ومعرفة القيم الصحيحة من غير الصحيحة وهي مرتبطة بتحقيق شرط معين في حالة وقع الشرط يتم تنفيذ التعليمات . وتنفيذ تعليمات اخري في حالة عدم تحقيق ذلك الشرط . وقبل الخوض في الجوانب البرمجية لهذة الدالة رايت ان نتطرق الي مثال لشرح فكرة عمل الدالة IF ووجدت في القاعدة الفقهية الشهيرة خير مثال لذك : ( أذا حضر الماء بطل التيمم) . هنا العبارة الواردة بعد ادة الشرط أذا هي الشرط وهذا يعني انة اذا كان الشرط صحيح وهو ( توفر او وجود الماء) فان هذا يحقق الشرط وهو ( بطلان التيمم ) . اذن فوجود الماء هو شرط لبيان جواز او بطلان التيمم . لانة اذا كان الماء متوفر فان التيمم هنا باطل . وهناك العديد من الامثلة والاستخدامات التي سنوردها ان شاء الله اثناء الشرح لتركيبات الدالة IF . التركيبة العامة : هناك العديد من الصيغ التي تكون عليها الدالة IF نبدئها بالصيغة التالية : IF Condition Then Command End IF في هذة الصيغة يتم اختبار الشرط Condition فاذا كان صحيح يتم تنفيذ الامر او الاوامر Command الذي يلي الكلمة Then واذا كان غير صحيح (لم يحقق الشرط السابق) فان يتم تجاهل الاوامر . مثل بسيط: IF[Student_Age]<25 Then Print "لايوجد كراسي اضافية " End IF كلمه Student_Age تعني عمر الطالب المستجد في هذا المثال تقوم الدالة IF بفحص الشرط Student_Age فاذا كان عمر الطالب المتقدم اقل من ست سنوات فانها تنفذ الامر الذي يلي الكلمة Then وهو اظهار رسالة للمستخدم بان" عمر هذا الطالب اقل من العمر القانوني للالتحاق بالمدرسة " مثال محاسبي: IF[Student_Number]>6Then MsgBox"عمر الطالب المتقدم اصغر من السن القانوني للتسجيل المدرسي" End IF في هذا المثال تقوم الدالة IF بفحص Student_Number فاذا كان اكبرمن 25 فان التعليمات بعد الكلمة Then تحتم اظهار رسالة تنبيهة للمستخدم بان "لا توجد كراسي اضافية " . وكما تلاحظ في هذا المثال انة لا يوجد اوامر بعد الكلمة Then اذا يمكن كتابة حيث انة ليس من الضرور ان تكتب جميع الاوامر في سطر واحد بل مما ان تاخذ سطور وتنتهي بعبارة End IF حيث ان الدالة لا تكون كاملة وصحيح الا اذا حشرت بين العبارة IF والعبارة End IF . الصيغة الثانية : IF Condition Then Commands Else Commands End IF وفي هذة الصيغة يتم تقيم الشرط Condition فاذا كان صحيحا يتم تنفيذ الاوامر التي تلي الكلمة Then والا فانة يتم تنفيذ الاوامر التي تلي الكلمة Else . كلمة "Else" تعني هنا امر اخري , وكان الدالة IF تسالك في حالة عدم مطابقة الشرط الاولي ننفذ الاوامر الاخري . وكانها تعني " وألا" مثال بسيط : " اذا تمت رؤية هلال شوال فغدا هو اول ايام عيد الفطر المبارك وألا فهو تمام الثلاثون من رمضان " في هذا المثال السابق اذا تحقق الشرط وهو رؤية هلال شهر شوال فان غدا هو اول ايام عيد الفطر المبارك وأذا لم يتحقق الشرط من الرؤية فغدا هوتمام الثلاثون من شهر رمضان المبارك , مثال محاسبي: IF [W-Y]+[W-H]+[Test] <60 Then [w-y]+[w-h]+[Tese] Else IF [W-Y]+[W-H]+[Test]+[Reaction End IF حيث تعني (W-Y) درجة اعمال السنة الدراسية / (W-H) درجات الوجبات المنزلية / (Test) درجات الاختبارات / (Reaction) درجة تفاعل الطالب داخل الفصل . في المثال السابق تقوم الدالة IF بمقارنة مجموع درجات كل من اعمال السنة الدراسية زائد الوجبات المنزلية زائد درجات الاختبارات , فاذا كان المجموع اكبر من 60 درجة فانة يتم تحقيق الامر الذي يلي الكلمة Then وهو جمع الدرجات السابقة والا في حالة كون مجموع الدرجات اصغر من 60 درجة يتم اضافة علية درجة مشاركة الطالب الفصلية , الصيغة الثالثة : صيغة IF لاختبار اكثر من مقارنة . وهي وجود دالة IF اخري داخل الدالة الاولي وربما تتكرر اكثر من مرة وذلك لاعطاء المخرجات المناسبة بناء علي المدخلات المحددة لها , أي انة النتيجة تحتمل لا تحتمل امرين اما هذا او ذاك . بل ان لكل مقارنة نتيجة خاصة بة . مثال بسيط : لعل اقرب مثال هو مقارنة درجة الطالب النهائية واعطائه التقدير المناسب لتلك الدرجة . ( اذا كانت الدرجة من 100 حتي 81 ) فان التقدير هو " ممتاز " (اذا كانت الدرجة من 80 حتي 61 ) فان التقدير هو " جيد جدا " (اذا كانت الدرجة من 60 حتي 41 ) فان التقدير هو " جيد " (اذا كانت الدرجة من 40 حتي 21 ) فان التقدير هو " مقبول " (اذا كانت الدرجة من 20 حتي 0 ) فان التقدير هو " ضعيف " مثال محاسبي: سنضع المثال السابق داخل كود باستخدام اكثر من IF داخل IF واحدة . If [Extent] < 100 And [Extent] >= 81 Then Print "A" If [Extent] < 80 And [Extent] >= 61 Then Print "B" If [Extent] < 60 And [Extent] >= 41 Then Print "C" If [Extent] < 40 And [Extent] >= 21 Then Print "D" If [Extent] < 0 And [Extent] >= 0 Then Print "E" End If باعتبار ان كلمة (Extent) تعني الدرجة النهائية للطلااب . ملاحظات عامة : 1- نلاحظ من خلال الامثلة السابقة انة اما ان ينفذ الامر الذي يلي الكلمة Then او الامر الذي يلي الكلمة Else ولا يمكن تنفيذ الامران معا . ففي المثال الاخير فان الطالب لا بد ان يحصل علي تقدير واحد فقط ومن المستحيل ان يجمع تقديران او اكثر مرا واحدة . 2- في حالة عدم تحقيق شروط الدالة IF فان البرنامج ينفذ تلقائيا الاوامر التي تلي End IF و يتجاهل كل اوامر الدالة IF . حيث يمكن في المثال الاخير وضع شرط ينبة المستخدم الي ضرورة ادخال رقم مابين (0-100) وفي حالة تجاوز هذا الشرط فان الكود يظهر رسالة للمستخدم ويتوقف عن العمل دون ان يعطي تقدير معين بسبب عدم ادخال درجة محددة . 3- نجد كذلك في المثال الاخير ان كل IF وضعت في سطر مستقل , ودون استخدام End الدالة IF و بقية الدوال ( عمل الدوال كمجموعة واحدة ) . هناك بعض الدوال التي لا تبرز قوتها الحقيقية كدالة الا من خلال الاندماج مع الدالة IF ومن اكثر الدوال التصاق بدالة IF هما الدالة And وتعني " و" والدالة Or التي تعني " او" , وباذن الله تعالي سنتعرف علي مزيد من التفصيل حول تداخل الدوال والفلسفة القائمة علي اساس عمل دالة داخل اخري في درس مستقل . في المثال الاخير نجد اننا اعتمدنا علي الدالة And وذلك حتي نحصر الدرجة المدخلة بين درجتين محددتين , وكان الشرط الاول يقول اذا كانت الدرجة هي اقل من 100 واكبر من 81 فالتقدير هو ممتاز . هنا لابد من توفر الشرطين معا بالنسبة للدالة And اما في حالة توفر الشرطين دون الاخر تتوقف الدالة عن العمل اما الدالة Or فهي تعني اما ان يتوفر الشرط الاول او الشرط الثاني أي في حالة توفر الشرطين تتوقف الدالة عن العمل , وسوف نتطرق الي شي من التفصيل عن الدلتان في درس مستقل بيهما ونضع لهما امثلة ان شاء الله تعالي . ان الامثلة السابقة ليست الا جزء بسيط جدا عن استخدامات الدالة IF والمنتدي ولله الحمد فية العديد من الامثلة وقد لايخلو برنامج اكسيس او اكسيل من اشتراك هذا الدالة .
    1 point
×
×
  • اضف...

Important Information