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

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

  1. ibn_egypt

    ibn_egypt

    الخبراء


    • نقاط

      4

    • Posts

      764


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

    سليم حاصبيا

    أوفيسنا


    • نقاط

      4

    • Posts

      8723


  3. ابوخليل

    ابوخليل

    أوفيسنا


    • نقاط

      3

    • Posts

      12864


  4. يوسف أحمد

    يوسف أحمد

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


    • نقاط

      2

    • Posts

      1055


Popular Content

Showing content with the highest reputation on 02/12/15 in all areas

  1. اخواني في المنتدى السلام عليكم اليكم هذا الملف الذي يختار لكم ارقاماً عشوائية بشروط معينة ارقام عشوائية بشرط.rar
    3 points
  2. طريقة عمل ( فورم ) فاتورة ووضع اكوادها وترحيل بياناتها واستدعائها وطباعتها !! خطوة خطوة السلام عليكم اساتذة المنتدي وخبراؤه الكبار الاخوة الافاضل اعلم ان هذه الموضوعات قد قتلت بحثا وطلبا واجابة من الاعضاء وهناك امثلة كثيرة للاساتذة الافاضل الكبار ولكن ما دعاني لتقديم هذا الموضوع ... هو كثرة طلبه هذه الايام حيث طلبه كثيرا الاخ / محمد توبه ... والاخ / هاني مصطفي ولكني اردت ان اجعل المواضيع الاساسية في عمل اي برنامج في متناول الجميع بطريقة بسيطة وسهله اكثر ما يكون من خلال هذه السلسلة ( اعانني الله علي اكمالها كما ينبغي ) وقصدت ان يكون الموضوع بعنوان واضح ليستفيد منه الجميع عند البحث وسأقدم الشرح بطريقة الفيديو والاكسيل والجديد في هذا الموضوع هو انني سأقدم الاكواد اكواد بطريقة بسيطة وسهلة ولكنها طويله بعض الشئ ... ولكن تؤدي نفس الغرص ومرة اخري بأكواد خبورية خالصة ... للاستاذ العلامة القدير الخبير / عبد الله باقشير ... مع شرح الاكواد سطر سطر كما تعودنا وذلك بالطبع بعد اذن القدير الكبير ... ولكن لانه اول من علمنا تقديم المساعدات للغير ... لم استأذنه ولكن انتظر رأيه في الموضوع (((( الدرس الاول )))) نتعرف في هذا الدرس علي عمل بعض التنسيقات اللازمة لعمل الاكواد وخصوصا الاكواد الخبورية بتسمية التكستات بوكس ووضع بعض الاكواد المساعدة للاكواد في الدروس التالية قبل وضع الاكواد الاساسية والخاصة بالترحيل و ..... الخ وكالعادة دائما احب ان اختار اسهل الاكواد علي الاطلاق لسهوله فهمهما وتنفيذها والاعتماد عليها حتي الاكواد الخبورية احببت اختيار اسهلها لما لها من دقة وكفاءة عاليه في تنفيذ المهمة المطلوبة وبالطبع يمكنك تطويع الكود بعد فهمه جيدا لاستخدامه كما تريد في ملفك الشخصي وسأقدم الشرح بطريقة الفيديو المباشر في المشاركة التالية ويمكنكم التحميل منها مع المرفقات ارجو أن يوفقني الله في الشرح وان اكون عند حسن ظنكم جزاكم الله خيرا
    2 points
  3. السلام عليكم ورحمة الله وبركاته اخواني/اخواتي رأيت الكثير من الاسئلة حول تصدير بيانات الاكسس الى الاكسل ، وكل سؤال يختلف عن غيره بطريقة او اخرى ، فحبيت ان اضع بين يديكم برنامج اشتغلت عليه ، واتمنى من الله سبحانه وتعالى انه يقدر يخدم الكل البرنامج سهل الاستعمال ، فكل المطلوب في الواجهة ، ولا تحتاج الذهاب للكود اولا: الواجهة: 1. تختار من مربع السرد ، جدول او استعلام ، 2. على اساس الاختيار في رقم 1 ، ستظهر لك قائمة باسماء الجداول او الاستعلامات في برنامجك ، 3. اسم ملف الاكسل المراد حفظه به ، ومجلد التخزين ، فتلقائيا يكون في نفس مجلد البرنامج ، 4. هنا تكتب اسم صفحة الاكسل التي تريدها (انظر الصورة في الاسفل) ** تستطيع ان تصدر اي عدد من الصفحات الى اكسس (طبعا التصدير يكون باستعمال البرنامج عدة مرات ، في كل مرة تستخدم اسم صفحة جديدة) ، ** تستطيع ان تصدر بيانات جديدة الى نفس الصفحة في اكسس (طبعا التصدير يكون باستعمال البرنامج عدة مرات ، في كل مرة تستخدم *الادخال من خانة* اسفل الخانات الموجودة في الاكسل) ، 5. تستطيع بدء تصدير البيانات الى اي خانة في اكسل مثل A2 او C5 او اي خانة اخرى ، ** تستطيع ان تصدر بيانات جديدة الى نفس الصفحة في اكسس (طبعا التصدير يكون باستعمال البرنامج عدة مرات ، في كل مرة تستخدم *الادخال من خانة* اسفل الخانات الموجودة في الاكسل) ، 6. تستطيع ان تحفظ ملف الاكسل بالصيغ التاليه: "xls" او "xlsx" او "xlsm" او "xlsb" او "csv" او "txt" ، والصيغتين الاوليتين هما الاهم ، والصيغتين الاخيرتين بهم قيود معينة ، 7. تستطيع ان تختار المجلد الذي تريده ، مع كتابة اسم الملف المناسب لك (انظر الرقم 3 اعلاه) ، 8. تستطيع تصدير البيانات مع اسماء الحقول (في الاكسس) ، وتستطيع تصدير البيانات مع عناوين/مسميات الحقول (في الاكسس) ، نلاحظ اعلاه ، بان الجدول elemnts لا يحتوي على عناوين/مسميات الحقول بالعربي ، بينما الجدول elemnts2 يحتوي عليها ، وتستطيع تصدير البيانات فقط بدون اسماء الحقول ، 9. تستطيع ان تصدر البيانات الى ملف اكسل فيه بيانات سابقة ، وهنا تستطيع الاستفادة من الارقام 4 و 5 اعلاه ، او ان تحذف ملف الاكسل الموجود حاليا بنفس الاسم ، وتبدأ تصدير ملف جديد ، 10. بعد تصدير البيانات الى اكسل ، هل تريد إحتواء وتوسيع كل الاعمدة فيه ، حتى ترى كل البيانات بدون الحاجة الى توسيع كل عمود على حدة ، او لا تريد توسيع الاعمدة. 11. الزر الذي يقوم بعملية تصدير البيانات الى اكسل ، حسب الاختيارات اعلاه ، مع ملاحظة: يجب تعبئة الحقول داخل المربعات الحمراء ، اما بقية الحقول فإختيارية ، 12و 13. لجعل هذا البرنامج يعمل على اي من برامجكم الحاليه ، يجب تصدير النموذج frm_Export_to_Excel و الوحدة النمطية fFolder_Dialog اليها. طبعا هناك أفضلية تصدير البيانات من الاستعلام ، حيث تستطيع ان تتحطم بالبيانات المطلوب تصديرها. ملاحظات؟ اخطاء/عطل؟ إضافات؟ انا في الخدمة ، قدر المستطاع جعفر -------------------------------------------------------- الموضوع منقول من منتدى شقيق وتم نقله كماهو وذلك للاهميه الرجاء الدعاء للاستاذ : جعفر بارك الله فيه Export_to_Excel تصدير البيانات الى اكسيل.zip
    1 point
  4. الأخوة الأفاضل شكرا لكم جزيلا على هذا العطاء الوافر و زاد الله لكم نصيبكما بالدنيا و الآخرة دمتم بخير و أعزكم الله
    1 point
  5. جزاك الله كل خير وسأخذ بكل كلمة فلقد رسمت لي طريقا واضحا وتأكد انت سبب رئيسي في اصراري على خوض هذا المجال لما وجدته فيك من تمكن واضح الى الامام يامعلمي النبيل
    1 point
  6. اخي الكريم ضع هذا الكود في بداية كود الصفحة المخفية عندك Sheets("اسم الصفحة المخفية حرفيا").Visible = True وفي اخر الكود عندك ضع هذا Sheets("اسم الصفحة المخفية حرفيا").Visible = False
    1 point
  7. أخى الفاضل أ.طارق أولا :- أخى الكريم لابد أن تعلم أن طريق النجاح في أى مجال يبدأ بخطوة ودائما يقولون أن أصعب ما في أى أمر بدايته فإذا بدأت وعزمت ومشيت تسهلت كل الأمور ثانيا :- شخصيا عندما أريد أن أتعلم شيئا جديدا دائما ما أفضل المصادر الإنجليزية في التعلم ثالثاً :- إذا أردت أن تتعلم Excel VBA فنصيحتى أن تبدأ بهذا الكورس " شيق - سلس - اللغة إنجليزية ولكنها بسيطة " عبارة عن 114 فيديو .. لا تستصعب الأمر فكل فيديو مدته بسيطة لو أخذت في اليوم فيدوهان فقط وتدربت عليهم ونفذت ما فيهم من أكواد بإذن الله في خلال أقل من شهرين ستكون متمكناً جدا جدا من كل الأدوات البرمجية والأكواد http://www.youtube.com/playlist?list=PLS7iHfqXNVhK3yzd_4XS5k4zsvnu2mkJC رابعاً:- في خلال هذه الفترة التى تتعلم بها أن تتابع المنتدي أول بأول وتتطلع على كافة المواضيع وطريقة حلها التى تمت بواسطة الأساتذة الكرام هنا وخاصة الموضوعات المتعلقة بالأكواد كما يمكنك ان تدخل على قسم التطبيقات وتحمل التطبيقات الموجودة وترى الأفكار المختلفة التى تفضل الأساتذة الكبار هنا في صنعها واعطائها الينا على طبق من ذهب فجزاهم الله كل خير خامسا :- بعد أن تنتهي من الكورس تماما ستجد أنك أصبح لديك خلفية لا بأس بها وان قولت متمكن بنسبة 80% وأكثر لن أكون مبالغا .. سيتبقي لديك الجزء الأهم على الإطلاق ألا وهو التدريب العملى اما بصنع مشاريع خاصة بك وبمدرستك او ان تتابع المنتدي وتحاول حل أى موضوع تراه يتطلب كود، ستجد مع مرور الوقت وكثرة المشاريع التى صنعتها أنك أصبحت بالفعل متمكنا من الموضوع بشكل كامل سادسا:- فوق كل ذي علم عليم، لا تتردد أبدا مهما وصلت في أن تسأل عن أى أمر يقف أمامك فالسؤال ليس عيبا انما الجهل بإجابته هو العيب الأكبر دى وجهة نظرى الشخصية، مع خالص تمنياتي لك بالتوفيق تحياتي
    1 point
  8. أخى الفاضل أ.حليم حضرتك لو جربت خاصية البحث في أعلى يسار المنتدي ستجد مئات الموضوعات التى تتحدث عن هذا الموضوع منها على سبيل المثال لا الحصر إخفاء أوراق العمل والتنقل بينها من الشيت الرئيسي تنقل بين اوراق العمل عن طريق الليست بوكس مع اخفاء الباقي عدم اظهار قوائم و أوراق الاكسل ابحث وستجد المزيد والمزيد خالص تحياتي
    1 point
  9. تفضل هذا الحل ليكون الادخال ديناميكي Dim X() Dim R As Long, RR As Long Dim C As Integer Dim sText As String: sText = Me.ComboBox1.Text & " " & Me.ComboBox2.Text With ListBox1 For R = 0 To .ListCount - 1 RR = RR + 1 ReDim Preserve X(1 To 4, 1 To RR) For C = 1 To 4 If C = 2 Then X(C, RR) = sText Else X(C, RR) = .List(R, C - 1) Next Next End With ListBox1.Column = X Erase X (أستاذي القدير لم أفهم ما قصدته) الامر بسيط ان كنت تفهم المصفوفات المصفوفة عبارة عن جدول لاكن ليس في الشيت انما في ذاكرة الفيوجل ما قمت به هو اني حملت محتولى اليست بوكس الى مصفوفة دينامكية علما انه يمكنا التحكم في حجم المصفوفة الديناميكية كما نشاء .... لازمها درس طويل شاهد هذا الدرس للعلامة الاستاذ عبد الله باقشير لكي تكون عندك فكرة عن المصفوفات http://www.officena.net/ib/index.php?showtopic=42397 http://www.officena.net/ib/index.php?showtopic=42584 المهم بعد تحميل محتوى اليست بوكس الى المصفوفة مع ادخال البيانات التي نريد اذخالها و الى المكان او الخلية التي نريدها بكل بساطة نعيد ملئ اليست بوكس هذه المرة بمحتو المصفوفة التي عملناها فقط ارجو ان تكون الفكرة قد وصلت تحياتي للجميع
    1 point
  10. شكرا لك على الشرح والايضاح وعلى ما بذلته من جهد اذا الخاصية متوفرة في الاصدار 2013 زادك الله علما ووفقك
    1 point
  11. اخى الفاضل م.إيهاب تفضل الملف المرفق لربما به طلبك .. الملف اصدار 2010 ولا اعلم ان كان سيعمل الكود على الإصدارات السابقة أم لا ( غير متأكد من ذلك ) http://www.mediafire.com/download/ipou6h5o1esxlt6/Report.rar تحياتي
    1 point
  12. السلام عليكم اخى الكريم اليك اكثر من حل ارجو ان يفيدك تحياتى البحث على اساس الاسم. الاول او الثاني.rar
    1 point
  13. وعليكم السلام ورحمة الله وبركاته استاذ/اسلام الشيمي الله يخليك ويوفقك وبصراحه فى كل مرة تخجلنى اكثر واكثر بردودك وصدقنى ثقتى واعجابى بحضرتك كل يوم يذيد وان لم يتم بناء البرنامج يكفى شرف معرفتك وتعلمى من حضرتك حسن الخلق والكرم بارك الله فيك وجعل عملك فى ميزان حسناتك
    1 point
  14. فتحت المرفق على الاصدار 2010 والنتيجة واحدة : لا يمكن عرض التقرير من خلال النموذج اخي محمد : اذا كانت النتيجة غير ما ذكرت ارجو ان ترفق صورة يظهر فيها التقرير من خلال النموذج
    1 point
  15. السلام عليكم ورحمة الله أخي الكريم، أشكر أخي الفاضل طارق جازاه الله خيرا وبارك الله فيه وفي أهله ووقته، تم تعديل طفيف على كود فورم البحث لإدراج الآيات المشكّلة، تم إضافة عمود للآيات المشكّلة في العمود C في شيت الآيات، ثم أيضا تم التعديل على بعض المعادلات في شيت الأسئلة... أرجو أن تفي بالغرض المطلوب... أخوك بن علية الملف المرفق : نهائي قبل التأمين.rar
    1 point
  16. اخى الفاضل ما يظهر في الايميل بالميلادي كما هو بالملف ... دي صورة الايميل اللى انا بعته للسجل رقم 26 .. التاريخ 03/09/2015 ودي صورة التاريخ المكتوبه بالخلية F26 هو نفسه 03/09/2015 .. لا اري اين مشكلتك تحياتي
    1 point
  17. اخى تفضل ولكن تم عمل الكود وكنت فى عجلة من امرى ارجو مراجعة البيانات المستخرجه جيدا قبل الاعتماد على الكود تقبل تحياتى فرنسية23.rar
    1 point
  18. إضافة لما تقدم به الأخ الحبيب سليم إليك الحل التالي (آثرت إظهار النتائج بشكل عمودي وليس بشكل أفقي كما في المشاركة السابقة) ، ودمجت لك الطلبين معاً أرجو إن شاء الله أن يوفي المطلوب .. Extract Places & Dates.rar
    1 point
  19. مجهود رائع يدل انك صاحب فكر عالى
    1 point
  20. اخي علاء لجعل البيانات افقية تغيير بسيط في المعادلة انظر الصفحة 2014 -12(2) Nagy salim avance.rar
    1 point
  21. أخى الحبيب " إسلام " طلبك فى ظاهرة بسيط ولكن محتواة صعب للغاية ولوكانت فكرة أخى الحبيب " سليم " هى ماتريد سيكون فعلا ما أسهلة ولكن ماتريدة فى النتيجة التى فى المرفق يؤكد تحليلى لأن ماتريدة ليس سهل على الإطلاق لما يحتوية من أسماء مركبة ، لأن من عيوب الأسماء العربية وأصعبها وجود الأسماء المركبة والتى ليس لها حصر ولا نهاية فأرجو توضيح ما تريد للعمل علية وأتمنى من كل قلبى أن يحقق حل الأستاذ " سليم " المطلوب تقبل تحياتى
    1 point
  22. تفضل تم التعديل حسب رغبتك جعلنا هذا المعيار في حقل التاريخ داخل الاستعلام >Year(Date())-10 الرقم 10 يعني السنوات التي سيتم عرضها تنازليا قاعدة البيانات11.rar
    1 point
  23. بارك الله فيك اخي العزيز عبد الرحمن هاشم و جزاك خير الجزاء اود اضافة حل آخر بإستخدام خاصية RecordCount لمجموعة السجلات مرفق الملف بعد التعديل بالتوفيق للجميع USER.rar
    1 point
  24. تفضل أخي الكريم .. هذا نموذج ممكن يفيدك وتستطيع التعديل عليه ... كل مافي هذا المثال تعلمته وتجميع من هذا المنتدى الرائع ... المرفق عبارة نموذج ترحيل بيانات واستعلام وبحث ... كود ترحيل البيانات - 16.rar
    1 point
  25. وعليكم السلام ورحمة الله مبدأيا أخي الكريم يفضل كتابة مسميات الحقول في الجداول باللغة الإنجليزية ويمكنك بعدها من خلال خصائص كل حقل (تسمية توضيحية) بأن تكتبه بالعربي ؛ لإن ذلك سيفيدك مستقبلا في كتابة الأكواد ولضمان عدم الوقوع في أخطاء وأيضا قمت بفصل الأقسام وجعلتها في جدول مستقل وهذا أيضا سيفيدك وللموظفين جدول مستقل.. وكل قسم سيعرض في صفحة مستقلة ألقي نظرة أتمنى يكون المطلوب كل قسم فى صفحة.rar
    1 point
  26. و اياكم اخي العزيز توصلنا للحل و الحمد لله .. تفضل SELECT Invoice.Inv_Nu, Invoice.In_date AS Show_date, Invoice.In_desc AS البيان, Invoice.In_value AS مدين, "" AS دائن, Invoice.ID FROM Invoice UNION all ( SELECT Payment.Pays_Nu AS Show_Nu, Payment.Pay_date AS Show_date, Payment.Pay_desc AS Show_dosc, "" AS Dr, Payment.Pay_Mount AS Cr, Payment.ID FROM Payment) order by show_date asc تفضل المرفق بعد التعديل بالتوفيق و شكراً جزيلاً لك لقد افدتني بسؤالك الجميل استعلام توحيد .rar
    1 point
  27. السلام عليكم ابشركم تم حل المشكلة بعون الله وفضله stockalaa2.rar
    1 point
  28. برنامج بيانات مدرسين شاملة ( الاسم - المدرسة -تاريخ التعيين - الكود- الرقم القومى- الوظيفة - تاريخ الميلاد - رقم التليفون )
    1 point
  29. السلام عليكم المصفوفات الجداول تعريف مبسط : التعامل مع اكثر من قيمة واحدة تطبيقات عملية الدرس الاول : المصفوفات 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
  30. اشكرك استاذ نادر على هذا البرنامج الاكثر من رائع واتمنى لك المزيد من التألق والنجاح
    1 point
×
×
  • اضف...

Important Information