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

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

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

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

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


    • نقاط

      15

    • Posts

      13,165


  2. عبدالله باقشير

    عبدالله باقشير

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


    • نقاط

      9

    • Posts

      4,796


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

    ياسر العربى

    الخبراء


    • نقاط

      9

    • Posts

      1,510


  4. ابوخليل

    ابوخليل

    أوفيسنا


    • نقاط

      5

    • Posts

      12,218


Popular Content

Showing content with the highest reputation on 24 فبر, 2016 in all areas

  1. ايه ياحبيبي ياغالي الموضوع مش مستاهل شراء وانت عارف كويس المصريين بيسلكوا دايما جرب المرفق دا وقولي رايك في منه كتير بس اللي يدور المكتبات دي موجودة من زمن BankCode.rar
    4 points
  2. السلام عليكم اعتقد مهم ان اعطيكم مثال على Me.Painting ، فالتوضيح في الرابط التالي يحتاج الى توضيح http://www.officena.net/ib/topic/67464-المساعدة-في-فتح-صورة-من-listbox/?do=findComment&comment=438833 النموذج Form1 ، كل ثانية ، اللون الاصفر ينزل الى الحقل التالي (اي بمعنى ان النموذج يجدد شكل النموذج باستمرار ، وعليه نرى الالوان تنتقل من حقل الى آخر): الكود: Function Change_Colors(F) Me(F).BackColor = RGB(225, 225, 0) 'yellow Me(F) = F DoEvents PauseTime = 1 ' Set duration. Start = Timer ' Set start time. Do While Timer < Start + PauseTime DoEvents ' Yield to other processes. Loop Me(F).BackColor = RGB(255, 255, 255) 'white Me(F) = "" End Function Private Sub cmd_Start_Coloring_Click() Call Change_Colors("q1") Call Change_Colors("q2") Call Change_Colors("q3") Call Change_Colors("q4") Call Change_Colors("q6") Call Change_Colors("q7") End Sub . والنتيجة: . اما النموذج Form2 ، فهو نسخة من النموذج السابق Form1 ، إلا اني طلبت في الكود ان: اللون الاصفر يلون الحقل الاول والثاني ، ثم اعطيت الامر بعدم تجديد شكل النموذج بالامر Me.Painting=False فاللون الاصفر ظل على الحقل الثاني للنموذج ، بينما الكود استمر في عمله في تلوين الحقل الثالث والرابع ، ولكن دون ان يُظهر لنا النتيجة على النموذج ، ثم اعطيت الامر Me.Painting=True ، فاللون الاصفر اختفى من الحقل الثاني ، وظهر لآخر حقلين ، والكود هو: Function Change_Colors(F) Me(F).BackColor = RGB(225, 225, 0) 'yellow Me(F) = F DoEvents PauseTime = 1 ' Set duration. Start = Timer ' Set start time. Do While Timer < Start + PauseTime DoEvents ' Yield to other processes. Loop Me(F).BackColor = RGB(255, 255, 255) 'white Me(F) = "" End Function Private Sub cmd_Start_Coloring_Click() Call Change_Colors("q1") Call Change_Colors("q2") Me.Painting = False Call Change_Colors("q3") Call Change_Colors("q4") Me.Painting = True Call Change_Colors("q6") Call Change_Colors("q7") End Sub . والنتيجة: . طيب ، ما الفائدة عمليا من هذا الكود؟ انا استخدمت هذا الامر مرات جدا قليلة في برامجي ، والبرنامج اعلاه (في تغيير اسم الملف) هو احدهم ، اما البرنامج الآخر فهو: برنامج فيه آلاف السجلات ، وهناك صور للسجلات ، فكنت اريد ان اعرض النموذج بطريقة معينة ، بحيث باختيار اسم الموظف تصل الى معلوماته ، ولكني اردت ان اسمح لهم ان يروا بقية السجلات ايضا ، فالاكسس كان يعرض اول سجل وصورة ، ثم ينتقل الى السجل المطلوب ، وانا لم ارد للمستخدم ان يرى اول سجل وصورته ، وانما اردته ان يرى سجل وصورة الموظف الذي تم اختياره ، فاستخدمت هذه الطريقة في اخفاء السجل الاول وصورته (بعدم تجديد الشاشة) ، وعندما حان موعد ظهور السجل المطلوب وصورته ، اعطيت الامر بإظهار وتجديد شاشة الاكسس ، والنتيجة كانت مرضية لي جعفر 297.Me.Paint.accdb.zip
    2 points
  3. السلام عليكم ورحمة الله وبركاته فورم إضافة وبحث وتعديل مرن (الاصدار الثالث) بمعية فورم لادخال التاريخ الجديد في هذا الاصدار 1 - امكانية اضافة التاريخ في تاكست الادخال بوضع مؤشر الفارة على التاكست والضغط عل الزر Calendar 2 - اضافة زر اختيار للبحث للتبديل بين البحث العام والبحث من بداية الكلمة 3 - اضافة زر للذهاب الى السجل النشط شرح امكانيات الفورم وكيفية الاستخدام 1 - استخدام الفورم لاكثر من قاعدة بيانات في المصنف على ان يكون لكل قاعدة كود لاظهار الفورم يتغير فيه معطياتك في متغيرات kh_SetAddrss اولاً : اسم ورقة البيانات ( افتراضي ) ثانياً : نطاق صف رؤوس اعمدة البيانات ( افتراضي ) ثالثاً : عمود التسلسل ( اختياري ) اذا اردت ادخال رقم تسلسل البيانات الخاص بالفورم تلقائيا في عمود معين سجل عنوان راس العمود . مع ملاحظة انه لا يكون من ضمن نطاق رؤوس اعمدة البيانات كما هو معمول في المثال 2. 2 - تستطيع اضافة قائمة لعمود معين في الفورم باضافة تعليق على عنوان العمود وتكتب اسم نطاق القائمة . 3 - ينسخ التنسيقات والمعادلات في السجل الجديد . 4 - يبحث في جميع الاعمدة حسب الاختيار من القائمة في الفورم . 5 - يعطي نتائج صحيحة عند البحث عن تاريخ اذا شيكت الزر البحث عن تاريخ . 6 - امكانيات زر البحث عن تاريخ يتم تحويل اي قيمة تضعها في مربع النص للبحث الى تاريخ بالتنسيق الافتراضي للفورم ,, مع امكانية ادخال رقم صحيح بين 1 الى 31 ليفهم على انه تاريخ اليوم للشهر الحالي والسنة الحالية 7 - ثوابت بامكانك تغييرها حسب طلبك بداية اكواد الفورم 1- تغيير تنسيقات إظهار التاريخ في الفورم في الثابت DtF 2- تغيير عٌرض مربعات الادخال في الثابت iWgt1 8 - بامكانك انتقاء الاعمدة التي تريدها عند تسمية النطاق وترتيبها حسب ما تريد مع ملاحظة ان العمود الذي يعتمد عليه في احتساب آخر صف هو العمود الاول من التسمية مثلا "E15,C15,H15:AX15" الشرح بداخل الملف للاستخدام يجب نقل الفورمين الى ملفك المرفق 2003 فورم ادخال و تعديل مرن بمعية فورم ادخال التاريخ.rar ============================================ تم اضافة زر للطباعة في الرابط ادناه http://www.officena.net/ib/index.php?showtopic=52300 ============================================
    2 points
  4. السلام عليكم إخواني الكرام أثناء تجوالي في مواقع الانترنت وجدت برنامج اسمه VBA Time Saver Kit فكرة البرنامج أنه يقوم بتخزين أكواد الـ VBA .. ويمكن البحث من خلاله بسهولة عن الكود المطلوب .. أعتقد أنه يمكن أن يكون نواة لمكتبة كبيرة نساهم جميعاً في إثراء تلك المكتبة .. لمن لديه خبرة في التعامل مع مواقع الانترنت والشراء من خلالها ويستطيع أن يقوم بشراء البرنامج حوالي 15 دولار فليتقدم ويتبرع إذا كان بإمكانه وبعد الشراء طبعاً عارفين ..كل الوطن العربي هيستخدم البرنامج اللي هيتم شرائه ..بس خلاص تقبلوا وافر تقديري واحترامي
    2 points
  5. هههههههه والله ياجدع ظنيت فيك الظن دا بردوووووا بس قلت نحسن الظن المهم عجبك شكل المكتبة نفصلك زيها لو كدا انا اللي هجيبلك المكتبة دي وكله بحسابه وانا اللي همسك صندوق التبرعات وهسميه ( تحيا مصر)
    2 points
  6. أخي الحبيب أحمد أخي الغالي ياسر العربي أقولكم ع الصراحة ..أنا كنت عايز أطلع المكتبات اللي عندكم بس بأسلوب استفزازي .. عشان كدا طرحت الموضوع لأني عارف إن محدش في الوطن العربي بيشتري ..!!ههههههههه (مش إحنا اللي ينضحك علينا ) بس ايه المانع إننا نشترك كل واحد يدفع ربع جنيه ونشتري البرنامج ونوزعه ع الغلابة والكل يستفيد .. فكرة مش كدا (يلا يا عربي لم الفلوس بس اوعى تطمع فيها وتهرب برا مصر) تقبلوا وافر تقديري واحترامي
    2 points
  7. جزاك الله كل خير اخى ياسر طيب بدل ما نشترى ده برنامج نفس الفكره ومش تخزين vba بس كل اشكال وانواع الاكواد تخزنها بس تقريبا علشان تحافظ على هذا التخزين تسطبه بعيد عن السى علشان لو نزلت ويندوز جديد تلاقى شغلك زى ما هو إن شاء الله غدا ارفعهولك وان شاء الله يعجبك ومنشتريش حاجه
    2 points
  8. شكرا لكم احبتي وأساتذتي الفضلاء جعفر ومحمد والعبادلة الاستاذ جعفر .. يزيدني شرفا ان يكون لي مشاركة في أعمالك الاستاذ محمد سلامة .. لا اعرف افضل من النماذج للتحكم الكلي في الرسالة الاستاذ عبدالله قدور .. اتمنى انك استطعت تطبيق المثال الاستاذ عبدالله المجرب .. اسعدني مرورك اخي الغالي محمد عصام تفضل المثال بعد التعديل والتغيير تم على كلمة واحدة فقط في الوحدة النمطية العامة msgBox-3.rar
    2 points
  9. ترقيم تلقائي يتجدد مع بداية كل سنة على النحو التالي 1300001 1300002 1300003 1400001 1400002 وهكذا ................. باعتبار الرقم 13 ، 14 هو السنة والترقيم لاشك سيكون تبعا للسنة الحالية Private Sub Form_BeforeInsert(Cancel As Integer) On Error Resume Next Dim xLast, xNext As Integer Dim prtyr, prtTxt As Integer prtyr = Right(DatePart("yyyy", Date), 2) prtTxt = Left(DMax("ID", "tbl1"), 2) xLast = DMax("ID", "tbl1", prtTxt = prtyr) If IsNull(xLast) Then xNext = 1 Else xNext = Val(Mid(xLast, 3, 5)) + 1 End If Me!ID = prtyr & Format(xNext, "00000") End Sub ترقيم تلقائي جديد كل سنة.rar
    1 point
  10. بسم الله الرحمن الرحيم وبه نستعين إخوانى الاعزاء السلام عليكم ورحمته الله وبركاته بناءا على طلب أحد الزملاء الافاضل بهذا الصرح المبارك عبرالخاص وحتى تعم الفائده للجميع أقدم لسيادته وللساده الاعضاء هذا البرنامج وهو يصلح للسادة العاملين بمصانع القطاع الخاص حيث تم ربط الاجر بالحضور والانصراف ويتم التسجيل هنا بصفة يومية وعلى مدار شهرالاستحقاق لكل عامل وهو مقسم على ثلاثة مراحل حسب وضع كل عامل بهذا المصنع المرحلة الاولى مرتبطة بالاجر الاساسى الشهرى المتفق عليه وهو محدد بعدد الساعات الاصلية للعمل المرحلة الثانية مرتبطة بالاجرالاضافى وهناك إحتمالية لحدوث ذلك حسب ظروف كل عامل المرحلة الثالثة مرتبطة بالاجرالاضافى للسهرات الليلية وهناك إحتمالية لحدوث ذلك حسب ظروف كل عامل يشمل البرنامج أيضا الجزاءات التى تقع على العامل ويمكن تعديلة حسب نظام كل شركة يشمل البرنامج أيضا اأيام الغياب لكل عامل بالشركة ففى حالة سماح أيا من رصيد العامل لآجازنه الاعتيادية أو أجازنه العارضة فلايتم خصم أية مبالغ من هذا العامل إلا فى حالة نفاذ تلك الارصدة فتقع عليه أيام الغياب بالخصم يشمل أيضا السلف الذى يتقاضاها العامل على مدارالشهرعلى أن يتم خصمها من اجمالى راتبه اليومى وهناك المزيد نسألكم الدعاء.... تقبوا وافر احترامى .... وجزاكم الله خيرا
    1 point
  11. السلام عليكم ورحمة الله وبركاته جمعة مباركة للجميع التعديلات الجديدة : 1ـ عندما تريد تعديل حساب اثناء اختيارك لرقم الحساب تاتيك معطيات هذا الحساب في الفورم لتختار منها ما تريد تعديله 2ـ حساب المتاجرة وارباح وخسائر والميزانية الختامية تم ضمهم في ورقة واحدة وسميت الاغلاق اذا اردت اقفال حساباتك تذهب الى ميزان المراجعة الذي يوجد فيه زر الانتقال اليها ثم ....... في النظر كفاية عن الشرح 3ـ زر جديد في القيود للصق قيمة العملة بمعطيات قيمته بالعملة الرئيسية 4ـ زر لصق فارق الميزان يقوم باحتساب الفرق للعملتين الرئيسية والفرعية 5ـ فورم اضافة التاريخ ( هدية الاخ نزار) للتذكيراسم المستخدم : خبور كلمة المرور : بسم الله كلمة مرور التعديلات : بسم الله وترقبوا قريبا ان شاء الله برنامج خبور بالتاريخ الهجري ودمتم في حفظ الله وسلامته تحياتي وسلامي اخوكم / خبور __________________________.rar
    1 point
  12. السلام عليكم امثلة على طباعة السجل من (فورم ادخال وتعديل وبحث) الاصدار الثالث http://www.officena.net/ib/index.php?showtopic=51955 هذه ثلاثه امثله مختلفة في المرفق 1 - طباعة في مصنف جديد او من خلال الفورم اذا كانت الشاشة تظهر جميع بيانات السجل 2 - طباعة الى ورقة معينة في الملف حسب تنسيق معين لجميع بيانات السجل 3 - طباعة الى ورقة معينة في الملف حسب تنسيق معين لبعض بيانات السجل المرفقات 2003 فورم ادخال و تعديل مرن مع الطباعة 1.rar
    1 point
  13. أخي الحبيب عبد العزيز البسكري إنت تؤمر ..بس لما الاقي حد الأول يشتري ويبعته هتلاقيني بعته لكل الحبايب أخي الغالي ياسر العربي ..بلاش تتكلم في السياسة عشان هاخدك مخالفة .. خلينا في الإكسيل ومش عايزين لبش أخي الحبيب سعيد بيرم أسعدني مرورك .. ومتخافش مش لوحدك في الزهايمر ..كلنا في الهوا سوا تقبلوا تحياتي
    1 point
  14. هههههههههههههههههه عليك عسل ياأبو البراء ماهو صحيح ياجماعة الـــ 15 دولار مش محتاجين متبرع شوفت بقى ياعم ياسر الزهايمر بيعمل ايه " احلى تثبيته يامعلم " وافر تقديرى واحترامى
    1 point
  15. السلام عليكم ورحمة الله اليك الحل باذن الله القوائم الاسمية.rar
    1 point
  16. حبيبي عبد العزيز معندناش حد يشتري برامج عيبه في وشنا المهم نزل المكتبة اللي انا ارفقتها بها اكواد فيجوال هتفيدك تقبل تحياتي
    1 point
  17. السّلام عليكم و رحمة الله و بركاته بارك الله فيك أخي الغالي" ياسر خليل أبو البراء" على الأفكار النيّرة .. لمّا تشتريه و تجرّبه .. لا تنس أخاك .. إبعثهولي .. فائق إحتراماتي
    1 point
  18. حياك الله ولي الشرف ان يستفيد الشباب من تجاربي جعفر
    1 point
  19. سبحان الله قضاء الحوائج مرهون بأوقاتها جزاك الله كل خير على كل مافعلته معي
    1 point
  20. الى من يهمه الموضوع اتضح أن العلة ليست في الاكواد...وليست في اوفيس 2007 ...إنما في اعداد صفحة الاكسل لكي تكون النتائح صحيحة يجب ان يكون حجم الورقة 100% و بغير هذه النسبة تحدث الاضطرابات في طباعة الصفحات كما حصل معي الصورة في المرفقات والسلام عليكم
    1 point
  21. السلام عليكم ورحمة الله وبركاته ارجو ان يكون هذا هو ماتقصده اسعار متعدده.rar
    1 point
  22. أخي الكريم أحمد الشكر موصول للأخ الحبيب سليم صاحب الفكرة الأولى والأهم في الموضوع فجزاه الله خير الجزاء ، ولا حرمنا الله من إبداعاته المتواصلة والغير منقطعة .. أفضل من كلمة شكر قولك "جزاكم الله خيراً" وإلى لقاء في موضوعات أخرى .. لا تتوقف فأنت في أوفيسنا منتدى العجائب والغرائب في الإكسيل تقبل تحياتي
    1 point
  23. بارك الله فيك أخي وحبيبي ياسر العربي تسلم على الملف الجميل ..كدا الملف المرفق الأخير يوضح الصورة لمن أراد الاستفادة من الموضوع بخلاف الملف الأصلي .. وبعدين ميغركش شكلي ..أنا باين عليا كدا بس متعرفنيش .. !! احذر !! Be Careful ... تقبل وافر تقديري واحترامي
    1 point
  24. اخى واستاذى ياسر فكره رائعه وحل امثل بارك الله فيك تقبل تحياتى
    1 point
  25. ياعم الحاج والله انا ما جبت حاجه من عندي الراجل عايز الوان لونت له ههههههههه وزي ما قلت تنسيق شرطي بس =AND(M$11>=$D12;M$11<=$G12) وبعدين زي ما انت بتحاول تساعد الناس بقدر تفرغك انا نفس النظام وبصطاد المواضيع بنفس الطريقة (بصطاد في الميه العكرة) وبعدين ياعم الحاج انت رجل مسالم متخوفشي ومش باين عليك ادي مثال تنسيق شرطي لخط زمنى معين نقوم بتحديده بعيد عن المعادلات حتى تصل الفكرة عشان خاطر ابو البراء الغالي Yasser.rar
    1 point
  26. بارك الله فيك أخي الحبيب ياسر العربي مش تقول إنها بالتنسيق الشرطي .. بردو ترمي الملف وتطلع تجري !! فيه حد بيخوف في المنتدى غيري في انتظار شرح لما تم القيام به ليستفيد الجميع ..رغم إني عرفت الخدعة لكن اكيد فيه ناس كتير تحب تعرف اللي تم في الملف تقبل تحياتي
    1 point
  27. أخي الكريم إبراهيم أبو ليلة قم بإلغاء الفلترة في ورقة العمل المراد العمل عليها والمسماة "في حالة الفلترة" ضع المعادلة التالية في عمود مساعد في الخلية H5 مثلاً ثم قم بسحبها لنهاية النطاق المستخدم =SUBTOTAL(109,E5) ثم في عمود الناتج ضع المعادلة التالية في الخلية C5 ثم قم بسحبها لنهاية النطاق المستخدم =IFERROR(INDEX($E6:$E$15,MATCH(TRUE,INDEX(H6:$H$15<>0,),0))-D5,"") قم بفلترة النطاق C3:F14 على أي حقل وليكن حل الكود كما فعلت أنت واختر رقم 1 لشرط الفلترة ، ولاحظ النتائج F.rar
    1 point
  28. تفضل اخي لعله المطلوب osamah3.rar
    1 point
  29. اخي الكريم يرجى تغيير اسم الظهور للغة العربية كما يرجى الإطلاع على موضوع التوجيهات في الموضوعات المثبتة في صدر المنتدى لمعرفة كيفية التعامل مع المنتدى بشكل أفضل إليك الكود التالي يوضع في حدث ورقة العمل عله يفي بالغرض توضع الأكواد بين أقواس الكود وليس كما فعلت في مشاركتك الأولى Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Target, Columns("H:H")) Is Nothing Then Target.Offset(, -2).Value = Date If IsEmpty(Target) Then Target.Offset(, -2).Value = "" End If End Sub تقبل تحياتي
    1 point
  30. اخي الكريم اتبع الفديو التالي وحاول تبدع ولا تكتفي
    1 point
  31. أخي الكريم يوسف عطا جرب الكود التالي ..ستظهر النتائج في العمود O ..يمكنك التعديل في الكود لتضع النتائج في العمود المناسب لك Sub Split() Dim Arr, I As Long, StrA As String, StrB As String Arr = Range("F2", Cells(Rows.Count, "F").End(xlUp)).Value For I = LBound(Arr) To UBound(Arr) StrA = VBA.Split(Arr(I, 1), " ")(0) StrB = VBA.Split(Arr(I, 1), " ")(1) If StrB = "MIN" And Val(StrA) = "0" Then Cells(I + 1, "O") = 0.01 ElseIf StrB = "MIN" Then Cells(I + 1, "O") = Val(StrA) ElseIf StrB = "KBs" Then Cells(I + 1, "O") = Val(StrA) / 1000 Else Cells(I + 1, "O") = StrA End If Next I End Sub أرجو أن يفي بالغرض .. ملحوظة : تم التعامل مع الأصفار 00:00 بجانب كلمة MIN على أنها 0.01 كما أدرجت في النتائج المرفقة رغم أنه غير منطقي .. تقبل تحياتي
    1 point
  32. انا ارجح رأى الاستاذ عبد الفتاح جدول الموظفين الذى يحتوى على بينات الموظف يتم تحديثه بناء على الترقية وفى هذه الحلة يتم تحديث الحقول الاتية الدرجة الوظيفية وتاريخ الحصول على الدرجة ورقم قرار الترقية ☺
    1 point
  33. اعرف طريقة الشفت بس أنا احب ان ادخل بطريقة نظامية الى البرنامج حتى اطلع عليه كما اختار المصمم طريقة عرضة تحياتي لك
    1 point
  34. أخي الكريم أحمد محمد جرب المعادلة التالية في الخلية C3 .. =IF(A3="","",(LEN(" "&SUBSTITUTE(A3," "," ")&" ")-LEN(SUBSTITUTE(" "&SUBSTITUTE(A3," "," ")&" "," "&B3&" ","")))/LEN(" "&B3&" ")) إذا لم تعمل معك المعادلة قم باستبدال الفاصلة العادية الموجودة في المعادلة بفاصلة منقوطة تقبل تحياتي
    1 point
  35. بس للعلم ، كود تغيير الاسم فيه شئ جميل للنظر فيه ، فالسؤال هو : اذا فتحت ملف اكسس مثلا ، فهل تستطيع ان تغير اسمه وهو مفتوح؟ الجواب لا ، فهنا انا ، غيرت اختيار الصورة (يعني كأنّي كبست على صورة ثانية) 'select another file in the listbox, so that this file is no longer in-use عندها ، طلبت من الاكسس ان لا يسمح لك ان ترى ما يحدث (يعني لما اكبس الزر لرؤية صورة اخرى ، فالمفروض ترى صورة اخرى في النموذج ، مما قد يربك المستخدم) ، وذلك بعدم تغيير آخر شكل للنموذج ، والامر هو Me.Painting = False ، وعندها عملت التغييرات ، ولما خلصت ، طلبت من اكسس ان يعرض الشكل الصحيح للنموذج Me.Painting = True للعلم جعفر
    1 point
  36. عدم الرد من صاحب السوال جعلني ادخل مرة اخرى اواكتشف اني لم ارفق الوحدة المسؤولة عن الترجمة تفصل والصقها في صفحة وحدة نمطية جديدة Public Ok, Cancel, ABORT Public RETRY, IGNORE, YES, NO Private m_hHook As Long Private Const IDOK = 1 Private Const IDCANCEL = 2 Private Const IDABORT = 3 Private Const IDRETRY = 4 Private Const IDIGNORE = 5 Private Const IDYES = 6 Private Const IDNO = 7 Private Const WH_CBT = 5 Private Const GWL_HINSTANCE = (-6) Private Const HCBT_ACTIVATE = 5 Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _ (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" _ (ByVal hDlg As Long, ByVal nIDDlgItem As Long, _ ByVal lpString As String) As Long Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" _ (ByVal hHook As Long) As Long Public Sub MessageBoxH(hwndThreadOwner As Long) Dim hInstance As Long Dim hThreadId As Long hInstance = GetWindowLong(hwndThreadOwner, GWL_HINSTANCE) hThreadId = GetCurrentThreadId() m_hHook = SetWindowsHookEx(WH_CBT, AddressOf _ MsgBoxHookProc, hInstance, hThreadId) End Sub Private Function MsgBoxHookProc(ByVal uMsg As Long, ByVal _ wParam As Long, ByVal lParam As Long) As Long If uMsg = HCBT_ACTIVATE Then SetDlgItemText wParam, IDOK, Ok SetDlgItemText wParam, IDCANCEL, Cancel SetDlgItemText wParam, IDABORT, ABORT SetDlgItemText wParam, IDRETRY, ABORT SetDlgItemText wParam, IDIGNORE, ABORT SetDlgItemText wParam, IDYES, YES SetDlgItemText wParam, IDNO, YES UnhookWindowsHookEx m_hHook End If MsgBoxHookProc = False End Function
    1 point
  37. شكرا اخي جعفر على هذه النوادر الجميلة وتفضل اخي عبدالله يمكنك كتابة اي شيء على الزر Dim resalh As Integer Ok = "أكيد موافق" Cancel = "not agree" MessageBoxH Me.hwnd resalh = MsgBox("تفضل هذه الخلطة في اللغة", vbOKCancel, "رسالة")
    1 point
  38. نموزج للموظف لمعرفة كيفية حساب الراتب الأساسى بعد إدخال بياناتة الخاصة من تاريخ تعيين ومربوط الدرجة المعين عليها وعلاوته التى حصل عليها تشجيعية وترقية تواريخها فقط وكما هو موضح بالملف zzzzzzzzz.rar
    1 point
  39. السلام عليكم - اسعد الله أوقاتكم : الزملاء المحاسبون – الأساتذة المحترمون مرفق ملف اكسل يحوي برنامجين عن احتساب نسب التحليل المالي والتحليل المقارن ( النسب الرئيسية والهامة فقط ) مع استخلاص تفسير لكل نسبة البرامج تحتوي معادلات بسيطة جدا – والغاية هي كيفية استثمار الاكسل في استخلاص نسب التحليل المالي الفكرة بالأصل لاساتذتي: ( عبد الله المدني + محمد فوزي سلام ) / + ياسرالحافظ البرامج تحتوي النسب الرئيسية ويمكن للمستثمر إضافة النسب التي تلزم لعمل مؤسسته حيث أرفقت ملف وورد بمعظم نسب التحليل المالي مع شروحات وتفسيرات وفقكم الله ياسر الحافظ " ابو الحارث " تحليل مالي اكسل.rar
    1 point
  40. السلام عليكم المصفوفات الجداول تعريف مبسط : التعامل مع اكثر من قيمة واحدة تطبيقات عملية الدرس الاول : المصفوفات 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
  41. السلام عليكم إخواني وأحبائي وجدت علي موقع أجنبي قائمة للمبتدئين في تعليمات وبرمجيات الفيجوال بيزيك للاكسل القائمة علي شكل فهرس ولم أفعل غير تنسيقها فقط بالإكسل تفضلوا القائمة بصيغتي 2003 ، 2007 عسي الله أن ينفع بهما Excel VBA Index.rar
    1 point
  42. السلام عليكم والله احيانا احزن على نفسي لهذا التجمد الذي اصابني ولكن الان ان شاء الله سنبدا رويدا شدوا على يدي علشان استمر لديا الكثير من الاعمال واخرج من عمل الى اخر بدون اكمالي التشطيب للعمل السابق وكانني ادور في دوامة لانني قد اكون في حالة نفسية -- هذه محفظه لجمع الاكواد وعمل لها تعليمات اخبرونا ما النقص فيها ======================================= كلمة السر لاي شي مغلق في الملف هي الرقم 1 ======================================= محفظة اكواد.rar
    1 point
  43. السلام عليكم الاخ الفاضل أبو ليله شكر لك على مورك الكريم الأستاذ العبقري والخلوق جدا عبدالله باقشير حفظك الله بالعكس استاذ عبدالله تعديلك من نصيب الأسد جزاك الله خير وبارك فيك وأطال الله بعمرك الاخ الفاضل astika إطلع على المرفقات Kh_Sum_Pages.rar
    1 point
  44. أستاذى الحبيب / عبد الله باقشير بارك الله فيك وزادك من العلم حتى ترضى وجعل هذا الشرح فى ميزان حسناتك ان شاء الله وأعلم أستاذى الحبيب أننا نتابع هذا الشرح الرائع بكل تركيز ولهفة فى التعلم بعد اذن أستاذى الحبيب / عبد الله باقشير أسمح لتلميذك المحب لك أن يعرض معلومة صغيرة حتى يسعد بالحوار مع معلمه المبدع / عبد الله باقشير بالنسبة للمصفوفة ذات الحجم الثابت وثنائية البعد والتى تتكون من ثلاثة صفوف وعمودين يمكن التعبير عنها كلأتى Dim ay(2, 1) As String وفى هذه الحالة تكون الصفوف هى 0 و 1 و 2 والأعمدة هى 0 و 1 بدلا من Dim ay(1 To 3, 1 To 2) As String وبالتالى يكون المثال كلآتى Sub kh_Array1() Dim ay(2, 1) As String ay(0, 0) = "A" ay(1, 0) = "B" ay(2, 0) = "C" ay(0, 1) = "D" ay(1, 1) = "E" ay(2, 1) = "F" Range("A1").Resize(3, 2).Value = ay End Sub
    1 point
  45. وهذا الملف جمعت فيها ملف الف الكود المعمول بالاكسس ليتم التعرف على الية عمل هذه المحفظة تفضلوا شوفوا وجربوا وعدلو محفظة اكواد.rar
    1 point
  46. السلام عليكم اخي المكرم / عادل ----------------حفظه الله من الافضل تسمية النطاق (kh_test_1) بعدد الاعمدة التي تشمله ( لم يتم تغييره في مرفقك) و تضيف متغير جديد في الكود بعدد الاعمدة في النطاق و تستخدم هذا المتغير بدلا من اضافة رقم للعمود في الكود ويصبح الكود ثابت ويتم فقط للاستخدام تحديد النطاق في الورقة مثلا : MyColumns = .Columns.Count اليك الكود : Private Sub Worksheet_Change(ByVal Target As range) Dim MyRows As Integer, MyColumns As Integer, MyRange As range, MyRange1 As range On Error GoTo 1 With range("kh_test_1") MyRows = .Rows.Count - 1 MyColumns = .Columns.Count Set MyRange = .range(cells(MyRows, 1), cells(MyRows, MyColumns)) If Not Intersect(Target.cells(1, 1), MyRange.cells) Is Nothing _ And Target.Value <> "" Then MyRange.EntireRow.Insert Set MyRange1 = .range(cells(MyRows, 1), cells(MyRows, MyColumns)) MyRange1.Value = MyRange.Value MyRange.ClearContents End If End With 1 End Sub ==================================================== و هناك اضافة جديدة لو تريدها في حالة اردت حذف صف معين تمسح بيانات خلية الاسم فيحذف الصف تلقائيا باستخدام هذا الكود: Private Sub Worksheet_Change(ByVal Target As Range) Dim MyRows As Integer, MyRange As Range, MyRange1 As Range, MyCells As Range On Error GoTo 1 With Range("kh_test_1") MyRows = .Rows.Count - 1 Set MyRange = .Range(Cells(MyRows, 1), Cells(MyRows, 4)) Set MyCells = .Range(Cells(1, 1), Cells(MyRows - 1, 1)) If Not Intersect(Target.Cells(1, 1), MyRange.Cells) Is Nothing _ And Target.Value <> "" Then MyRange.EntireRow.Insert Set MyRange1 = .Range(Cells(MyRows, 1), Cells(MyRows, 4)) MyRange1.Value = MyRange.Value MyRange.ClearContents End If End With If Not Intersect(Target.Cells(1, 1), MyCells.Cells) Is Nothing Then If Target.Value = "" Then Target.EntireRow.Delete End If 1 End Sub سارفق الملف لاحقا Dinamic_Lable1.rar
    1 point
  47. السلام عليكم هذا برنامج محاسبي يحتوي على اليومية ودفتر الاستاد صفحة واحدة تقوم بالادخالات وتختار من القائمة الحساب الذي تريدة ولديك ميزانية مراجعة شاملة واختيارية في نفس الوقت ولديك حساب المتاجرة وحساب ارباح وخسائر والميزانية الختامية اتمنى ان تستفيدوا منه اخوكم / خبور _____________.rar
    1 point
  48. السلام عليكم ورحمة الله وبركاته نفرض أنك تشتغل على نموذج بصورة شبه يوميه وتريد عندما تفتح النموذج أن يعود بك إلى أخر سجل قمت بإدخاله أو تعديله . المثال التالي يحل المشكله ان شاء الله وهو يعتمد على نموذج يحتوي على حقل ترقيم تلقائي فريد باسم ( CustomerID ) الشـــرح:- أولاً : أنشىء جدول باسم "tblSys" يتكون من الثلاث حقول التالية : Variable (حقل نصي حجمه 20 حرف) Value (حقل نص حجمه 80 حرف) Description (حقل نص حجمه 255 حرف) ثانياً: ضع الكود التالي في حدث عند إلغاء التحميل للنموذج المراد إستخدامه Sub Form_Unload (Cancel As Integer) Dim rs As DAO.Recordset If Not IsNull(Me.CustomerID) Then Set rs = CurrentDb().OpenRecordset("tblSys", dbOpenDynaset) With rs .FindFirst "[Variable] = 'CustomerIDLast'" If .NoMatch Then .AddNew ![Variable] = "CustomerIDLast" ![Value] = Me.CustomerID ![Description] = "Last customerID, for form " & Me.Name .Update Else .Edit ![Value] = Me.CustomerID .Update End If End With rs.Close End If Set rs = Nothing End Sub ثالثاً: ضع الكود التالي في حدث عند التحميل للنموذج المراد إستخدامه Sub Form_Load() Dim varID As Variant varID = DLookup("Value", "tblSys", "[Variable] = 'CustomerIDLast'") If IsNumeric(varID) Then With Me.RecordsetClone .FindFirst "[CustomerID] = " & varID If Not .NoMatch Then Me.Bookmark = .Bookmark End If End With End If End Sub ملاحظة: أضف المرجع DAO 3.6 إلى قائمة المراجع لديك في القاعدة لكي تعمل القاعدة بالشكل المطلوب. للإستيضاح مرفق مثال على ذلك. والله الموفق (المرجع أحد المواقع الأجنبية) Last_update_Recorde.zip
    1 point
  49. هذه مجموعة دروس بسيطة نقلتها من موقعي القديم الدرس الأول الدرس الثاني الدرس الثالث الدرس الرابع و ساعيد ارفاق الأمثلة الثلاثة هنا مثال الدرس الثاني " Less02Excel.zip
    1 point
×
×
  • اضف...

Important Information