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

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

  1. ياسر العربى

    ياسر العربى

    الخبراء


    • نقاط

      16

    • Posts

      1510


  2. الصـقر

    الصـقر

    الخبراء


    • نقاط

      7

    • Posts

      1836


  3. عبد العزيز البسكري

    • نقاط

      6

    • Posts

      1352


  4. ابراهيم الحداد

    • نقاط

      5

    • Posts

      1258


Popular Content

Showing content with the highest reputation on 12/20/15 in مشاركات

  1. ولايهمك استاذنا اتفضل رابط ميديا فاير http://www.mediafire.com/download/7cxahz9knqc1m93/Office_2016_16.0.4229.1002_x86-x64_v2.8.iso
    3 points
  2. عمل ممتاز اخي الغالي ابو يوسف لمسات جميله وهي من اهم اعمدة المشروع الخاص بنا وهو ان يكون شكل المشروع اعني البرنامج ان يكون جذاب ويعطى انطباعا طيبا في النفس وبخصوص اللمسات يامعلمين بقي هرفق ليكم ملف به هدية لتجميل الفورم ومظهر البرنامج عموما وكدا يبقي سبقتوا الشرح الاساسي في موضوع الردود نظرا لاجتيازكم مستوى الشرح بكثير اخي عبد العزيز سننطلق على بركة الله باذنه ومشيئته وانتظرو اللمسات الجمالية اتيه لكم لتبدعوا اكثر واكثر الهدية بها بعض العيوب البسيطة لا تظهر الليبل العادي وقت تشغيل البرنامج فيأتي معها ليبل مخصص يظهر باظهار الاداة الاداة image لاتظهر وقت تشغيل البرنامج تستبدل وتفى بالغرض مكانها الاداة Picture انتظرو المرفق لكم فائق احتراماتي
    3 points
  3. اعرض الملف برنامج حسابات البيع بالأجل والنقد الاصدار الاول لكل الاخوه في هذا المنتدى العملاق الذي تعلمت منه الكثير واليوم اهدي هذا العمل المتواضع وهو برنامج حسابات البيع بالأجل والنقد الاصدار الاول وهذا العمل مقارنة بأعمال عباقرة المنتدى نقطة في بحر منهم . شكر خاص للأستاذ الصقر. تحياتي محمد علي الطيب الرقم السري 123 صاحب الملف محمد علي الطيب تمت الاضافه 20 ديس, 2015 الاقسام قسم الإكسيل
    2 points
  4. تفضل اخي م/ ياسر لمسة صغيرة مني لاكمال المتصفح واحب ابشرك اخي عبد العزيز ان ما نراه الان هو 1/مليون من العالم الخيالي الجاي افضل ان شاء الله :) Internet Browser 1.rar
    2 points
  5. السّلام عليكم و رحمة الله و بركاته هديّة متواضعة ..مني إليكم .. لعل و عسى تنال إعجابكم .. للتكبير و التصغير بحجم الفورم ..إذهبْ طَوّالِي للرقم 20000 داخل الكود و قم بالتغيير دون المساس بجزء آخر فائق إحتراماتي الشاشة.rar
    2 points
  6. أخى ومعلمى القدير / ياسر العربى من عنيا أخى وحبيبى الغالى / عبد العزيز إنت تأمر الأكواد المستخدمة الكود الأول يوضع فى CommandButton1 Private Sub Command1_Click() text1.text="اكتب هنا ما تريد" End Sub والكود الثانى يوضع فى CommandButton2 Private Sub Command2_Click() Msgbox"أكتب ما تريد" End Sub والكود الثالث يوضع فى CommandButton3 Private Sub Command3_Click() End End Sub تقبلوا خالص تحياتى وتقديرى
    2 points
  7. الكود هو Set sa = Sheets("1") Set sh = Sheets("2") sh.Cells(2, 2) = sa.Cells(2, 2) sh.Cells(2, 3) = sa.Cells(2, 3) sh.Cells(2, 4) = sa.Cells(2, 4) sh.Cells(2, 5) = sa.Cells(2, 5) sh.Activate لم تغير شيء فيه كما هو الصح كالتالي Sub dd() Set Sa = Sheets("1") Set sh = Sheets("2") With Sa .Cells(2, 2).Copy sh.Cells(2, 2) .Cells(2, 3).Copy sh.Cells(2, 3) .Cells(2, 4).Copy sh.Cells(2, 4) .Cells(2, 5).Copy sh.Cells(2, 5) End With sh.Activate End Sub او هكذا كإختصار الاسطر Sub dd() Set Sa = Sheets("1") Set sh = Sheets("2") With Sa Union(.Cells(2, 2), .Cells(2, 3), .Cells(2, 4), .Cells(2, 5)).Copy sh.Cells(2, 2) End With sh.Activate End Sub تحياتي
    2 points
  8. تفضلو هدية اللمسات الجمالية وبلغوني رأيكم المهم تحملو الاداة من هنا اذا لم تجدوها ابحثو عنها Browse هتلاقوها في الهدية اللي بعتها اسمها actskin4.ocx هتظهر مثل الصورة والتوضيح بالمرفق لو عجبتكو الفكره ابعت ليكو مجموعه skin تقبلوا تحياتي هدية.rar
    2 points
  9. اخى الحبيب ضع هذه المعادله فى الخليه B2 ثم اسحبها بتجاه اليسار الى العمود O ثم اسحبها الى اسفل الى ما تريد من عدد الصفوف مرفق ملف تقبل تحياتى magid.zip
    2 points
  10. Private Sub Timer2_Timer() 'Label2 = Format(Now, "dddd yyyy/mm/dd") Label2 = Format(Now, "dddd dd/mm/yyyy") End Sub السّلام عليكم و رحمة الله و بركاته ماشاء الله تبارك الله أستاذي القدير " محمد حسن المحمد " لك لمسات فنيّة رائعة واصل المشوار معنا و لا تتركنا وحدنا وفّقك الله للتدرّب أكثر قمت بتغيير طفيف ليظهر التاريخ بتنسيق عربي من اليمين إلى اليسار فائق إحتراماتي السّلام عليكم و رحمة الله و بركاته أستاذنا القدير " ياسر العربي " بارك الله فيك و جزاك الله خيرًا و زادك من علمه و فضله و جعل كل حرف ممّا تقدّمه و تبذله بألف حسنة رأيي أن نكمل المشوار على بركة الله بدأنا المسيرة و أنتَ قائدنا .. أتمنى و أدعو الله ألاّ تتركنا في بداية الطريق لا تقلق على الاكسل أبدًا .. فلنا عيْنٌ في القدسْ و أخرى في نابلسْ فائق إحتراماتي
    2 points
  11. السلام عليكم ورحمة الله وبركاته إخوتي الكرام أستاذي الكريم ياسر العربي أشكركم على جهودكم المبذولة قمت بإنشاء ملف يحتوي على نموذجين(2فورم) الأول: يحتوي على الوقت والتاريخ تلقائي بمجرد فتحه وعلى كومبوبوكس يفتح الفورم الثاني. الثاني: يحتوي على رسالة شكر ومحبة لكم. للأسف اكتفيت بالصورة لأن كمبيوتر البيت بآخر أيامه يكاد يلفظ أنفاسه اﻷخيرة بسبب اﻷولاد الصغار. تقبلوا تحياتي العطرة.. والسلام عليكم. تحية لأوفيسنا.rar
    2 points
  12. السلام عليكم ورحمة الله وبركاته في احد البرامج التي اشتغلت عليها ، كان المطلوب احد الاشياء التالية مثلا: مدة الخدمة ، من تاريخ التوظيف الى اليوم ، إضافة خدمة (سنوات/اشهر/ايام) الى تاريخ التوظيف ، خصم مدة (سنوات/اشهر/ايام) من تاريخ التوظيف ، فبدل الحساب اليدوي ، عملت نموذج لآلة حاسبة ، للتواريخ النموذج frm_Date_Diff : حساب الفرق بين تاريخين: 1. ادخل التاريخ الاكبر في الحقل 1 ، وعند تغيير التاريخ سنرى الفرق بين التاريخين في الحقول سنة/شهر/يوم ، 2. ادخل التاريخ الاصغر في الحقل 2 ، وعند تغيير التاريخ سنرى الفرق بين التاريخين في الحقول سنة/شهر/يوم ، وعند النقر المزدوج على 1 او 2 ، فان القيم سيتم حفظها في الحقول 11 و 22 مؤقتا ، بحيث تستطيع ان تقوم بعمليات اخرى وتغيير التواريخ ، بينما تحتفظ بأصل التواريخ في 11 و 22 ، إضافة / طرح (سنوات / اشهر / ايام) من تاريخ: 1. احذف التاريخ من الحقل 2 ، 2. ادخل سنة/شهر/يوم الى الخانات 3 و4 و5 ، 3. حسب الحاجة ، اختر 6 لإضافة السنة/شهر/يوم الى التاريخ الاول ، وسترى النتيجة في الحقل 2 ، 4. حسب الحاجة ، اختر 7 لطرح السنة/شهر/يوم من التاريخ الاول ، وسترى النتيجة في الحقل 2 ، وعند النقر المزدوج على 3 او 4 او 5 ، فان القيم سيتم حفظها في الحقول 543 مؤقتا ، بحيث تستطيع ان تقوم بعمليات اخرى وتغيير السنوات/الاشهر/الايام ، بينما تحتفظ بالاصل في 3 و4 و5 وهنا مثال متحرك: جعفر 301.Dates_Calculations.mdb.zip
    1 point
  13. الساده / أعضاء المنتدى المحترمين سلام الله عليكم جميعا ورحمته وبركاته قمت بعمل تجميع لعديد من النماذج الخاصة بالتفقيط سواء كانت بالمعادلات أو بالأكواد وقد قمت بتجميعها من خلال البحث فى المنتدى فسامحونى إن كنت نسيت نموذج لأحد الأساتذه الأعضاء نتمنى من الله عز وجل أن ينتفع بها الجميع تلك النماذج القيمه هى مجهود للساده الأعضاء بارك الله فيهم وزادهم الله من فضله وجزاهم رب العالمين عنا خير الجزاء ونماذج قاموا بتنفيذها بناء على طلبات من الساده الأعضاء وتقبلوا منى وافر الإحترام والتقدير أخيكم فى الله محمود الشريف وإليكم النماذج نموذج للأستاذ / ابراهيم ابو ليله _ بالمعادلات http://www.officena.net/ib/index.php?showtopic=50183#entry307279 نموذج للأستاذ / عبد الله باقشير _ بالكود http://www.officena.net/ib/index.php?showtopic=39447#entry219034 نموذج للأستاذ / عبد الله باقشير _ بالكود مع امكانية تفقيط الكسر http://www.officena.net/ib/index.php?showtopic=39447&page=2#entry219292 نموذج للأستاذ / hrashad _ بالمعادلات التفقيط بالعربية والإنجليزية http://www.officena.net/ib/index.php?showtopic=40054#entry224441 رابط آخر لنفس النموذج http://www.officena.net/ib/index.php?showtopic=40054#entry224516 نموذج للأستاذ / A_ALOMANI _ بالأكواد ( التفقيط بالهلله ) http://www.officena.net/ib/index.php?showtopic=30414#entry251870 نموذج للأستاذ / محمدى عبد السميع _ بالأكواد تفقيط درجات الطلاب تفقيط العملات تفقيط الأصناف http://www.officena.net/ib/index.php?showtopic=41743#entry237240 نموذج للأستاذ / محمدى عبد السميع _ بالأكواد يصلح لكثير من الأعمال ( تفقيط درجات وعملات ) http://www.officena.net/ib/index.php?showtopic=41743#entry237241 نموذج للأستاذ / خالد _ معادلات تصلح لأكسيل 2010 مع شرح لها http://www.officena.net/ib/index.php?showtopic=42069#entry299427 نموذج للأستاذ / ابراهيم ابو ليله عده معادلات وأكواد مع الشرح http://www.officena.net/ib/index.php?showtopic=42215#entry241303 وهذا رابط الشرح http://www.officena.net/ib/index.php?showtopic=42215#entry241306 نموذج للأستاذ / mosaline شرح لتنصيب كود تفقيط يكون دائما بملف الأكسيل أو بالأدق ببرنامج الأكسيل داخل الجهاز مع الكود http://www.officena.net/ib/index.php?showtopic=45879#entry271888 نموذج للأستاذ / hat شرح وتنصيب لكود تفقيط http://www.officena.net/ib/index.php?showtopic=45879#entry273104 نموذج للأستاذ / أبو القبطان _ بالمعادلات _ باللغة الإنجليزية http://www.officena.net/ib/index.php?showtopic=30396#entry152131 نموذج للأستاذ / محمد صالح _ بالمعادلات _ باللغة العربية http://www.officena.net/ib/index.php?showtopic=30396#entry152373 كود للتفقيط بالإنجليزية أرفقة الأستاذ / يحى حسين http://www.officena.net/ib/index.php?showtopic=27127#entry130442 نموذج للاستاذ / نزار سليمان كود التفقيط بالإنجليزية والريال بالإنجليزية http://www.officena.net/ib/index.php?showtopic=27127#entry130464 نموذج للأستاذ / amoudi _ بالمعادلات http://www.officena.net/ib/index.php?showtopic=27127#entry130966 نموذج للأستاذ / يحي حسين _ بالمعادلات http://www.officena.net/ib/index.php?showtopic=27127#entry130968 نموذج للأستاذ / عبد الله باقشير قام بإرفاقه الأستاذ / نزار سليمان http://www.officena.net/ib/index.php?showtopic=27127#entry131252 نموذج للأستاذ / الشهابى _ بالكود تفقيط بالدينار والدرهم http://www.officena.net/ib/index.php?showtopic=41586#entry236035 نموذج للاستاذ / أبو غريب _ معادلات http://www.officena.net/ib/index.php?showtopic=40562#entry228268 نموذج للأستاذ / بن عليه حاجى دمج بين المعادلات والأكواد لتفقيط الرقم السالب أى مثل ( -50) سالب خمسين http://www.officena.net/ib/index.php?showtopic=48014#entry290505 نموذج للأستاذ / مصطفى كمال كود للتفقيط بالدينار الكويتى http://www.officena.net/ib/index.php?showtopic=34584#entry202194 نموذج للأستاذ / محمود على محمود _ بالكود http://www.officena.net/ib/index.php?showtopic=34584#entry202194 نموذج للأستاذ / يحي حسين _ بالمعادلات http://www.officena.net/ib/index.php?showtopic=46925#entry281963
    1 point
  14. السلام عليكم ورحمة الله وبركاته إخواني الكرام ... ارتأيت أن موضوع المصفوفات بات من الأهمية بمكان بحيث لا يجب أن ننساه لما له من أهمية كبيرة في التعامل مع الأكواد بسرعة كبيرة جداً وخصوصاً في حالة التعامل مع كم هائل من البيانات .. فقررت أن أشارككم بما تقع عليه يدي من أكواد فيما يخص المصفوفات لنتعلم ونرتقي سوياً .. سأتناول كود بسيط بالتفصيل لنعرف ما هية المصفوفات وكيفية التعامل معها بشكل جيد الكود عبارة عن عمل حلقة تكرارية لعناصر المصفوفة من أول عنصر لآخر عنصر .. وإظهار العناصر في رسالة أو وضعها في نطاق أو التعامل معها كما تريد نبدأ بالكود بالكامل ثم نتناوله بالتفصيل Sub LoopInArray() Dim myArray As Variant Dim X As Integer myArray = Array("Yasser", "Khalil", "Officena", "Forum") For X = LBound(myArray) To UBound(myArray) MsgBox (myArray(X)) Next X End Sub السطر الأول هو بداية الإجراء الفرعي ويبدأ بكلمة Sub كما تعودنا يليه اسم الإجراء الفرعي ويفضل تسميته باسم يعبر عن الهدف من الكود ...قمت بتسميته LoopInArray حيث أننا سنتعامل بالحلقات التكرارية داخل عناصر المصفوفة .. وطبعاً لكل شيء بدأته لازم تقفله ..وقفلة الـ Sub بتكون بكلمة End Sub في نهاية الكود بالطبع السطر الثاني الإعلان عن متغير myArray وهو متغير للمصفوفة التي سنتعامل معها وقمت بتسميتها باسم مناسب وليس أي اسم (أفضل دائماً أن تكون أسماء المتغيرات معبرة عن المتغير والهدف منه ونوعه ..) السطر الثالث هو إعلان عن متغير من النوع Integer ووظيفة هذا المتغير أنه بمثابة عداد ..إذ أن من يعرف الحلقات التكرارية يعرف أنه لعمل حلقة تكرارية يستلزم أن يكون هناك عداد لهذه الحلقة التكرارية .. وقيمة المتغير X ستتغير مع كل حلقة .. أقصد أنه في أول لفة ستكون قيمة المتغير تساوي رقم البداية (فإذا كان رقم البداية 1 فإن المتغير يساوي 1) وفي اللفة الثانية تزداد قيمة المتغير بمقدار 1 ليصبح على سبيل المثال 2 وفي اللفة الثالثة يساوي 3 وفي اللفة الرابعة ..كمل إنت !! انتهينا من الأسطر التقليدية (تسمية الإجراء والإعلان عن المتغيرات) ... نتوقف قليلاً لللتجربة !! ماذا سنجرب يا ترى ؟ هل هناك ما يستدعي منا أن نجربه ونحن ما زلنا في البداية ولم نكتب أسطر فعلية للكود .. نعم لابد أن نتعلم شيئاً جديداً ومفيداً عند التعامل مع الأكواد ...... تطبيق : انسخ الكود السابق في موديول جديد ثم ضع الماوس داخل الإجراء الفرعي .. ومن قائمة View في محرر الأكواد اختر الأمر Local Window إنها نافذة ستجعل منك محترفاً في فهم الأكواد (صدقوني ستذهلون منها بشكل كبير جداً) ..إنها بمثابة نافذة لك لتدرك كيف يتم تنفيذ أسطر الكود سطر سطر انتبهوا لهذه النافذة بشكل كبير ... كيف سيتم التعامل مع هذه النافذة المدهشة ؟ الأمر في غاية اليسر والسهولة والبساطة .. ستستخدم من لوحة المفاتيح F8 وهو يمكنك من متابعة الكود سطر بسطر .. كفانا كلام نظري وننتقل للتطبيق .. ضع الماوس داخل الإجراء الفرعي (الكود) ثم اضغط F8 مرة واحدة فقط .. وانظر للنافذة التي كانت فارغة منذ قليل لقد أصبحت ثرية .. نعم ثرية .. بضغطة واحدة ستتمكن الآن من تحليل المتغيرات .. لقد تم وضع سطر باللون الأصفر على أول سطر بالكود كما تم وضع المتغيرات في النافذة بهذا الشكل في الناحية اليسار من النافذة توجد أسماء المتغيرات التي تم الإعلان عنها وفي العمود الأوسط قيمة المتغير ..فقيمة المتغير الأول Empty ما زالت المصفوفة فارغة لم يتم إضافة أي عنصر لها ، وقيمة المتغير الثاني لأنها من النوع Interger فتحمل القيمة صفر لأننا لم نضع قيمة لها بعد وفي العمود الثالث نوع المتغير فالمتغير الأول من النوع Variant وهذا النوع غالباً ما نستخدمه مع المصفوفة لأن المصفوفة مرنة ربما تحمل نصوص وربما أرقام وربما حتى نطاقات (موضوع يطول شرحه) إلى الخطوة الثانية والتي هي نفس الخطوة الأولى (حد يفكرني !!) محدش مركز !! ... الخطوة التانية اضغط F8 مرة تانية .. ماذا حدث ؟ لقد تجاوز السطر الأصفر أسطر الإعلان عن المتغيرات .. نعم لأنها أسطر غير قابلة للتنفيذ إنما تظهر المعلومات المرتبطة بهذه المتغيرات مع أول ضغطة على F8 بعد السطر الأول في الكود .. انتقل السطر الأصفر ليظلل السطر التالي .. ولم يحدث أي تغيير في نافذة الـ Local Window myArray = Array("Yasser", "Khalil", "Officena", "Forum") هل التنفيذ مرتبط بالسطر الأصفر ؟ نعم يتم تنفيذ السطر الملون بالأصفر بعد الخروج من السطر الأصفر وليس عند تظليل السطر الأصفر الخطوة الثالثة .. ماذا تتوقع أن يحدث بعد أن نضغط F8 للمرة الثالثة؟؟؟ فكر ثواني عشان تفهم اللعبة .. سيتم تنفيذ السطر الأصفر السطر الحالي عبارة عن تعيين قيم أو وضع عناصر للمصفوفة .. لدينا بعض الأسماء (وبما أن الأسماء نصوص فتم وضعها بين أقواس تنصيص) وهذه الأسماء سيتم وضعها داخل المتغير الذي قررنا أنه سيكون للمصفوفة انتبه انتبه ..لم أطلب منك أن تبدأ الخطوة الثالثة بعد ..!! فقط انظر لنافذة الـ Local Window على المتغير myArray وشوف القيمة هتلاقيها Empty أي أن المصفوفة فارغة (وكما بص على يسار اسم المتغير ..هل يوجد علامة زائد بجانب اسم المتغير myArray ؟؟ الإجابة لا يوجد) ابدأ تنفيذ الخطوة الثالثة ألا وهي نفس الخطوة الأولى ونفس الخطوة الثانية ..حد يفكرني !! محدش مركز .. اضغط F8 بردو (أنا مش عايز أتعبك أنا عايز تشوف وتتعلم وبعديها خلي دماغك يتكلم) ضغطت يا وائل ولا لسه على F8 ؟؟؟ تمام تمام الله ينور عليك ايه اللي حصل يا حوسو .. لما نحب نعرف ايه اللي حصل هنبص على الكود وعلى النافذة .. نبص الأول على الكود هنلاقي إنه تم الانتقال للسطر التالي وأصبح السطر التالي مظلل باللون الأصفر .. طيب الأهم إننا نبص على النافذة Local ونشوف المتغير myArray هنلاقي حاجة غريبة بتحصل .. حاجة بسيطة لكن مهمة المصفوفة اللي كانت فارغة Empty من شوية ومفيش علامة زائد جنبها .. أصبح فيه علامة زائد على يسار اسم المتغير ولما نبص في عمود القيمة هنلاقي كلمة Empty أصبحت مش موجودة .. دا لأنها بعد الانتقال من السطر اللي فات بقت المصفوفة فيها قيم .. نبص للعمود الثالث هنلاقي بردو فيه شيء اتغير ..نوع المتغير لم يتغير زي ما هو Variant بس فيه شيء إضافي .. هتلاقي ما بين قوسين بداية المصفوفة ونهاية المصفوفة بمعنى آخر المصفوفة اللي بنتعامل معاها دلوقتي فيها 4 قيم .. ولما نبص نلاقي الأرقام من 0 إلى 3 (افتراضي المصفوفة بتبدأ من الرقم 0 وليس الرقم 1 ) الأرقام دي عبارة عن فهرس للمصفوفة (زي فهرس كتاب) يعني مثلاً أول قيمة في المصفوفة اللي هي Yasser لها الرقم 0 في الفهرس .. والقيمة Khalil ليها رقم 1 وهكذا لنهاية القيم كل عنصر داخل المصفوفة ليها رقم في الفهرس .. عايز تتأكد من كلامي تعال على نفسك شوية ونتعب ونضغط علامة الزائد اللي على يسار اسم المتغير (خلي الصورة تتكلم شوية عشان أنا تعبت) زي ما إحنا شايفين الفهرس من 0 1 2 3 وكل عنصر له رقم في الفهرس وله قيمة يعني دلوقتي لو عايز أعرف تاني قيمة في المصفوفة هعمل ايه؟ ببساطة ممكن استخدم كلمة Msgbox ثم اسم المصفوفة ثم افتح قوس ثم أضع رقم القيمة المطلوبة ثم اقفل القوس MsgBox myArray(1) واحد يقولي إنت مش بتجيب تاني عنصر في المصفوفة ..طيب ليه كتبت واحد مش 2 (أقوله لأن المصفوفة بتبدأ من الصفر وليس من الواحد ..) فالواحد بمثابة 2 (عد من البداية ::: رقم صفر هو أول عنصر في المصفوفة .. رقم 1 هو ثاني عنصر في المصفوفة وهكذا) المهم عشان أنا بدأت أتوه من نفسي ننتقل للحلقة التكرارية ودي بيكون ليها عداد زي ما قلنا والعداد هنا X فبنقول For X وبعديها علامة يساوي ... بعد يساوي بداية الحلقة التكرارية يليها كلمة To ثم نهاية الحلقة التكرارية بداية الحلقة هتكون أول رقم فهرس في المصفوفة اللي هو في مثالنا يساوي صفر ، ونهاية الحلقة التكرارية هو آخر رقم في الفهرس اللي هو 3 وبدل ما نكتب من 0 إلى 3 (استخدمنا دالة بتجيب أول رقم في المصفوفة واسمها LBound ودي اختصار لكلمة Lower Bound أي الحد السفلي أي أول رقم في الفهرس ... وأيضاً بالمثل استخدمنا دالة عشان تجيب آخر رقم في المصفوفة والدالة هي UBound ودي اختصار لكلمة Upper Bound أي آخر رقم في الفهرس) طيب العداد لازمته ايه ؟؟ قلنا بيحمل القيمة الحالية ..فأول قيمة عندي هتكون صفر بالتالي قيمة X هتساوي صفر .. إحنا دلوقتي واقفين في السطر الملون باللون الأصفر مع بداية الحلقة التكرارية لو وقفنا بالماوس على كلمة X سيظهر تليح صغير في مستطيل أصفر صغير به قيمة المتغير ( في الصورة قيمة X تساوي صفر) وهو أول رقم في الحلقة التكرارية لأن رقم البداية صفر (والمتغير X يحمل قيمة أول رقم في بداية الحلقة) المهم اضغط F8 لتنتقل للسطر التالي وعايز تروح بالماوس وتقف على الكلمة دي myArray(X) هتلاقي مربع أصفر فيه القيمة Yasser وروح للـ X وقف عليها ستجد القيمة صفر أي أن المصفوفة المسماة myArray ثم نفتح قوس ونضع رقم الفهرس المطلوب ورقم الفهرس هنا هو صفر ..يحمل القيمة Yasser اضغط F8 لتظهر لك رسالة بقيمة أول عنصر في المصفوفة .. اضغط F8 مرة أخرى لتنتقل للفة الثانية في الحلقة .. ولاحظ أن الانتقال بعد ذلك سيكون ما بين السطرين MsgBox (myArray(X)) Next X القيمة X تتغير ويتغير معها القيمة التي تظهر في الرسالة .. أكمل الضغط على F8 لترى نتائج الكود بنفسك ... وعينك دائماً على نافذة Local لترى قيمة المتغير X وهي تتغير مع كل لفة وطبعاً عند وصول قيمة X لـ 3 تنتهي الحلقة التكرارية لأن نهاية الحلقة هو الرقم 3 أتمنى أن يكون الشرح واضح ومفيد للجميع مع تحياتي أخوكم ياسر خليل أبو البراء
    1 point
  15. ملف أكثر من الروعة أخي و أستاذي " ياسر فتحي البنا " بارك الله فيك و زادك من علمه و فضله يوم بعد يوم يزداد تمسكي بهذا العالم الخيالي البديع و المستوى الراقي الرّفيع فائق إعجاباتي
    1 point
  16. المشروع يا معلمى وقللى إيه رأيك Internet Browser 1.rar Internet Browser 1.rar Internet Browser 2.rar
    1 point
  17. حبيبى الغالى / ياسر العربى معزرة لعدم وصول معلومة حفظ المشروع كامل بالطريقة التى أرفقتها ولكن قرأت ردك بعد ان برمجت متصفح إنترنت وحفظته بنفس الطريقة السابقة سوف أعيد برمجته وأرفعة مرة أخرى بس قللى إيه رأيك ورأى أخويا عبد العزيز Internet Browser.rar أخى وحبيبى الغالى / عبد العزيز أكثر من رائع قنبلة فى عالم الفورم تقبل خالص تحياتى وتقديرى
    1 point
  18. ماشاء الله عليك أخوي رمهان ، مو طماع جعفر
    1 point
  19. استاذي الغالي رمهان بارك الله فيك بالنسبة للاستفسار الاول بخصوص تغيير الامتداد : للاسف لا يوجد خيارات هو فقط الامتداد accdc . ومشكور علي رايك الشخصي بخصوص التقسيم اليدوي . كل الشكر والتقدير
    1 point
  20. من اولها انفجار فورم الله ينور حبيبي طيب باذن الله نشوف الدرس المقبل التعامل مع الفورم تقبل تحياتي
    1 point
  21. السلام عليكم وانا كذلك لدي التصور البسيط عن الموضوع وهو خاصة على ما اعتقد بالشهادات الرقمية وهو احد اوجه الحماية وموافقة التطبيق لمستخدمه ! ولكن اليس لك المقدرة اخ وائل بتعديل امتداد الملف الى accdb ! وبعدين صدقني ماعمري استخدمت المعالج في تطبيق عملي ! نضع القاعدة بعيدا ثم نربط الجداول في المقدمة ويدويا ! تحياتي
    1 point
  22. اخي عبد العزيز تفضل واي اداة تعمل معاك نفس الكلام دا تتحط في السيستم ويتم تسجيلها مثل هذه تسجيل الادوات فتح كمسئول.rar
    1 point
  23. أهلا بك أستاذ عصام فى أوفيسنا . جرب الكود التالى Sub WorksheetSizes() Dim C As Range, Sh As Worksheet Dim Wb As String, Temp As String, sReport As String Application.ScreenUpdating = False Application.DisplayAlerts = False sReport = "حجم الأوراق" Wb = "mokhtar.xlsx" Temp = ThisWorkbook.Path & Application.PathSeparator & Wb On Error Resume Next Set Sh = Worksheets(sReport) If Sh Is Nothing Then With ThisWorkbook.Worksheets.Add(Before:=Worksheets(1)) .Name = sReport .Range("A1").Value = "اسم الشيت" .Range("B1").Value = "الحجم بالبايت تقريباً" End With End If On Error GoTo 0 With ThisWorkbook.Worksheets(sReport) .Select .Range("A1").CurrentRegion.Offset(1, 0).ClearContents Set C = .Range("A2") End With For Each Sh In ActiveWorkbook.Worksheets If Sh.Name <> sReport Then Sh.Copy ActiveWorkbook.SaveAs Temp ActiveWorkbook.Close SaveChanges:=False C.Offset(0, 0).Value = Sh.Name C.Offset(0, 1).Value = FileLen(Temp) Set C = C.Offset(1, 0) Kill Temp End If Next Sh Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
    1 point
  24. وعليكم السلام.. ابدء أخي ببناء الجداول على أكسس ليطبق ما تريد مع توضيح أكثر هل تقصد نفس السطر أي نفس الصف كما بالمرفق؟
    1 point
  25. تفضل اخى الكريم جرب الملف المرفق ان شاء الله ينال اعجابك انت خليت دماغى تلف تقبل تحياتى اختيار عشوائى.zip
    1 point
  26. تفضل اخى الكريم الملف المرفق به طلبك وبعد اذن حضرتك فيما بعد ترفق ملف من عندك وتوضح به ما تريد بالتفصيل شاهد المرفق تم عمل تنسيق شرطى لخلايا العمود A بالمعادله التاليه =IF(B1="pcm";TRUE;FALSE) تقبل تحياتى تظليل.zip
    1 point
  27. استاذنا وحبيبنا جعفر هدية قيمة ورائعة ، وتكثر الحاجة اليها جزاك الله خيرا , ورزقك من حيث لا تحتسب
    1 point
  28. السلام عليكم ورحمة الله وبركاته أخي الحبيب عبد العزيز شكراً جزيلاً هذا من لطفك وحسن أدبك ...وطيب كلامك أما من ناحية التاريخ فإنني أن يظهر عندي كما يلي: الأحد 2015/12/20 أي من اليمين إلى اليسار وقد جربت كلتا الحالتين فقدمت الأولى. تقبل تحياتي وشكراً لمتابعتك وتشجيعك فأنت أخ حبيب قريب من القلب ..وأرجو أن يكون شأنك عظيماً في أمتنا التي نحاول استنهاض مكانتها الرفيعة والسلام عليكم.
    1 point
  29. اخى الحبيب جرب المرفق انا عملت لك فكره افضل بدون ازرار عملت لك فى الخليه c3 قائمة منسدله بها كل المواد عند اختيارك من القائمه ستجد تم اخفاء كل الاعمده ما عدا الماده التى تم اختياره بالقائمه هى فقط ظاهره واذا اردت اظهار كل الاعمده للمواد امسح محتوى الخليه c3 ( القائمه المنسدله) اجعلها فارغه ارجوا ان يكون الحل مناسب لك تقبل تحياتى اخفاء اعمدة.zip
    1 point
  30. بسم الله ما شاء الله عليكم الاخ الغالي م/ ياسر الاخ الغالي / عبد العزيز الاخ الغالي / ابو يوسف الله ينور عليكم بجد انتو كدا عديتو الشرح بكتير هاا يجماعه لما اخلص مبادئ الفيجوال وبداياته نربط الاكسيل ولا نستمتع بجمال البرمجة قليلا ؟؟؟؟ لانه طريق لو مشيتوا فيه هننسى الاكسيل شوية لان الاكسيل لا يمثل في البرنامج غير1% او اقل بكثير واخواتنا في قسم الاكسيس يحتاجوا ربط الفيجوال واعتماد الاكسيس كقاعدة بيانات اكثر مننا في الاكسيل ويكون اكثر احترافيه ايضا فماذا تقترحوا على اكمل مسيرة الفيجوال قليلا ام نحول المسار بعد الالمام بالبدايات وكان من الافضل عمل قسم للغات البرمجة مستقل حتى ناخد راحتنا
    1 point
  31. اولا انا طالب علم مش استاذ يعنى اسمى محمد ثانيا الشكر لله سبحانه وتعالى اولا ثم بعد ذلك لكل اسااتذتنا الكرام فى هذا الصرح الشامخ وممتاز كويس التطبيق لكن ممكن اقول لك على حاجه جرب فى الكمبوبوكس بتاع الاسم اكتب اى اسم غلط وشوف الرساله اللى تطلع وجرب كده تكتب رقم جلوس غلط فى الكمبوبوكس بتاع رقم الجلوس وشوف الفرق
    1 point
  32. السّلام عليكم و رحمة الله و بركاته ألف شكر أستاذنا القدير " محمد حسن المحمد " على الالتفاتة الطيّبة بارك الله فيك جزاك الله خيرًا و زادك من علمه و فضله فعلاً افتقدنا كثيرًا أستاذنا الفاضل " ياسر خليل أبو البراء " بصراحة كنت سأسأل عنه العديد من المرّات لكن بموضوع ما .. هناك من طمأننا بأنّ المشكلة في انقطاع النت بالمنطقة التي يتواجد بها .. فاستبشرت .. و حمدت الله أن مانع ظهوره خيرًا فائق إحتراماتي
    1 point
  33. حياك الله استاذ محمد ! طبعا اكيد انت لم تركز هنا : فطبعا انت وضعت السطر عند الفتح للنموذج وهو المفروض خلف زر الامر فقط ولم يعد هناك كود عند الفتح للنموذج "التحقق من الاقامات" تحياتي واشواقي
    1 point
  34. السلام عليكم أخي كريمو كنت اعتقد بأني جربت المرفق وكان يعمل بطريقة صحيحة ، ولكن الظاهر اني كنت مخطئ ، فاعتذر منك الان وبعد التعديل ، جربته ، والظاهر انه يعمل كما يجب ، ان شاء الله الان حين تضغط على الزر "معاينة التحويل" ، فالكود يبحث عن التاريخ (شهر - سنة) الذي في النموذج ، يبحث عنه في الجدول CCP ، فاذا وجده ، فيعطيك الخيار في تحديث رقم الحساب (اي انه لن يغير القيمة) ، واذا لم يجد التاريخ في الجدول ، فيعطيك الخيار في ادخال سجل جديد جعفر 288.krimo2015V2.mdb.zip
    1 point
  35. بصراحه يااستاذ زيزو العجوز انتا والاستاذ احمد السيد الله يباركلكم في اولادكم وفي صحتكم وفي من احببتو وانا والله اكل مابفتح البرنامج بادعو الى كل من ساهم وساعدنى فى هذا البرنامج وبدعى له ولاولاده وكل من احب وانا طورت بشكل كبير جداً في البرنامج والفضل لله عزوجل ثم لكم وانا عند وعدى بالدعاء كل ماهفتح البرنامج لكم ولاولادكم ولمن احببتو واتمنى ان اكون صديق معكم في هذا الجروب
    1 point
  36. السلام عليكم أستاذ الظاهر ان موقع النور فيه نوع آخر من ملفات الاكسل ، والذي بشمل علامات لغتي الخالدة فقط ، عليه ، اليك طريقة استيرادهم ، بنفس الطريقة القديمة ، ولكن لجدول خاص به النموذج يطلب منك اختيار نوع ملف الاكسل ، والباقي يقوم الكود به . وهذا كود الاستيراد (طبعا هناك مجموعة من الاستعلامات في البرنامج): Option Compare Database Private Sub Browse_Click() Dim fpath As Variant With Application.FileDialog(3) .Title = "Choose File" .Filters.Clear .Filters.Add "Excel Files", "*.xls ; *.xlsx" '.Filters.Add "Excel Files", "*.csv" .AllowMultiSelect = False .InitialFileName = "" If .Show = -1 Then Me.txtPath = .SelectedItems(1) End If End With Exit Sub End Sub Private Sub ImportData_Click() If Me.frm_Which_Type = 0 Then 'the user didn't choose anything, let him know MsgBox "رجاء اختيار اي نوع من الملفات تريد ان تستورد" & vbCrLf & "Please Select an option" Exit Sub ElseIf Len(Me.txtPath & "") = 0 Then 'don't leave the path empty MsgBox "رجاء اختيار ملف الاكسل" & vbCrLf & "Please select an Excel file" Exit Sub End If '1 'Empty Table Degrees and tbl_Sheets ' CurrentDb.Execute ("Delete * From Degrees") ' CurrentDb.Execute ("Delete * From tbl_Sheets") '2 'import Sheets Dim blnHasFieldNames As Boolean, blnEXCEL As Boolean, blnReadOnly As Boolean Dim lngCount As Long Dim objExcel As Object, objWorkbook As Object Dim colWorksheets As Collection Dim strPathFile As String, strTable As String Dim strPassword As String ' Establish an EXCEL application object On Error Resume Next Set objExcel = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set objExcel = CreateObject("Excel.Application") blnEXCEL = True End If Err.Clear On Error GoTo 0 ' Change this next line to True if the first row in EXCEL worksheet ' has field names blnHasFieldNames = False ' Replace C:\Filename.xls with the actual path and filename strPathFile = Me.txtPath ' "C:\Filename.xls" ' Replace tablename with the real name of the table into which ' the data are to be imported strTable = "tbl_Sheets" '"tablename" ' Replace passwordtext with the real password; ' if there is no password, replace it with vbNullString constant ' (e.g., strPassword = vbNullString) strPassword = vbNullString '"passwordtext" blnReadOnly = True ' open EXCEL file in read-only mode ' Open the EXCEL file and read the worksheet names into a collection Set colWorksheets = New Collection Set objWorkbook = objExcel.Workbooks.Open(strPathFile, , blnReadOnly, , strPassword) For lngCount = 1 To objWorkbook.Worksheets.Count colWorksheets.Add objWorkbook.Worksheets(lngCount).Name Next lngCount ' Close the EXCEL file without saving the file, and clean up the EXCEL objects objWorkbook.Close False Set objWorkbook = Nothing If blnEXCEL = True Then objExcel.Quit Set objExcel = Nothing ' Import the data from each worksheet into the table For lngCount = colWorksheets.Count To 1 Step -1 'If lngCount <> 9 And lngCount <> 8 Then GoTo Next_lngCount '3 'Empty Table Degrees and tbl_Sheets 'j'CurrentDb.Execute ("Delete * From tbl_Sheets") CurrentDb.Execute ("Delete * From " & strTable) '-- '4 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ strTable, strPathFile, blnHasFieldNames, colWorksheets(lngCount) & "$" '-- '5 If Me.frm_Which_Type = 2 Then 'the user choose Loqati ONLY add_Loqati = "_Loqati" Else add_Loqati = "" End If my_qry_Select = "qry_Select" & add_Loqati my_qry_Delete_Duplicate = "qry_Delete_Duplicate" & add_Loqati my_qry_Append = "qry_Append" & add_Loqati my_qry_Update_Sheet = "qry_Update_Sheet" & add_Loqati 'Delete Duplicate Dim rstQ As DAO.Recordset mySQL = "Select * From " & my_qry_Select Set rstQ = CurrentDb.OpenRecordset(mySQL) [F16] = rstQ![F16] [F8] = rstQ![F8] [F17] = rstQ![F17] [F29] = rstQ![F29] [F24] = rstQ![F24] rstQ.Close: Set rstQ = Nothing DoCmd.SetWarnings False DoCmd.OpenQuery my_qry_Delete_Duplicate DoCmd.SetWarnings True '------------- '6 'append the data DoCmd.SetWarnings False DoCmd.OpenQuery my_qry_Append DoCmd.SetWarnings True '------------- DoEvents Me.iSheet = colWorksheets.Count Me.iSheet2 = lngCount '------------- '7 'append the data DoCmd.SetWarnings False DoCmd.OpenQuery my_qry_Update_Sheet DoCmd.SetWarnings True '------------- '8 'empty tbl_Sheets CurrentDb.Execute ("Delete * From " & strTable) Next_lngCount: Next lngCount ' Delete the collection Set colWorksheets = Nothing MsgBox "Done" ' Uncomment out the next code step if you want to delete the ' EXCEL file after it's been imported ' Kill strPathFile End Sub جعفر 275.3.ImportDegrees.accdb.zip
    1 point
  37. الاخ الحبيب محمد على الطيب جزاكم الله خيرا على كل ما تقدم رجاء من حضرتك ترفق البرنامج فى منتدى الاكسيل تقبل تحياتى
    1 point
  38. اخي العزيز واحدة واحدة ناخد الامثلة والشرح رويدا رويدا حتى ياخذ كل جزء من الشرح مكانه في العقل والا تكون خناقة في راسك وصداع من الممكن ان تربط كمبوكس وليست بوكس وتكست بوكس مع بعضهما بدون قاعدة ولا شئ فقط ان كنت مستعجل شوف شروحات الفورم للاخ الصقر وطبق منها combo1 lممكن تضيف له بيانات عند فتح الفورم مثلا عن طريق additem ومثلها الليست واقعد قلب الادوات كدا مع نفسك حتى ياتي دورها واللي لم اخذ بالي منهم هم من لم يكن عندهم علم اساسا بلغة vba فبالتالي لن يعرفو الادوات والبدايات مما يجعلني اقوم بتوضيح اكتر مره اخرى وتاكيد المعلومات
    1 point
  39. السلام عليكم ورحمة الله اخى الحبيب اليك الحل مع ملاحظة توجد اعمدة مخفية على يسار الجدول جدول العمل.rar
    1 point
  40. السلام عليكم ورحمة الله أخي الكريم عيد مصطفى يمكنك تصحيح معادلتك في التنسيق الشرطي بحذف الرمز $ في المعادلات من أمام الحرف H في النطاق H$4:$H$88 ليصبح من الشكل H$4:H$88 وستعمل المعادلات بصفة صحيحة في جميع الأعمدة المعنية... والله أعلم أخوك بن علية السلام عليكم ورحمة الله أخي الكريم عيد مصطفى، إذا كنت تريد تحديد القيمة الصغرى في الأعمدة على أن تكون غير معدومة عليك بتغيير الجزئية (MIN(H$4:H$88 من معادلة التنسيق الشرطي الخاصة بأصغر قيمة بالجزئية ((MIN(IF(H$4:H$88<>0;H$4:H$88 بن علية حاجي
    1 point
  41. ما رايكم لو اختار المستخدم بنفسه النطاق الذي يسمح به بالكتابة Unprotect Only Choosen Range.zip
    1 point
  42. بارك الله فيك اخى الكريم بن علية نفس هذه المشكلة عندى تم حلها بهذا الملف العبقرى شكرا جزيلا لك
    1 point
  43. السلام عليكم المصفوفات الجداول تعريف مبسط : التعامل مع اكثر من قيمة واحدة تطبيقات عملية الدرس الاول : المصفوفات 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
  44. أستاذنا / عبد الله باقشير ما هذه الدرر الباقشيرية التي تنثرها علينا بارك الله فيك وزادك علماً ورفعةً جزاك الله خير على ما تقدمه من هذه الدرر الثمينة و إلى المزيد إن شاء الله تليمذكم / الشهابي
    1 point
  45. السلام عليكم ابا ادم الكود كان ينقصه الاسم Sub hosami() Dim rng As Range On Error Resume Next Set rng = Range([a1], Cells(Range("a65536").End(xlUp).Row, 1)) For i = 1 To rng.Rows.Count If rng.Cells(i, 1) <> rng.Cells(i - 1, 1) + 1 Then _ Range("b1000").End(xlUp).Offset(1, 0) = rng.Cells(i - 1, 1) + 1 Next i End Sub جربه الان
    1 point
  46. السلام عليكم ما شاء الله عليك اخي هشام فين مخبي الحلاوة دي ............. ومن بعد اذنك لتعدد الحلول هنا كود لمعرفة الارقام الناقصة Dim c As Range On Error Resume Next Set rng = Range([a2], Cells([a1000].End(xlUp).Row, 1)) For Each c In rng If c <> c.Offset(-1, 0) + 1 Then [b1000].End(xlUp).Offset(1, 0) = c - 1 Next c وهنا ايضا كود اخر Dim rng As Range On Error Resume Next Set rng = Range([a1], Cells(Range("a65536").End(xlUp).Row, 1)) For i = 1 To rng.Rows.Count If rng.Cells(i, 1) <> rng.Cells(i - 1, 1) + 1 Then _ Range("b1000").End(xlUp).Offset(1, 0) = rng.Cells(i - 1, 1) + 1 Next i
    1 point
  47. السلام عليكم ======== تفضل المرفق find series.rar
    1 point
  48. المجموعة الرابعة المجموعة الرابعة.rar
    1 point
  49. المجموعة الثانية المجموعة الثانية.rar
    1 point
×
×
  • اضف...

Important Information