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

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

  1. ياسر خليل أبو البراء

    ياسر خليل أبو البراء

    المشرفين السابقين


    • نقاط

      5

    • Posts

      13,165


  2. محمد حجازي

    محمد حجازي

    المشرفين السابقين


    • نقاط

      4

    • Posts

      771


  3. صالح حمادي

    صالح حمادي

    أوفيسنا


    • نقاط

      3

    • Posts

      1,745


  4. سليم حاصبيا

    سليم حاصبيا

    أوفيسنا


    • نقاط

      3

    • Posts

      8,723


Popular Content

Showing content with the highest reputation on 11 أغس, 2017 in all areas

  1. كي نفعل ذلك يجب ان نحتال على اكسل اليك هذه الحيلة: 1-قبل عملية النسخ قم باستبدال علامة"=" قي كل الورقة بأي شي اخر مثلاً "##^^" و ذلك من خلال الضغط على Ctrl+H والقيام يعملية الاستبدال Replace All بذلك تتعطل كل المعادلات في الورقة ( حيث لا يوجد "=" لتنفيذ المعادلة) 2-قم بنسخ الورقة الى المكان المطلوب 3- قم باستبدال "##^^" يعلامة "=" في الورقتين المصدر و الهدف
    3 points
  2. السلام عليكم أكتب العبارة المطلوبة في خانة القيمة الإفتراضية بإحدى الطريقتين في الصور التالية: 1- 2-
    2 points
  3. أخي ناصر رحم الله أخاك وأخونا رحمةً واسعة وأدخله الفردوس الأعلى من الجنة أما عن قرار اختتام اعمالكم فى هذا الصرح أعتقد أنه قرار غير صائب فسر على بركة الله لاستكمال مسيرة الفقيد فالعلم لايتوقف بمجرد فقدان حبيب
    1 point
  4. الموضوع منفصل عن الردود تماماً .. وإليك رابط الحلقة التي تحدثت فيها عن الحلقات التكرارية كما يوجد فيديوهات على اليوتيوب في قنوات مختلفة قتلت هذا الموضوع شرحاً
    1 point
  5. أخي الكريم كما أخبرتك يرجى أن يكون كل طلب في موضوع مستقل .. بالنسبة للاتصال المنتدى بإذن الله متواجد فيه حسب وقتي المتاح ولن أبخل على أحد بعلم أو بوقت إذا كنت أملك هذا أو ذاك وحاول تدرس الأكواد المقدمة لاستغلالها في أمور أخرى ... فقد يمكنك استغلال كود واحد لتنفيذ مهام متعددة .. وفقني الله وإياك الله لكل خير
    1 point
  6. بارك الله فيك استاذى الجليل سليم حل ما أروعه كنت أبحث عنه دائما زادك الله من علمه وجعله فى ميزان حسناتك
    1 point
  7. أخي الكريم .. إليك الكود التالي .. لا حاجة للاحتفاظ بالمعادلات في ورقة الهدف (النتائج) .. حيث وضعت لك دوال معرفة تقوم بنفس المهمة .. وتوفر عليك عناء كتابة وضبط المعادلات .. أدرج موديول جديد .. ثم ضع الكود التالي وجرب الكود وأخبرنا بالنتائج Option Explicit Sub TransferDataUsingArrays() Const startDate As Date = #10/1/2017# Dim ws As Worksheet Dim sh As Worksheet Dim arr As Variant Dim temp As Variant Dim birthDate As Date Dim i As Long Dim j As Long Dim p As Long Set ws = Sheets("بيانات الطلاب") Set sh = Sheets("سجل 41 مستجدين") arr = ws.Range("B17:T" & ws.Range("C" & Rows.Count).End(xlUp).Row).Value ReDim temp(1 To UBound(arr, 1), 1 To 18) For i = 1 To UBound(arr, 1) If arr(i, 5) = "مستجد" Or arr(i, 5) = "مستجدة" Then p = p + 1 For j = 1 To 18 temp(p, j) = arr(i, Choose(j, 1, 2, 7, 8, 9, 10, 7, 8, 9, 13, 4, 14, 15, 16, 2, 11, 12, 17)) Next j temp(p, 1) = p On Error Resume Next birthDate = CDate(temp(p, 3) & "/" & temp(p, 4) & "/" & temp(p, 5)) temp(p, 7) = CalculateAge(birthDate, startDate, "d") temp(p, 8) = CalculateAge(birthDate, startDate, "m") temp(p, 9) = CalculateAge(birthDate, startDate, "y") On Error GoTo 0 temp(p, 15) = KhFatherName(CStr(temp(p, 2))) End If Next i If p > 0 Then With sh.Range("B8") .Resize(1000, UBound(temp, 2)).ClearContents .Resize(p, UBound(temp, 2)).Value = temp End With End If End Sub Function KhFatherName(ByVal Name As String) As String Dim khString As String Dim searchChar As String Dim khMid As String Dim khRep As String Dim khMyNo As Integer On Error GoTo Err_KhFatherName If IsEmpty(Name) Then GoTo Err_KhFatherName khString = KhFatherReplace(Trim(Name)) & " " searchChar = " " khMyNo = InStr(1, khString, searchChar, 1) khMid = Trim(Mid(khString, khMyNo, Len(khString))) khRep = Replace(khMid, "_", " ") KhFatherName = khRep Exit Function Err_KhFatherName: KhFatherName = "" End Function Private Function KhFatherReplace(ByVal Kh_Sub As String) As String Dim myArray As Variant Dim ar As Variant Dim sn As String Dim re As String myArray = Array("عبد ", "أبو ", "ابو ", "آل ", " الله", " الدين", " الإسلام", " الاسلام", " الحق", " النصر", " العهد", " النور", " بالله", " الزهراء") sn = Kh_Sub For Each ar In myArray re = Replace(ar, " ", "_") sn = Replace(sn, ar, re) Next ar KhFatherReplace = sn End Function Function CalculateAge(birth As Variant, start As Variant, str As String) Dim y As Long Dim m As Long Dim d As Long If Not IsDate(birth) Or Not IsDate(start) Then GoTo Skipper m = DateDiff("m", birth, start) d = DateDiff("d", DateAdd("m", m, birth), start) If d < 0 Then m = m - 1 d = DateDiff("d", DateAdd("m", m, birth), start) End If y = m \ 12 m = m Mod 12 Select Case str Case "d" CalculateAge = d Case "m" CalculateAge = m Case "y" CalculateAge = y End Select Exit Function Skipper: CalculateAge = "" End Function
    1 point
  8. اخي الكريم يمكنك تطبيق ماتفضلت به في حدث عند التحميل او حدث عند الفتح للنموذج الافتتاحي لبرنامجك طبعاً الكود يقوم باخفاء الاستعلامات فقط وهو مايمكنك عمله بشكل يدوي من خلال ضغط كلك يمين بالماوس على اي استعلام واختيار اخفاء والكود الذي تفضلت به يخفي فقط تلك الاستعلامات الظاهرة في الاكسس الموجودة في خانة الاستعلامات تحياتي
    1 point
  9. السلام عليكم: أولا: يجب عليك إختيار عنوان مناسب للموضوع كما تنص قوانين المنتدى: 1- يمنع منعا باتا نشر أية مواد تخالف حقوق الملكية الفكرية و يرجى الابلاغ عن المشاركات المخالفة من خلال زر تقرير اسفل المشاركة 2-يجب استخدام خاصيةالبحث قبل طرح السؤال توفيرا للوقت و الجهد. 3-ضرورة كتابة عنوان واضح للموضوع يدل على محتواه ويعطي وصفاً مختصرا للسؤال. 4-ممنوع منعا باتاً كتابة عناوين سينمائية مثل عاجل ، نداء الي فلان ، الي الخبراء ، طلب مساعدة ، أريد حلا..... 5-يمكن استعجال الرد باستخدام تعبير -للرفع- و غير مسموح بالالحاح او اللوم فجميع الاعضاء يشاركون تطوعا طبقا لسعة وقتهم. ومخالفة ذلك تعرض الموضوع للحذف لذلك فقد قمت بتغيير عنوان الموضوع. ثانيا: بالنسبة لسؤالك يمكنك حساب الوقت بهذا الكود: Me.time_rottar = DateDiff("n", Me.time_entre, Time()) بحيث: time_rottar هو مربع النص الذي ستظهر به النتيجة time_entre هو مربع النص الذي يحتوي على توقيت الدوام. "n" من أجل حساب الفارق بالدقائق و يمكن تغييرها من بـــ "h" من أجل حساب الفارق بالساعات
    1 point
  10. أخي الكريم قصي شاهد الفيديو التالي عله يفيدك
    1 point
  11. هذا الكود له رجل محترم بذل جهدا في وجوده لنا فيحق علينا ان نضع اسمه اعلا الكود وتاريخ الانشاء ومعه ملف بسيط .. ليوضح الكود اكثر كما يفعل الاخ ناصر
    1 point
  12. اجابه من احسن الاجابات .. لو تمت بالفيديو سيكون شرحا وافيا ومرجعا للجميع
    1 point
  13. لا مجال هنا لوضع شرط حيث أن الكود يقوم بنقل البيانات في الأعمدة دفعة واحدة دون الحلقات التكرارية ..
    1 point
  14. اهلا اخ عمرو دائما لابد ان نعرف ان كل منتج صمم لاهداف محددة ومعروف من هم عملائه الاندرويد صمم لاهداف ومنها ان يعمل على اجهزة الهاتف وهنا صمم البرنامج لاهداف والجهاز نفسه لاهداف والاكسس كذلك لاهداف فالاكسس قادة بيانات بمعنى معالجة اليانات مطلب ومشاركة البيانات مطلب وغيرها من التقارير وغيره السؤال الذي المفروض ان يظهر الان : لماذا الاكسس مش مضمن يعمل على اجهزة الهاتف التي تعمل بنظام تشغيل ميكروسوفت نفسها ؟ اذا ميكروسوفت لم تعمل هذا تريد قوقل تعمله ؟؟؟؟؟؟؟؟؟؟؟؟ هذه من ناحية فنية من ناحية ادارية : لو فكرنا وحللنا سنجد انه ليس من المنطق ان يعمل قاعدة بيانات مخازن على جوال ؟ على سبيل المثال واحد التحليلات هل امين المخزن اللي جالس على جواله عم يصرف ويضيف مواد مش وراه محاسبين ؟ ملاك ؟ اداريين ؟ بالتوفيق
    1 point
  15. جزاك الله خيرا استاذ محمد.....نفع الله بك في كل خير
    1 point
  16. أخى الكريم 'ويمكن تنفيذ الكود على كافة الأعمدة فى الثلاث مجموعات باستخدام If TC = 2 Or TC = 3 Or TC = 4 Or TC = 8 Or TC = 9 Or TC = 10 Or TC = 13 Or TC = 14 Or TC = 15 'بدلا من If TC = 2 Or TC = 8 Or TC = 13 يعنى تحديد نطاق الجدول بالكامل فى كل مجموعة بدلا من تحديد عمود واحد فقط ليمنع التكرار فى أى خلية من خلايا الثلاث مجموعات
    1 point
  17. اولا فتح نموذج الفرعي في وضع تصميم وفتح محرر فيجوال وغير Private ب كلمة Public للزر اللي تريد ان تناديه في نموذج الرئيسي مثال ستغير هذا Private Sub button2_Click() بهذا Public Sub button2_Click() وفي نموذج الرئيسي ستناديه هكذا Call Form_formsub.button2_Click اليك المرفقك بعد تعديل تشغیل زر نموذج فرعي بواسطة نموذج الرئيسي.rar
    1 point
  18. جهود مباركة وخدمات رائعة لكنها تحتاج نت جيد بكل أسف ذلك غير متوفر عموما لك ولكل أعضاء المنتدى والسادة الأفاضل القائمين على هذا الصرح المتميز كل الشكر والتقدير ....
    1 point
  19. هذا هو الكود الذي هداني به المحترم الاستاذ بن عليه حفظه الله ورعاه وهو خاص بنسخ صفوف اسفل الصفوف المنسوخه 'هذا الكود للمحترم ياسر العربي ' الهدف من الكود هو نسخ صف الى صفوف تحته بالعدد المطلوب 'بدون مسح البيانات القديمه 'تاريخ الانشاء 30/7/2017 'تم التعديل بواسطه المحترم الخلوق بن عليه حاجي '=*=*=*=*=*=*=*=*=*=*=*=*=*=* Private Sub CommandButton1_Click() Dim sh As Worksheet, lr As Long, str As String If TextBox1.Text = Sheets("بيانات الطلبة").Range("F1") Then Me.Hide TextBox1.Text = "" MsgBox "كلمة المرور صحيحة و سيتم تنفيذ المطلوب" Application.ScreenUpdating = False Application.Calculation = xlCalculationManual 'اذا كان عدد المتقدمين اقل من اتنين يتم ايقاف الكود ولا يكمل If Sheets("بيانات الطلبة").Range("Q1") < 2 Then Exit Sub End If '=*=*=*=*=*=* For Each sh In Sheets(Array("بيانات الطلبة", "إنجاز1", "تحريرى ف 1", "تحريرى ف 2", "أعمال السنة", "كشف ناجح", "الحاله", "كنترول شيت", "رصد الترم الثانى", "كنترول شيت (2)", "رصد الترم الأول", "كشف الدور الثاني")) '--------------------------------------------------------------------------------------- 'lr = sh.Range("B" & sh.Range("b10000").End(xlUp).Row).Row lr = sh.Range("A" & sh.Range("A10000").End(xlUp).Row).Row '--------------------------------------------------------------------------------------- sh.Activate '======================== ' str المتغير دا يتم تخزين اسم العمود الاخير فيه للعمل عليه 'يتم الذهاب الى اخر عمود بالاعتماد على الصف السادس ويتم استخلاص اسم العمود من اسم النطاق str = Split(sh.Range("HH9").End(xlToLeft).Address, "$")(1) ' نسخ الصف السابع لكل شيت من حيث عدد الاعمدة الى العدد المحدد بعدد المتقدمين '--------------------------------------------------------------------------------------- Set Rng = Range("A" & lr + IIf(lr = 9, 0, 1) & ":" & str & ['بيانات الطلبة'!Q1] + lr - IIf(lr = 9, 1, 0)) sh.Range("A9:" & str & 9).Copy Destination:=Rng '--------------------------------------------------------------------------------------- Next Sheets("بيانات الطلبة").Select Range("A4").Select Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Unload Me Else MsgBox "عفوا كلمة المرور خاطئة و لن يتم تنفيذ المطلوب" TextBox1.Text = "" TextBox1.SetFocus End If End Sub Private Sub UserForm_Click() End Sub '===================================
    1 point
  20. اهلا بك يا ابن بلادي اتفضل استخدمت هذا الكود Private Sub Text1_AfterUpdate() Dim sql As String sql = "UPDATE Table1 SET Table1.Active ='نعم' WHERE (((Table1.[كود الموظف])=[Forms]![Form1]![Text1]));" If DCount("*", "table1", "[كود الموظف]=" & Me.Text1) > 0 Then DoCmd.OpenForm "form2", acNormal Forms!form2!Text0 = DLookup("[اسم الموظف]", "table1", "[كود الموظف]=" & Me.Text1) Forms!form2!Text2 = Me.Text1 DoCmd.SetWarnings False DoCmd.RunSQL (sql) DoCmd.SetWarnings True Forms!form2!Text3 = DLookup("[Active]", "table1", "[كود الموظف]=" & Me.Text1) Else MsgBox "ليس لدينا ھذا الكود في الجدول" Me.Text1 = "" End If End Sub واليك مرفقك بعد تعديل sample.rar
    1 point
  21. نعم هذا الرابط لتفعيل/إلغاء الشفت من برنامج خارجي وهذا الرابط لتفعيل/إلغاء الشفت من داخل البرنامج ، ويحتاج البرنامج الى اعادة تشغيل جعفر
    1 point
  22. السلام عليكم ورحمة الله وهذا العمل نفسه لكن بالمعادلات... بن علية حاجي Transpose_Notes.rar
    1 point
  23. اجعل كل المستند من اليمين الى اليسار من خيارات Word والسلام
    1 point
  24. هل يمكن تحديد ما بين قوسين، حيث طُلب مني تغيير حجم توثيقات في ملف حوالي 300 صفحة، فالطريقة اليدوية مرهقة، فهل يوجد طريقة لتحديدهم جميعاً. مثلاً (محمد، كامل، 2012) من خط 14 إلى خط 12 ولكم الشكر
    1 point
  25. الاخ ابو العلاء لك جزيل الشكر تابع الفيديو التالى مسابقة عامة سؤال وجواب الدرس41 https://up.top4top.net/downloadf-1109a2gb91-rar.html مسابقة سؤال وجواب.rar
    1 point
  26. فورم تحريك كلمات داخل الفورم الدرس الحادى عشر حمل الملف كلام متحرك.rar
    1 point
  27. فورم بحث وتعديل واضافة بيانات الدرس التاسع ListBox حمل من هنا اليحث فى الاقساط.rar
    1 point
  28. السلام عليكم كيفكم يا اخواني في هذا المندى الرائع عندي برنامج بسيط لمتابعة المخزون لمستودع مواد غذائية قمت بتصميمه بنفسي وساقوم برفعه عند الانتهاء منه ولكن هناك عقبة امامي اني اريد عند اضافة فاتورة مشتريات او مورد ان اكتب تاريخ صلاحية الصنف بنفسي ولكن عن اخراج كميات مباعة اريد ان يظهر تواريخ الصلاحية تلقائيا حسب الصنف المختار مع مراعاة انه يمكن ان يكون للمنج الواحد اكثر من تاريخ صلاحية ارجو المساعدة من الاعضاء او من المشرفين على هذا المنتدى الرائع اخوكم ابو حمزة
    1 point
  29. السّلام عليكم و رحمة الله و بركاته أخي الفاضل و أستاذي العزيز " حراثي تواتي " و بعد إذن الأخ الغالي الذي أتشرّف بمعرفته " الجموعي " لاحظ أخي " حرّاثي تواتي " و انتبه لهذا المر جيّدًا و ضعها قاعدة أمام عينيك ما دمتَ تريد تعلم الفورم بحول الله .. لا تنسَ هذا الدّرس أبدًا لأنّه أساس بداية التعلّم : لا يمكن .. أعيد مرة أخرى .. لا يمكن أبدًا .. كتابة حدث الإينيسياليز أو حدث الأكتيVات أو أي حدث آخر أكثر من مرّة على الفورم .. باليوزرفورم هذا الذي أرسلته موجود حدث ال INITIALIZE مسبقا .. و لذلك عندما وضع الأخ الفاضل " الجموعي " الكوديْن و هما أيضًا بحدث الاينيسياليز .. إذن .. فقط أدخل الكودين داخل هذا ال INITIALIZE .. بدون إعادة كتابة الحدث أكثر من مرة مثلما ذكرت لك فائق إحتراماتي
    1 point
  30. اخوانى كثيرا منا يرث ملفات منقولة من اخرين بها اسطر فارغة قد لا يريدها هو اختار استبدال replace اكتب فى خانة البحث عن ^P^P فى خانة استبدال ب ^P على فكرة ^ للوصول لها اضغط shift+6 راعى الترتيب ^ قبل p دمتم بخير سعد عابد
    1 point
  31. اخي الكريم / يوسف السيد وبعد اذن اخي الحبيب ا/ حمادة عمر بارك الله فيه علي حلوله الرائعة وافكاره الجميلة ولاثراء الموضوع يمكنك اخي / يوسف اجبار المستخدم علي الادخال بصيغة تاريخ فقط ولا يقبل غيرها باحد الطريقتين الطريقة الاولي برسالة للمستخدم ان يقوم ادخال تاريخ Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox1 = "" Then Exit Sub If Not IsDate(TextBox1) Then MsgBox "Non valid date" Cancel = True End If End Sub الثانية بدون رسالة تقوم بتفريغ التكست بوكس Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox2 = "" Then Exit Sub If Not IsDate(TextBox2) Then Cancel = True: TextBox2 = "" End If End Sub مع تحياتي التطبيق بالمرفقات date only .rar
    1 point
  32. السلام عليكم أخي زياد أنا علي سبيل المثال عندي مجموعة أكواد صغيرة وأعتقد أن كثير من الإخوة اعضاء المنتدي لهم أكواد صغيرة خاصة بهم تم تفصيلها لتناسب حاجاتهم وطبيعة عملهم قد يكون الكود غاية في الصغر ولكنه مفيد وعلي هذا المنوال أخصص لكل من هذه الأكواد shortcut key فهذا ctrl-k وذاك ctrl-j طبعا غير الكابيتال ctrl-K; ctrl-J أضعها كلها في ملف Personal يتم فتحه أوتوماتيكيا مع الإكسل المهم أود المساهمة بكود يمكن إستخدامه كثيرا لمن يستعمل اللغة الإنجليزية يحول حالة الأحرف داخل المجال الذي تم إختياره إلي حالة عنوان (أي كابيتال لأول حرف من كل كلمة) المعروف أن الدالة Proper في الإكسل تقوم بنفس الوظيفة ولكن إذا كانت البيانات المطلوب تحويلها في أماكن غير منظمة فهذا الكود يكون أسرع واكثر إستخداما فإذا خصصت له مثلا ctrl-j ثم تظلل المجال وتضغط ctrl-j عذرا للإطالة وهذا هو الكود Sub Adj_Proper() For Each se In Selection se.Value = WorksheetFunction.Proper(se) Next End Sub
    1 point
  33. 5. جعل الجملة With خارج الحلقات التكرارية : تحدثنا في المشاركة الثالثة عن كيفية استخدام الجملة With من اجل تقليل الحاجة لاستدعاء الأهداف المختلفة ، ولكن يجب على كل من يريد استخدام هذه الجملة الانتباه لوضعا خارج الحلقات التكرارية (وذلك من أجل زيادة كفاءة هذه الجملة أكثر و أكثر) ، لاحظ الأكواد التالية : Sub MyFunction1() Dim X As Byte For X = 1 To 10 Sheets("Sheet1").Cells(X + 1, 2).Value = 2 * X + 6 Sheets("Sheet1").Cells(X + 1, 3).Value = X ^ 2 - X + 7 Sheets("Sheet1").Cells(X + 1, 4).Value = 23 * X - 20 Sheets("Sheet1").Cells(X + 1, 5).Value = X ^ 3 + 55 * X ^ 2 + 6 Sheets("Sheet1").Cells(X + 1, 6).Value = 2 * X Next X End Sub Sub MyFunction2() Dim X As Byte For X = 1 To 10 With Sheets("Sheet1") .Cells(X + 1, 2).Value = 2 * X + 6 .Cells(X + 1, 3).Value = X ^ 2 - X + 7 .Cells(X + 1, 4).Value = 23 * X - 20 .Cells(X + 1, 5).Value = X ^ 3 + 55 * X ^ 2 + 6 .Cells(X + 1, 6).Value = 2 * X End With Next X End Sub Sub MyFunction3() Dim X As Byte With Sheets("Sheet1") For X = 1 To 10 .Cells(X + 1, 2).Value = 2 * X + 6 .Cells(X + 1, 3).Value = X ^ 2 - X + 7 .Cells(X + 1, 4).Value = 23 * X - 20 .Cells(X + 1, 5).Value = X ^ 3 + 55 * X ^ 2 + 6 .Cells(X + 1, 6).Value = 2 * X Next X End With End Sub الأكواد الثلاثة السابقة تقوم بنفس العمل (حساب قيمة المتغير التابع y لعدد من المعادلات عند قيم محددة للمتغير المستقل X "من 1 إلى 10"). نلاحظ أنه تم استدعاء الهدف : Sheets("Sheet1") 50 مرة في الكود الأول ، و 10 مرات في الكود الثاني ، ومرة واحدة في الكود الثالث . عملية الاستدعاء للهدف السابق تؤثر حتماً على سرعة الكود (الكود الثالث هو الأسرع يليه الثاني ثم الأول) ، لاحظ كيف أن عملية استدعاء الهدف السابق قد تقلصت بعد وضع الجملة With خارج الحلقة التكرارية For ... Next . (y) لا تقلق أخي إذا لم تشعر بتغير سرعة الكود وذلك لأن الفرق أقل من أي يدرك بسهولة ...... ولكن مهلاً أخي ، ستشعر بالفرق في حالة وجود عمليات كثيرة تجرى على بيانات كبيرة. هل انتهى الحديث ؟!!!!!! لا أعتقد ذلك : أثناء كتابتي للدرس تذكرت أحد الاستعمالات الغامضة للجملة With : إذا قررت (بعد أن ابيض شعرك) القيام بحفظ جدول الضرب و التخلص من هذه العقدة التي عانيت منها كثيراً :) . أول الخطوات ستكون إحضار الجدول ( ولكن من أين؟ :o ) . حسناً لديك عدة خيارات : استعارة دفتر ولدك الصغير ، طلب الجدول من المكتبة (من أجل ولدك طبعاً :d ) ، القيام بتصميم الجدول عن طريق الاكسل : أول ما سيخطر على بالك هو الكود التالي : Sub MultiplicationTable1() Dim i As Byte, ii As Byte For i = 1 To 10 For ii = 1 To 10 Sheets("Sheet2").Cells(i, ii) = i * ii Next ii Next i End Sub ولكن ، و بما أن وقتك غالي عليك و تريد استثمار كل ثانية منه لحفظ جدول الضرب ، فإنك ستفضل حتماً التعديل التالي في الكود السابق : Sub MultiplicationTable2() Dim i As Byte, ii As Byte With Sheets("Sheet2") For i = 1 To 10 For ii = 1 To 10 .Cells(i, ii) = i * ii Next ii Next i End With End Sub لاحظ أخي أن الهدف : Sheets("Sheet2") تم استدعائه 100 مرة في الكود الأول و مرة واحدة فقط في الكود الثاني. (y) مرفق ملف يتضمن الأكواد الموجودة في هذه المشاركة : بالتوفيق WithAndLoops.zip
    1 point
  34. 3. استخدام الجملة With : قد نحتاج أحياناً إلى استخدام العديد من الخصائص و الأساليب التابعة لهدف معين في نفس الوقت ، وهنا فإنه يمكننا استخدام الجملة With من أجل التقليل بقدر الإمكان من الحاجة إلى الاستخدام المتكرر للأهداف المرجعية ، وبالتالي فإن هذه الجملة تتيح لنا تخفيض حجم الكود بالإضافة إلى المرونة التي توفرها في قراءة و فهم ومتابعة الكود . هناك ميزة أخرى توفرها لنا الجملة With ألا وهي السهولة في تعديل الكود ، حيث أننا لن نحتاج لتعديل الهدف مع كل خاصية أو أسلوب مرتبط به وإنما سيكون التعديل مرة واحدة من خلال الجملة With. في الكود التالي سنقوم بإظهار كل من أشرطة الأدوات : القياسي و التنسيق و النموذج: Sub ToolsList1() Application.CommandBars("Standard").Visible = True Application.CommandBars("Formatting").Visible = True Application.CommandBars("Forms").Visible = True End Sub يمكننا تعديل الكود السابق لتتم الإشارة إلى الهدف Application مرة واحدة فقط : Sub ToolsList2() With Application .CommandBars("Standard").Visible = True .CommandBars("Formatting").Visible = True .CommandBars("Forms").Visible = True End With End Sub كما يمكنك أيضاً الاستعانة بمجموعة من جمل With المتداخلة :o ، لاحظ الكود التالي : Sub FormatCells() With Sheets("Sheet1").Range("A1:D5") With .Font .ColorIndex = 3 .Bold = True .Size = 12 End With With .Borders() .LineStyle = xlDot .Weight = xlMedium End With End With End Sub وبهذا فإننا نلاحظ أن الدليل المرجعي المستخدم في الحلقة With الأولى (المجال A1:D5 الموجود في الورقة Sheet1) يمكن أن يكون دليلاً مرجعياً لمجموعات أخرى ( Borders، Font) و التي بدورها ستكون دليلاً مرجعياً لأساليب و خصائص مختلفة (ColorIndex ، LineStyle ، ... ، الخ) بالتوفيق
    1 point
  35. 2.استخدام متغيرات الهدف: قد نحتاج في كثير من الأحيان للإشارة إلى هدف معين عدد من المرات (قد تزيد على المئة مرة :d ) ، وفي هذه الحالة ولتقليص حجم الكود وسهولة قراءته و متابعته فإننا نقوم بتخصيص متغير ليحل محل الهدف الذي نتعامل معه ، حيث أنه يمكننا استبدال التعامل ليكون مع المتغير مباشرةً . انظر للكود التالي: Sub Report() MsgBox "المجموع " & Application.WorksheetFunction.Sum(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) MsgBox "المعدل " & Application.WorksheetFunction.Average(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) MsgBox "الحدالأعلى " & Application.WorksheetFunction.Max(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) MsgBox "الحد الأدنى " & Application.WorksheetFunction.Min(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) MsgBox "عدد الأرقام " & Application.WorksheetFunction.Count(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) End Sub لاحظ كيف أننا أشرنا إلى الهدف التالي خمس مرات خلال الكود السابق: Sheets(1).Range("A1:D5,E10,F5,G1:G4") لنقوم الآن باستخدام متغير معين (المتغير MyRange مثلاً) للدلالة على الهدف السابق: Sub Report1() Dim MyRange As Range Set MyRange = Sheets(1).Range("A1:D5,E10,F5,G1:G4") MsgBox "المجموع " & Application.WorksheetFunction.Sum(MyRange) MsgBox "المعدل " & Application.WorksheetFunction.Average(MyRange) MsgBox "الحدالأعلى " & Application.WorksheetFunction.Max(MyRange) MsgBox "الحد الأدنى " & Application.WorksheetFunction.Min(MyRange) MsgBox "عدد الأرقام " & Application.WorksheetFunction.Count(MyRange) End Sub لاحظ أننا لم نحتاج لكتابة الهدف سوى مرة واحدة خلال الكود (y) تستطيع الآن أن تقدر (من خلال تقيمك للكودين السابقين) مدى التخفيض الذي نستطيع أن نحققه في حجم الأكواد باستخدام الطريقة السابقة.
    1 point
  36. السلام عليكم ... ملف اكسل يصلح للمحال الصغيرة ، حيث من الممكن تخصيص ورقة لكل زبون SimpleAccount.zip
    1 point
  37. شكرا للأخ أبو أحمد علي المثال الجميل :)
    1 point
×
×
  • اضف...

Important Information