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

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

  1. ابو جودي

    ابو جودي

    أوفيسنا


    • نقاط

      10

    • Posts

      6,818


  2. د.كاف يار

    د.كاف يار

    الخبراء


    • نقاط

      4

    • Posts

      1,681


  3. kha9009lid

    kha9009lid

    الخبراء


    • نقاط

      4

    • Posts

      1,347


  4. Ali Mohamed Ali

    Ali Mohamed Ali

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


    • نقاط

      4

    • Posts

      11,630


Popular Content

Showing content with the highest reputation on 16 سبت, 2019 in all areas

  1. تفضل اخي الكريم هذه فكرة مبدئية بناء على جدول الاكسل في ما بعد تستطيع انشاء شهادات لحضور الدورات و امور كثير بإستطاعتك تنفيذها اسم المستخدم : Admin كلمة المرور : 123 ** مع العلم لقد تركت المصدر مفتوح لكي تستيطع التعديل عليها و طلب المساعدة تدريب.mdb
    3 points
  2. اتفضل يا سيدى إرجاع تاريخ.accdb
    3 points
  3. شكرا لك أخي وكل من سعداني
    2 points
  4. عليكم السلام تأكد من نوع الحقول وحجمها في الجداول .. لابد ان تكون متشابهة في مثالك تريد الحاق حقل رقمي الى حقل عملة ..
    2 points
  5. استاذ نبيل ==== كود جيد والى الامام لكن ارجو تقبل هذه الملاحظات: 1-لا حاجة لعمل تنسيق على كامل خلايا الورقة (Cells.Select) طالما انه يهمك فقط نطاق معين منها 2-لا حاجة للــ SELECT (هذا الأمر التي يستعمله اكثر الناس مع انه لا لزوم له الا في بعض الحالات) لانه يهدر وقت الاكسل(و لو لجزء من مليون من الثّانية الذي تعتبره الذاكرة شيئاً مهماً) 3- تغيير التحديد الى A1 ايضا لا لزوم له الكود كما يجب ان يكون Sub Hidezerovalue() Range("B3:J6").NumberFormat = "0; -0;;@" End Sub '============================= Sub showzerovalue() Range("B3:J6").NumberFormat = "General" End Sub
    2 points
  6. فورم اضافة وتعديل وحذف وحفظ الملف الفيديو
    1 point
  7. تمام اخى العزيز سأوافيك غدا إن شاء الله بالنتيجة اعتقد أن قارئ الباركود هو : Metrologic MS9540 Voyager : إن كنت لازلت أتذكر
    1 point
  8. الأخ الفاضل mhmadfarooq هو بس حضرتك رابط doc فى جدول patient بـ doc_name فى جدول Doctors ولم تضع إسم الطبيب فى جدول patient ولذلك لم تظهر بيانات فى نموذج 1 أرجو أن أكون أوضحت
    1 point
  9. أخى العزيز فضلا ليس أمراً .. أريد صورة الباركود الذى لا تتم قرائته بصورة صحيحة وليس قارئ الباركود .. مثل هذه الصورة
    1 point
  10. انظر الى هذا الاستعلام وأستاذى العزيز واخى الحبيب الاستاذ @kha9009lid اكتشفت شئ بمرفق اخونا الحبيب الاستاذ @مرحبا البي ماذا ان كان التاريخ >>----> 16/12/2019 لقد قمت بعمل الكود الاتى لحل هذه المشكلة Function RD(MyDate As Date) Select Case Nz(Month(MyDate), "") Case Is <= 11 Select Case Nz(Day(MyDate), "") Case Is <= 15 RD = Format("01" & "/" & Format(MyDate, "mm/yyyy"), "dd/mm/yyyy") Case Is > 15 RD = Format("01" & "/" & Format(MyDate, "mm") + 1 & Format(MyDate, "/yyyy"), "dd/mm/yyyy") End Select Case Is = 12 Select Case Nz(Day(MyDate), "") Case Is <= 15 RD = Format("01" & "/" & Format(MyDate, "mm/yyyy"), "dd/mm/yyyy") Case Is > 15 RD = Format("01/01/" & Format(MyDate, "yyyy") + 1, "dd/mm/yyyy") End Select End Select End Function ---------------------- test5.accdb
    1 point
  11. جائز حقل العملة يقبل بيانات الحقل الرقمي ( لان العملة ارقام ) في الاصدارات السابقة العملة احدى وحدات الحقل الرقمي . ولكن الصحيح ان يكون الجدول الثاني طبق الاصل من الأول
    1 point
  12. في جدول 2 تم اضافة حقل ترقيم تلقائي وعمل استعلام الحاق في النموذج جرب المرفق اذا كان هذا المطلوب Prog1.mdb
    1 point
  13. السلام عليكم يمكنك استخدام هذه المعادلة لحساب السنوات =DATEDIF(B18,C18,"y") أما الشهور فهذه المعادلة =DATEDIF(B18,C18,"ym") وأخيرا لحساب فرق الأيام يمكنك استخدام هذه المعادلة =DATEDIF(B18,C18,"md")
    1 point
  14. فورم ادراج بيانات وصور الفيديو الصورة الكود Dim fpath As String Private Sub CommandButton1_Click() Dim x As Integer Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False x = Application.FileDialog(msoFileDialogOpen).Show If x <> 0 Then fpath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1) Image1.Picture = LoadPicture(fpath) Image1.PictureSizeMode = 1 End If End Sub Private Sub CommandButton2_Click() Dim x As Integer Dim y As Worksheet Set y = Sheets("sheet1") x = y.Range("a" & Rows.Count).End(xlUp).Row With y .Cells(x + 1, "a").Value = Te1.Text .Cells(x + 1, "b").Value = Te2.Text .Cells(x + 1, "c").Value = Te3.Text End With Dim i As String i = Te1.Text FileCopy fpath, "D:\picture\" & i & ".jpg" Me.Te1.Text = "" Te1.Text = "" Te2.Text = "" Te3.Text = "" End Sub Private Sub UserForm_Click() End Sub
    1 point
  15. تفضل أخي ملفك السابق تم اضافة دوال للحساب التلقائي لمايلي الأجر القاعدي حسب الصنف الخبرة حسب الدرجة الأجر الأساسي المنحة الجزافية الضريبة irg افتح النموذج و بمجرد ادخال الصنف و الدرجة و الضغط على زر حساب يتم حساب ما ذكر أعلاه و تجد النتائج مخزنة في قاعدة البيانات يمكنك إنشاء برنامج أجور كامل و متكامل في الاكسس اعتماداً على المثال أعلاه و ببعض الجهد و العمل المتواصل الضريبة.accdb
    1 point
  16. جرب هذا الماكرو Option Explicit Private Fltr_range As Range, I_range As Range Private EHsaa As Worksheet, Tasj As Worksheet Private lr_EHsaa%, lr_Tasj, m% '=============================== Sub my_filter() Set EHsaa = Sheets("احصاء الغيابات") Set Tasj = Sheets("تسجيل الغيابات") lr_EHsaa = EHsaa.Cells(Rows.Count, 2).End(3).Row lr_Tasj = Tasj.Cells(Rows.Count, 2).End(3).Row Set Fltr_range = Tasj.Range("B6:E" & lr_Tasj) Set I_range = EHsaa.Range("T1:T6") lr_EHsaa = IIf(lr_EHsaa = 3, 4, lr_EHsaa + 1) Dim i% For i = 1 To I_range.Rows.Count Call Filter_FOR_Me(Fltr_range, 3, EHsaa.Range("T" & i)) Next EHsaa.Range("b3").Select Application.CutCopyMode = False Fltr_range.AutoFilter End Sub '============================================= Sub Filter_FOR_Me(rg As Range, n, St) rg.AutoFilter , field:=n, Criteria1:=St rg.Offset(1).Resize(rg.Rows.Count - 1).Copy EHsaa.Range("B" & lr_EHsaa).PasteSpecial xlValues m = EHsaa.Cells(Rows.Count, 2).End(3).Row + 1 lr_EHsaa = m + 1 End Sub الملف مرفق Abscence.xlsm
    1 point
  17. العفو منكم استاذى الجليل انا اقل طالب علم ودائما انهل مما تقدمونه شكر الله لكم واحسن الله اليكم كما تحسنون الى طلاب العلم امثالى جزاكم الله تعالى انت وكل اساتذتى العظماء كل الخير اما بخصوص القاعدة التى تحدثتم عنها فانا بانتظارها وكلى لوعة ولهفة واشتياق
    1 point
  18. بل من الممكن ان نقول انها الشقيقة لكل من IIf . Choose وهي توأم IIF ولكن iif ترجع اختيار واحد من اختيارين واذا اردنا اكثر من اختيار نعيد كتابتها مرة اخرى في خانة عدم تحقق الشرط لنحصل على اختيارين اضافية وهكذا وبالتالي استخدام Switch افضل واسهل بخصوص مثال اخر ابشر اخي العزيز انا حاليا اعمل على مثال يحتوي على 35 دالة وطريقة استخدامها في الاكواد وفي منشئ التعبير وبشروط مختلفة لعلي انتهي منه قريبا الملف موجه للمبتدئين وليس للاخبراء امثالكم استاذي واخي الحبيب لن نستطيع ان نجاريك يا ابا جودي بل انت المعلم ومروض اكسس
    1 point
  19. نعم أخي حساب ضريبة irg في نطام الجزائري
    1 point
  20. كل الشـــكر والتقدير أستاذى الجليل واخى الحبيب الاستاذ @kha9009lid يعنى ممكن نسهل الموضوع شوية ونقول انها تشبه دالة Replace ولكن الجميل انها تكتب مرة واحدة فقط طيب وممكن نعمل لها كود داخل موديول حتى نستطيع استخدامها فى كل زوايا البرنامج زى المثال البسيط ده Function RD(MyDate As String) Dim SmallerThan As String Dim GreaterThan As String Dim MyDay As Integer MyDay = Day(MyDate) 'extract the day from a specific date 'treatment of date to be returned on the day it was extracted SmallerThan = "01" & "/" & Format(MyDate, "mm/yyyy") GreaterThan = "01" & "/" & Format(MyDate, "mm") + 1 & Format(MyDate, "/yyyy") RD = Switch(MyDay <= 15, SmallerThan, MyDay > 15, GreaterThan) End Function وننادى عليه بكل زوايا البرنامج مع مراعاة تغيير xx باسم حقل التاريخ RD([xx]) الاستاذ والاخ الحبيب @مرحبا البي جرب المرفق التالى واخبرنى بالنتيحة إرجاع تاريخ.accdb
    1 point
  21. اخي الحبيب @ابا جودى دالة Switch هي دالة تستخدم في العديد من لغات البرمجة ووضيفتها إختبار قيمة متغير ضمن لائحة من الإحتمالات نقوم بكتابتها و إذا تساوت هذه القيمة مع أي إحتمال ستتنفذ الأوامر التي وضعناها في هذا الإحتمال فقط واجمل مافيها انها تسمح باستخدام من الى كما في المثال اعلاه وكذلك اي عدد من الاحتمالات Switch([نص8] Between 1 And 15
    1 point
  22. مع أن الحقول لم تكن متشابهة
    1 point
  23. بل اسمح لى سيدى انا اتعلم انا على يديكم جزاكم الله خيـــرا على متابعتكم وطرحكم المميز دائما ومن فضلك طالما انك تطرقت الى تلك الطريقة فلتوضح عمل الدالة Switch حتى اتعلم انا لم افهم قصدك يا حبذا لو توضح اكثر وتضع لنا مرفق التطبيق
    1 point
  24. الطريقة الاولى عملت معي في البعض والباقي لم يتم في النموذج
    1 point
  25. جميل جدا يا @ابا جودى كما هي حلولك المبتكره دائما ولو سمحت لي ان اقدم حل اخر باستخدام منشئ التعبير وبعض دوال الاكسس لمن لا يفضل التعامل مع الاكواد واسمح لي ببعض الشرح وبعد الاذن من راعي الموضوع الاخ الفاضل @مرحبا البي اولا قمنا باضافة مربع نص غير منظم لاستخلاص عدد الايام من التاريخ المدخل ووضعنا قيمة الحقل =Day([txtDate]) ثم في حقل التاريخ الجديد وضعنا القيمة التاليه =IIf(IsNull([نص8]);"";Switch([نص8] Between 1 And 15;"01" & "/" & Format([txtDate];"mm/yyyy");[نص8] Between 16 And 31;"01" & "/" & Format([txtDate];"mm")+1 & Format([txtDate];"/yyyy"))) الملف مرفق وتقبلوا خالص مودتي وتقديري إرجاع تاريخ.accdb
    1 point
  26. بارك الله بك استاذ علي و زيادة في توضيح الامور هذا الملف From To.xlsx
    1 point
  27. بارك الله فيك استاذ سليم وهذا يتم بمعادلة المصفوفة -فلابد من الضغط على Ctrl+Shift+Enter وليس Enter فقط كباقى المعادلات =IFERROR(INDEX($D:$D,SMALL(IF($A:$A=$G$5,IF($B:$B>=$H$5,IF($B:$B<=$H$6,ROW(B$6:B$7000)-ROW(B$6)+1))),ROWS($K$6:K6))),"") Book11.xlsx
    1 point
  28. انت الدكتور استاذ سليم معلومة قيمة بارك الله فيك
    1 point
  29. وهذه مرفقات من مكتبتى قد تجدون منها الافكار التى تساعد ان شاء الله فى اتمام العمل 2003سين وجيم مفتوح .mdb اختبر معلوماتك في الاكسس.mdb
    1 point
  30. اخي الكريم لدي برنامج شبيه بالمطلوب و لكن غير مكتمل ارجوا الاطلاع عليه اذا كانت الفكرة مناسبة سيتم استكماله بناء على طلبك و تقريبا لوجهات النظر هذا من ناحية التصميم اما من ناحية قاعدة البيانات فأرشح القاعدة المرفقة من أخي @أبو عبدالله الحلوانى فتصميمها محكم جداً كذلك جودة العلاقات بين الجداول ممتازة جدا Database2003.mdb
    1 point
  31. استاذ سليم ... منكم نستفيد ونتعلم ......ولكم فائق الشكر والتقدير
    1 point
  32. كود ممتاز استاذ سليم بارك الله فيك وجعله الله فى ميزان حسناتك
    1 point
  33. وعليكم السلام-تفضل هذا الكود Option Explicit Sub opening_multiple_file() Dim i As Integer With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = True .Filters.Clear .Filters.Add "Excel Files", "*.xls*" If .Show = True Then For i = 1 To .SelectedItems.Count Workbooks.Open .SelectedItems(i) Next i End If End With End Sub
    1 point
  34. اخى الفاضل jjafferr هذه شهادة اعتز بها .. وإن كنت أعلم شيئا فى بحر ما تعلمون فلله الفضل ثم لمنتدانا وأساتذته.
    1 point
  35. الملف مرة تانية بالمرفقات ودا الكود المتسخدم بالشرح On Error Resume Next If Range("a3") = "" Or Range("b3") = "" Or Range("c3") = "" Then MsgBox "bla bla1", vbDefaultButton1, "bla bla1 " Else azsh = Sheet2.Range("c50000").End(xlUp).Row + 1 Sheet1.Range("A3:C3").Copy Sheet2.Cells(azsh, 1).PasteSpecial Paste:=xlPasteValues MsgBox "bla bla2", vbDefaultButton1, "bla bla2 " Sheet1.Range("A3:C3") = "" End If كود ترحيل البيانات- أوفيسنا.rar
    1 point
  36. السلام عليكم إضافة اكثر من 10 اعمدة الى اللست بوكس وخاصة عند البحث الملاحظ دائما عند اضافة قيم الى اللست بوكس يستخدم الغرض AddItem لكن عندما تكون الاعمدة اكثر من 10 اعمدة يظهر خطأ وهذا البديل وهواسرع وافضله حتى ولو كانت الاعمدة لا تتجاوز 10 اعمدة الملف 2003 ListBox.rar
    1 point
  37. السلام عليكم المصفوفات الجداول تعريف مبسط : التعامل مع اكثر من قيمة واحدة تطبيقات عملية الدرس الاول : المصفوفات Arrays rArr = Array("A", "B", "C") اذا اردنا ان نضع الصفيف هذا على صف واحد وثلائة اعمدة Sub kh_1() Dim rArr rArr = Array("A", "B", "C") Range("A1").Resize(1, 3).Value = rArr End Sub اذا اردنا ان نضع الصفيف هذا على ثلاثة صفوف وعمود واحد تعرفون الدالة TRANSPOSE إرجاع نطاق خلايا عمودى كنطاق أفقي، أو بالعكس. يجب إدخال TRANSPOSE كصيغة صفيف في نطاق به نفس عدد الصفوف والأعمدة، على الترتيب، مثل صفيف الأعمدة والصفوف الخاصة به. استخدم TRANSPOSE لتبديل الاتجاه العمودي والأفقي لصفيف في ورقة عمل. بناء الجملة TRANSPOSE(array) Array (الصفيف) هو الصفيف أو نطاق الخلايا في ورقة العمل التي ترغب في تحويلها. يتم إنشاء تحويل الصفيف باستخدام الصف الأول للصفيف على أنه العمود الأول للصفيف الجديد، والصف الثاني للصفيف على أنه العمود الثاني للصفيف الجديد، وهكذا. ============================================================ Sub kh_2() Dim rArr rArr = Array("A", "B", "C") rArr = WorksheetFunction.Transpose(rArr) Range("A1").Resize(3, 1).Value = rArr End Sub يتبع لمتابعة الموضوع افضل ان تضعوا هذه الاكواد في ملف الان نقوم باضافة فورم ونضيف التالي ListBox1 CommandButton1 CommandButton2 اضف هذه الاكواد للفورم Private Sub CommandButton1_Click() Dim rArr rArr = Array("A", "B", "C") Me.ListBox1.List = rArr End Sub Private Sub CommandButton2_Click() Dim rArr rArr = Array("A", "B", "C") Me.ListBox1.Column = rArr End Sub Private Sub UserForm_Initialize() Me.ListBox1.ColumnCount = 3 End Sub بعد فتح الفورم اضغط على الازرار CommandButton1 CommandButton2 ما هي النتيجة يتبع ============================================================= المصفوفة Array("A", "B", "C") من النوع Variant وذو البعد الواحد واول دليل لعناصرها LBound صفر وآخر دليل لعناصرها UBound عدد عناصرها ناقص واحد ونضيف عناصرها دفعة واحدة ============================================================= بعض الدالات للسلاسل النصية تعطي نتائج صفيف مثل SPLIT FILTER ناخذ مثال عن SPLIT Sub kh_Split() Dim MyAr MyAr = Split("عبدالله علي احمد باقشير") Range("A1").Resize(1, UBound(MyAr) + 1).Value = MyAr End Sub =========================================================== =========================================================== =========================================================== الدرس الثاني : الجداول المفهرسة عبارة عن متغيرات مفهرسة Indexed Variables تحتوي على بيانات عديدة من نفس النوع Data Type . كل مصفوفة لها اسم واحد يمكن استخدامه للرجوع إلى أي عنصر فيها وذلك باقتران هذا الاسم بدليل يمثل مكان العنصر فيها ، ويمكن انشاء مصفوفة لإحتواء أي نوع من أنواع البيانات مثل : النصوص والأعداد الحقيقية و الصحيحة وغيرها ، فأنواع البيانات المتوفرة في الفيجيوال بيسك هي : Data Type in VB: {Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, Object, String, Variant, User-defined }. واستخدام المصفوفات في البرمجة يساعد في صناعة أكواد قصيرة وبسيطة ذات قوة كبيرة لأنه يمكن بناء Loops تتعامل بكفاءة مع المصفوفات مهما كان عدد عناصرها وذلك باستخدام دليل العنصر Index Number . ================================================= الخصائص الأساسية للمصفوفة في الفيجيوال بيسك : اسم المصفوفة يمثل عنوان Address في الذاكرة ؛ ولا يمكن تغييره أثناء تنفيذ البرنامج . يمكن الإعلان عن مصفوفة لأي نوع من أنواع البيانات بما في ذلك الأنواع المعرفة من قبل المستخدم User-defined type والـ Object Variables . كل وحدة بيانات منفردة في المصفوفة تسمى عنصر Element . جميع العناصر تكون من نفس النوع إلا في حالة الإعلان عن المصفوفة كـ Variant Data Type . جميع العناصر تكون مخزنة على التتابع في ذاكرة الحاسوب ودليل أول عنصر هو الصفر كـ Default ويمكن جعله 1 باستخدام جملة في بداية الوحدة النمطية Option Base 1 لكل مصفوفة حداً أعلى Upper bound ، وحداً أدنى Lower bound ؛ وعناصر المصفوفة تكون محصورة بين هذين الحدين . من الممكن أن تكون المصفوفة ذات بعد واحد أو متعددة الأبعاد . تحديد الحدين الأعلى والأدنى للمصفوفة Upper bound & Lower bound: عند الإعلان عن مصفوفة، يكتب الحد الأعلى بعد الاسم وبين الأقواس. لا يمكن أن يزيد الحد الأعلى عن نطاق نوع المتغير Long Data Type. الحد الأدنى الإفتراضي Default هو الصفر. اذا عرفت عن هذا المتحول بـــــ Limiteinf To LimiteSup في مكان الوسيط Indexs تكون قد عرفت جدولا بعدد عناصر محدد وبارقام دليل محددة وهذه الطريقة افضل للاستخدام للفهم السريع للوسيط Indexs Dim ay(1 To 3, 1 To 2) As String ----------------------------------------------------------------------------- ay(1 To 3, 1 To 2) لمعرفة الدليل الاول والاخير لليعد الملون بالاحمر للمتحول LBound(ay, 1) UBound(ay, 1) لمعرفة الدليل الاول والاخير للبعد الملون بالازرق للمتحول LBound(ay, 2) UBound(ay, 2) ================================================================== ================================================================== ملحوظة عند إضافة أبعاد المصفوفة فإن مساحة التخزين المطلوبة سوف تزيد زيادة كبيرة ولذلك ينبغي الاحتراس وتفادي استخدام النوع Variant قدر الإمكان لما يتطلبه من مساحة تخزينية كبيرة! ================================================================== ================================================================== المصفوفة ذات الحجم الثابت نعلن عنها بأحد أوامر الإعلان (Public or Private or Dim or Static) مع تحديد عدد العناصر في الأقواس Dim ay(1 To 3, 1 To 2) As String مثال 1: Sub kh_Array1() Dim ay(1 To 3, 1 To 2) As String ay(1, 1) = "A" ay(2, 1) = "B" ay(3, 1) = "C" ay(1, 2) = "D" ay(2, 2) = "E" ay(3, 2) = "F" Range("A1").Resize(3, 2).Value = ay End Sub مثال 2 جدول ضرب Sub KH_5() Dim sArr(1 To 12, 1 To 10) As Integer Dim ContRow As Integer, ContColmn As Integer Dim c As Integer, r As Integer ContRow = UBound(sArr, 1) ContColmn = UBound(sArr, 2) For r = 1 To ContRow For c = 1 To ContColmn sArr(r, c) = r * c Next Next Range("A1").Resize(ContRow, ContColmn).Value = sArr End Sub المصفوفات متغيرة الحجم Dynamic Array: في بعض الأحيان، لا نعرف مسبقاً حجم المصفوفة التي سنستخدمها في البرنامج بالضبط، وقد نريد تغيير حجم المصفوفة أثناء تشغيل البرنامج، هنا سنحتاج إلى المصفوفات ذات الحجم المتغير Dynamic حيث يمكننا تغيير حجمها في أي وقت. تعتبر المصفوفات متغيرة الحجم أحد مميزات الفيجيوال بيسك، وهي تساعد في تنظيم الذاكرة بكفاءة. فمثلاً، يمكن استخدام مصفوفة كبيرة لوقت قصير ثم إعادة تحجيمها لتحرير مساحة من الذاكرة عندما لا نحتاجها. وهذا من شأنه تسريع المعالجة. ولصناعة Dynamic Array نتبع التالي: نعلن عنها بأحد أوامر الإعلان (Public or Private or Dim or Static) ونجعلها ديناميكية بعدم كتابة أي رقم في الأقواس كما يوضح المثال التالي: Dim sArr() As String نعيد الإعلان عنها مع تحديد عدد العناصر باستخدام جملة ReDim كما في المثال التالي: ReDim sArr(1 To ContRow, 1 To ContColmn) ================================================================== ================================================================== ملاحظات هامة . كل جملة من جمل ReDim يمكنها تغيير عدد العناصر بالإضافة إلى الحد الأعلى والحد الأدنى لكل بعد للمصفوفة، ومع ذلك فإن عدد الأبعاد في المصفوفة لا يمكن تغييره. . تمحى جميع القيم المخزنة في المصفوفة كل مرة يعاد فيها تنفيذ جملة ReDim. ويجعل الفيجيوال بيسك القيم كالتالي: في حالة الــــ Variant Array --------- الى ----- Empty Value في حالة الــــ Numeric Array ------- الى ----- Zero في حالة الــــ String Array ----------- الى ----- Zero-Length String في حالة الــــ Array of objects ------ الى ----- Nothing وهذا مفيد عندما نريد تجهيز المصفوفة لبيانات جديدة أو عندما نريد اختزال حجم المصفوفة لتأخذ أقل مساحة ممكنة في الذاكرة. ================================================================== ================================================================== مثال 1: Sub KH_6() Dim sArr() As String Dim iName As String Dim ContRow As Integer, ContColmn As Integer Dim c As Integer, r As Integer, i As Integer Range("H7").Resize(14, 5).ClearContents iName = CStr([H4]) ContColmn = 5 With Range("B7").Resize(14, 1) ContRow = WorksheetFunction.CountIf(.Cells, iName) ReDim sArr(1 To ContRow, 1 To ContColmn) For r = 1 To .Rows.Count If CStr(.Cells(r, 1)) = iName Then i = i + 1 For c = 1 To ContColmn sArr(i, c) = CStr(.Cells(r, c)) Next End If Next End With Range("H7").Resize(ContRow, ContColmn).Value = sArr Erase sArr End Sub دروس المصفوفة 1.rar ================================================================== ================================================================== Erase تستخدم لتحرير الذاكرة المعينة للجداول الديناميكية واعادة تعيين عناصر الجدول الى قيمتها البدائية بطول ثابت مثال: Erase sArr ================================================================== ================================================================== تغيير حجم المصفوفة دون فقد بياناتها يمكننا فعل ذلك باستخدام جملة ReDim مع كلمة Preserve وتعني الحفظ الجملة التالية تغير حجم المصفوفة ولكنها لا تمحو العناصر الموجودة بها: ReDim Preserve MyArray( 10 ) والآن يمكننا كتابة ملخص متكامل لجملة ReDim. جملة ReDim: تستخدم في مستوى الـProcedure لإعادة تخصيص allocates مساحة تخزينية storage space لمصفوفة متغيرة الحجم Dynamic array. صيغتها Syntax: ReDim [Preserve] varname(subscripts) [As type] [, varname (subscripts) [As type]] ================================================================== ================================================================== ملاحظات هامة: جميع ما ذكر في الصيغة داخل قوسين مربعين [] يعتبر اختياري يمكن الاستغناء عنه حين عدم الحاجة إليه. تستخدم جملة ReDim لتحجيم أو إعادة تحجيم مصفوفة متغيرة الحجم Dynamic Array والتي بالفعل قد أعلن عنها مسبقاً باستخدام أي من الجمل Dim, Private, Public مع أقواس فارغة (أي بدون ذكر الأبعاد). يمكن تكرار استخدام جملة ReDim لتغيير عدد العناصر والأبعاد لمصفوفة، ومع ذلك لا يمكن الإعلان عن مصفوفة بنوع معين من البيانات ثم إعادة تعريفها لاحقاً مع تغيير نوع البيان لنوع آخر إلا إذا كانت المصفوفة محتواه في variant. إذا كانت المصفوفة محتواه في variant فإن نوع بيان العناصر يمكن أن يتغير باستخدام المقطع As Type إلا إذا استخدمنا كلمة Preserve ففي هذه الحالة لا يسمح بتغييرات. إذا استخدمنا كلمة Preserve يمكن فقط تحجيم البعد الأخير للمصفوفة ولا يمكن تغيير عدد الأبعاد على الإطلاق. إذا كان للمصفوفة بعد واحد فيمكن إعادة تحجيم هذا البعد لأنه البعد الأخير والوحيد بالمصفوفة. وإذا كان للمصفوفة بعدين أو أكثر فيمكن فقط تغيير حجم البعد الأخير مع الاحتفاظ بمحتويات المصفوفة. عندما نستخدم Preserve يمكن تغيير حجم المصفوفة بتغيير الحد الأعلى بينما ينتج لدينا خطأ حين تغيير الحد الأدنى. إذا صنعنا مصفوفة أصغر مما كانت فإن بيانات العناصر المخزنة سوف تفقد. تحذير: جملة ReDim ستعمل وكأنها جملة إعلان إذا كان المتغير (المصفوفة) التي تعلن عنه غير موجود على مستوى الـProcedure أو الـModule. وإذا كان هناك متغير آخر بنفس الاسم قد أنشئ بعد ذلك وحتى لو كان في النطاق ككل Scope؛ فإن ReDim سوف ترجع للمتغير الأخير ولن يتسبب عن ذلك خطأ في الترجمة Compilation error حتى ولو كانت جملة Option Explicit فعّالة. وبذلك لن يدرك المبرمج أنه هناك خطأ بالشيفرة code. ولتفادي هذا التعارض لا ينبغي استخدام جملة ReDim كجملة إعلان بدلاً من Dim مثلاً، ولكن نستخدمها فقط لإعادة تعريف حجم المصفوفة. ================================================================== ================================================================== توضيح اكثر لهذه الملاحظة إذا استخدمنا كلمة Preserve يمكن فقط تحجيم البعد الأخير للمصفوفة ولا يمكن تغيير عدد الأبعاد على الإطلاق. امثلة : للبعد الاخير ( الملون بالاحمر) هنا ثلاثة ابعاد البعد الاخير هو 15 ReDim Preserve X(10,12,15) ReDim Preserve X(10,12,15) هنا بعدين البعد الاخير هو 12 ReDim Preserve X(10,12) ReDim Preserve X(10,12) هنا بعد واحد إذا كان للمصفوفة بعد واحد فيمكن إعادة تحجيم هذا البعد لأنه البعد الأخير والوحيد بالمصفوفة ReDim Preserve X(10) ReDim Preserve X(10) حمل الملف الموجود في هذا الموضوع تطبيق عملي لما ذكر اعلاه http://www.officena....showtopic=42346 http://www.officena.net/ib/index.php?showtopic=42584 دروس المصفوفة 1.rar kh_SumProduct.rar دروس المصفوفة ( دالة لتوليد ارقام عشوائية).rar ((الشرح العلمي منقول من هنا وهناك)) تم بحمد الله وشكره
    1 point
  38. أخى وأستاذى الكبير / بن علية السلام عليكم ،،،،، خلال بحثى بالمنتدى عن كيفية تحليل (إستهلاك) المصروفات المدفوعة مقدماً وجدت هذا الموضوع الشيق ولكنى وددت لو أنه يغطى ما أحتاجة بملفى المرفق والذى أريد من خلالة تحليل المصروفات المدفوعة مقدماً على الفترة المحددة لكل مصروف مع مراعاة عدد أيام كل شهر بالفترة وذلك كالتالى :- - ستجد أخى بالعمودان C & D الفترة المحددة والتى يغطيها المصروف ، وقد يحدث أن تغطى الفترة المالية سنتان ماليتان كما هو بالسطر رقم 7 حيث تجد أن فترة المصروف تبدأ من 23/7/2012 وحتى 22/7/2013. - قمت بإستهلاك المصروف وفقاً لنسبة عدد أيام كل شهر إلى عدد أيام الفترة المالية كلها مثال : السطر رقم 4 " بند وثيقة تأمين السيارة المرسيدس " فى شهر يناير قمت بضرب 9275 جم فى 31 يوم (عدد أيام الشهر) / 204 (عدد أيام الفترة) ، وكذلك الحال فى شهر فبراير ولكن مع الإختلاف حيث أن عدد أيامة هى (29 يوم). - السطر رقم (7) " بند وثيقة تأمين السيارة المرسيدس " (إستطراد : إن لاحظت سطر 4 مع هذا السطر فستجد أن ذلك هو تجديد للوثيقة السابقة) والذى يغطى فترة من 23/7/2012 وحتى 22/7/2013 فستجد أنى قد قمت بإدخال قيم صفرية فى الستة أشهر الأولى (يناير : يونيو) ثم إتبعت نفس الأسلوب الموضح أعلاة فى الأشهر الستة التالية (يوليو : ديسمبر) . فهل بالإمكان أن أقوم فقط بإدخال الفترة المالية بالعمودان C & D ويتم عمل كافة ماسبق بالمعادلات بحيث أصل إلى نفس النتائج ولكن بشكل آلى ودون الإضطرار إلى حساب عدد الأيام إدخال القيم باليد ....؟ أرجو أن أكون قد وفقت فى شرح ما أقصدة. خالص شكرى وتقديرى أخوك عيد مصطفى Prepaid Exp. Settlement.rar
    1 point
  39. بسم الله الرحمن الرحيم بعض الاعمال السابقة دوال دالة ( VLOOKAnyCol ) تبحث فى اى عمود من الجدول وتستخرج النتيجة من آخر دالة VLOOK2ALL لإستخراج كل حالات البحث دالة VLOOKON بلا حدود تبحث فى عدة جداول دالة تجزئة الاسماء و الارقام دالة "IFYES" اقوى واسهل من "IF" مع احتمالات اكثر دالة اتخاذ القرار ( Resolve ) لتقيم التقديرات و المعدلات والنسب ادوات ذكية استرجاع اعدادات الاكسل الاصلية التخلص من علامات خطأ المعادلات نسخ الاكواد من ملف الى ملف أداة تحويل صيغ المعادلات الى اكواد مصباح علاء الدين للبحث اقوى دالة بحث الحلول الذكية و شريط الادوات الذكية التحكم بأشرطة الادوات والقوائم المنبثقة تلوين السطور الفردية أو الزوجية إكسيل كاميرا برامج واكواد كيفية الحصول على سريال نمبر الهارد ديسك الباحث الشامل اعداد الجدول الزمنى للمشروعات ( مخطط جانت ) إنشاء قوائم منسدلة مرتبطة متعددة المستويات تصدير مدى محدد الى الوورد حل مشكلة عدم ظهور اكثر من 1000 سجل فى قوائم التصفية التلقائية إستخراج النتائج بشرطين صيغة ظريفة سلسلة كيف تدرج دالة فى الاكسل لتكون متاحه لكل الملفات بإنشاء ملف ( AddIn ) يحتوى على دوالك الخاصة منع حفظ الملف بأسم آخر زيادة عملية التراجع و الإعادة ( Undo / Redo ) في الاكسل أكثر من 16 مرة اكسيل 11 كشـف تـوزيـع فئـات النقـديـة كشـف صـرف النقـديـة بالفئـات المتـاحـة إستيراد وتصدير جدول إكسيل من وإلى الأكسيس صمم توقيعك الخاص او علامتك المائية لملفاتك الخاصة كود الدوائر الحمراء والاحرف الخاصة لدرجات الطلاب نموذج طباعة الشهادات المدرسية مع دوائر الارقام برنامج طباعة الشهادات للمرحلة الابتدائية_1 برنامج طباعة الشهادات للمرحلة الابتدائية_2 برنامج طباعة نماذج الشهادات للمرحلة الاعدادية قائمة منسدلة تفلتر مع الاحرف او الاسماء المحددة برنامج حفظ بيانات الشيكات والبحت عنها اكواد و اوامر ( VBA ) مفيدة القائمة المنسدلة المرتبطة بقوائم متعددة المدى او النطاق ( ثابت / ديناميكى ) الارقام العشوائية بدون تكرار البوم للصور والمعروضات, بدون حدود ***** ***** ***** ***** *****
    1 point
  40. السلام عليكم ورحمة الله وبركاتة هذه دالة جديدة لتجزئة الاسماء والارقام لتضاف الى مكتبة الدوال العربية المبتكرة والدالة سهلة الاستخدام : وتأخذ عدد 2 بارميتر البارميتر الاول : عنوان خلية الاسم الكامل البارميتر الثانى : هو ترتيب الاسم المراد استخرجة من الاسم الكامل ويمكن تطوير الدالة لتجزئة الاسماء والارقام بفاصل يمكن تحديده سواء كان ( فاصله او فاصله منقوطه او شرطة ) اذا احتاج احد الاخوة ذلك Split_Names_and_Numbers.rar
    1 point
  41. اخى الكريم عمر : ربنا يفتح عليك و يجعل هذا العمل فى ميزان حسناتك و صدقه جاريه نافعه الموضوع جميل و شيق و بصراحه هذا الموضوع كنت ساتناوله بالشرح و هذا ما ذكرته فى نهايه مشاركتى ( شرح الماكرو بالصور ) 0 و لكن هذه المشاركه جعلتنى أنتظر و أفكر لكى أقوم بدمج و تثبيت هذه المشاركه مع مشاركتى السابقه فى موضوع واحد ليستفيد منه الجميع مع السماح لى و لباقى الاعضاء بالاضافات 0 و الامر طبعا متوقف عليك و على باقى الاعضاء
    1 point
  42. السلام عليكم أستاذ ابوخليل شكرا لك على الجواب الا أنه ليست الحقول فقط وتشابها ولكن كانت هناك علاقة بين الجدولين عندما حذفتها عمل استعلام مع أن الحقول لم تكن متشابها وشكرا لك
    0 points
×
×
  • اضف...

Important Information