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

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

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

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

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


    • نقاط

      10

    • Posts

      13165


  2. rudwan

    rudwan

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


    • نقاط

      7

    • Posts

      2926


  3. ibn_egypt

    ibn_egypt

    الخبراء


    • نقاط

      5

    • Posts

      764


  4. ابوخليل

    ابوخليل

    أوفيسنا


    • نقاط

      3

    • Posts

      12864


Popular Content

Showing content with the highest reputation on 12/04/14 in all areas

  1. أخى وحبيبي وأستاذي الفاضل أ.ياسر بالعكس الحلقات في منتهى الجمال والروعة واسلوبك مميز ومشوق " السهل الممتنع " لكل من يريد التعلم، لكن للاسف من يريد التعلم قلة، الناس بتستسهل تقولك احنا لسه هنتعلم ما نفتح موضوع ونطلب اللى عاوزينه وخلاص، دول حتى بيكسلوا يعملوا بحث عن اللى عاوزينه يمكن يكون موجود نصيحتى لا تضع المتابعات في حساباتك واكمل عملك واستمر، واحتسبه عند الله تعالى وادعوا الله ان يجعله في ميزان حسناتك وان ينفع بعلمك الاسلام والمسلمين تحياتى
    3 points
  2. السلام عليكم --- عدم متابعة السائل لاستفساره و يستكثر شكر إخوانه نظير مساعدتهم و تعبهم معه في الحل ------ حله بسيط اهمال وعدم الاهتمام بتساؤلاته مجددا فقط مجرد رأي و السلام عليكم بالتوفيق
    2 points
  3. السلام عليكم هذا الخيار غير موجود افتراضيا ضمن تطبيق المنتدى ، و قد اضفناه فى وقت ما ، و لكن تم ايقاف ذلك لانها معلومة اضافية يتم الاختفاظ بها فى قاعدة البيانات و قد تصل هدد التحميلات لبعض الملقات او من اطلعوا عليه لعدة الاف مع مرور الوقت مما يمثل عبء غير ضروري على قاعددة البيانات ، و بصفة عامة فانن نفضل الالتزام بالتطبيق الاصلي دون عمل جداول اضافية لتخزين المعلومات الغير مضمنة ضمن التطبيق الاصلي لانه مع بعض الترقيات لنسخة المنتدى قد تحدث بعض المشاكل مع هذه الجداول الاضافية. و ان كن من الممكن حل هذه المشكلة بعد حدوثها. فضلا عن ان بها نوع من الحرج لمن يحمل الملف ثم لا يستطيع الرد على السؤال مثلا. لهذين السببين انا لست مع اضافة هذه الخاصية : عبء على قاعدة البينات + الحرج لمن لم يرد باضافة حل او يقدم شكر على الموضوع مثلا
    2 points
  4. تفضل العرض سيكون يوميا كل يوم عرض جديد D2.rar
    2 points
  5. دروس إكسيل (صوت و صورة)
    1 point
  6. إخوتي الأفاضل هذه مساهمة بسيطة ومتواضعة أبتغي من خلالها ثواب ربي ، وليس هذا من عند نفسي بل مما علمني ربي ، والله من وراء القصد. بحث وفرز وتصفية بمناهج متعددة وطرق مختلفة. خيارات مختلفة للبحث، منفردة ومتعددة. بحث وتصفية بجزء من نص و بنص أو رقم أو تاريخ أو بين تاريخين بحث تشابه أو تطابق بحث باستخدام زر أمر ، أو بقائمة منبثقة باستخدام الزر الأيمن في مجال النموذج الفرعي إحصاء مباشر للنتائج تقرير فوري لإظهار وطباعة نتائج البحث تجول في النموذج الفرعي باستخدام أزرار أمر في النموذج الرئيسي زر أمر لإعادة ضبط خيارات البحث استعانة بتقويم منبثق لتحديد التواريخ و ... دعونا نجرب .... راجيا من الله أن يكون لكم في التطبيق عون وسد حاجة، والله من وراء القصد. N_Search2011.rar
    1 point
  7. اخواني و أصدقائي في هذا الصرح الكبير لي عتب على بعض الاعضاء (اشدد على كلمة بعض)الذين يستميتون في طلب امر ما أو حل بعض المسائل العالقة تحت شعار( ضروري جداً و هام للغاية و عاجل ...)الى ما هنالك من الحاح. فقط يضعون السؤال و ( يا دار ما دخلك شر) أحيانا لا يطلعون على الرد حتى.. أو يحمّلون الرد دون ان تعرف اذا كان صاحب العلاقة (السائل)قد قام بالتحميل اولا (حيث ان السائل لا يضع تعليقاً على الرد) لذا لدي اقتراح للإدارة الموقّرة ان تدرج لائحة بأسماء من قام بتحميل موضوع ما وليس فقط عدد التحميلات .اذا كان هذا ممكناً أو ادراج ملاحظة اذا كان صاحب السؤال قد قام بتحميل الرد على الموضوع (في هذه الحالة دون قائمة المحمّلين) لا أعرف اذا كان احد من أعضاء المنتدى يشاركني هذا الرأي و لكني أجزم ان هناك البعض
    1 point
  8. اساتذتى الكرام سبق طرح موضوع باسم قائمة اسماء من عمودين فى شيتين مختلفين والرابط الخاص به هو http://www.officena.net/ib/index.php?showtopic=57191 وقمت بحمد الله بتطوير الكود الخاص بالاستاذ الكبير النشيط جدا ياسر خليل ليعمل الكود على شرط وعلى شرطين وعلى 3 شروط وذلك بالمرفق المطلوب : ان يتم وضع الشروط فى check box ومن خلال الشروط المحدده يتم تنفيذ الكود وهذا تطوير اخر فكرت فيه ولكنه اعلى من قدراتى دمتم فى امان الله قائمة بالاسماء من عمودين بشيتين فى عمود واحد بشيت مختلف.rar
    1 point
  9. عند قيامى بتصفح المنتدى وجدت احدى جواهر الافكار التى لابد من الوقوف عندها.... فكره الدخول اليا على موقع وزاره التربية والتعليم هى فكره عبقريه لانها تجعلنا نخرج بالاكسل لخارج حدود الفكر المحدود والطير به بعيدا عن السرب .... ولابد من التعاون لانجاز باقى الافكار المبدعه والخلاقه ...... هى فكرة واعداد وتنفيذ وابداع كل من .... العبقرى دائما وصاحب الافكار الجديده والنادره استاذنا ...:ياسر خليل وصاحب اللمسه العبقرية والايدى الحريرية استاذنا.... شوقى ربيع امام الفكره وتنفيذها .... انحنى احتراما وتقديرا واسمحولى اساهم فى هذا الفكر الراقى ولكن ليس بمثل ما قدمتوه .... على قدى كده ON LINE2.rar
    1 point
  10. أخى الفاضل الجموعي الحمد لله ان تحقق هدفك، وضعتها في الترحيل حتى يتم اعادة الترقيم بعد الترحيل مع ان المفترض وضعها في الحذف وسيعاد الترقيم سواء في الحذف او الترحيل تخاريف اخر الاسبوع،ههههههه تحياتى
    1 point
  11. أخى الفاضل الجموعي لعل الملف المرفق هو المطلوب تحياتي تعديل على زر حذف.rar
    1 point
  12. جرب التالي تعديل على زر حذف.rar
    1 point
  13. السلام عليكم بنسبة لمحرر الاكواد والفورمة في اوفيس 2013 هي هي مفيش اي اضافات التغيرات الحاصلة اغلبها ع الاكسل او الشيتات ان صح التعبير برغم من انها ليست مختلفة كثيرا على 2010 حسب ما شفت احسن حاجة فيه هي خدمة الدريف او مشاركة الملفات
    1 point
  14. استخدم هذه الوحدة النمطية Public Function AgeGroup(BirthDate As Date) As String Dim intAge As Integer intAge = DateDiff("yyyy", [BirthDate], Now()) + _ Int(Format(Now(), "mmdd") < Format([BirthDate], "mmdd")) Select Case intAge Case 0 To 17 AgeGroup = "0-17" Case 18 To 25 AgeGroup = "18-25" Case 26 To 30 AgeGroup = "26-30" Case 31 To 35 AgeGroup = "31-35" Case 36 To 40 AgeGroup = "36-40" Case 41 To 45 AgeGroup = "41-45" Case 46 To 50 AgeGroup = "46-50" Case Is > 50 AgeGroup = "50+" End Select End Function واستخدم هذا الكود لاستدعاء الوحدة النمطية =GetAge([BirthDate]) حيث ان BirthDate هو حقل تاريخ التولد في الجدول واذا تريد ان يظهر لك واقع العمر يقع بين ما بين انشأ مربع نص غير منظم على النموذج واستخدم هذا التعبير لمصدر بياناته . =AgeGroup([BirthDate])
    1 point
  15. قم بحذف هذا السطر .Rows(T).delete Shift:=xlUp واستبدله بهذا السطر .Range(Cells(T, 1), Cells(T, 6)).delete Shift:=xlUp
    1 point
  16. الأخ الحبيب الجموعي لو أرفقت ملف سيسهل على الجميع مساعدتك بالأمر .. تقبل تحياتي
    1 point
  17. الأخ الحبيب والأستاذ الكبير محمد أبو عباس جزيت خيراً على كلماتك الطيبة ومرورك الطيب العطر ، وربنا ميجبش زعل .. مفيش زعل بين الأحباب ممكن يكون فيه عتاب ، لكن زعل مفيش يا أستاذنا الكبير الأخ الحبيب مختار .. أنا مزعلش من الإضافات للموضوع ..أبدا أبدا بالعكس دا شيء مهم جداً ، لأن المفروض إننا بنكمل بعض ، أنا مش ملقن ، والتعليم اللي بجد اللي يكون فيه الخبرات متبادلة وهو دا اللي أنا عايزة .. كل واحد يقدم معلومة مختلقة الموضوع يكتمل ويتجمل .. وسلم لي على الأستاذ ظريف ..اللي دايما لبسه نضيف ، ودمه خفيف ، ومشكور على مرروك العطر يا أستاذ المستقبل
    1 point
  18. ليست خاطئة من حيث انها خطأ و لكن للسبب الذي ذكرته سابقا من الافضل استخدام رقم العميل و ليس اسمه لان الاسم قد يتغير , و قد تتم كتابته بطرق مختلفة مثلا : محمد أحمد محمد احمد بالنسبة للبرنامج الاسمين مختلفين , مع ان المستخدم يقصد نفس اسم العميل لذلك في عالم البرمجة يتم الاعتماد على حقل المعرف لكل جدول بيانات أساسي , مثل جدول الموظفين - العملاء - الموردين - الأصناف - .. الخ ليس هذا هو الحل المناسب يمكنك انشاء جدول لجميع العملاء سواء قاموا بالشراء أم لم يقوموا , و من خلال استعلام بسيط يمكن معرفة العملاء الذين قاموا بالشراء فعلا ممن لم يقوموا بذلك لذلك , من الأفضل اعادة صياغة البرنامج ليكون أسهل و أقل تعقيدا
    1 point
  19. هذا شيء طبيعي لأن الملف يحتوي على ماكرو و من واجب الاكسل تحذريك يمكنك ازالة هذا الشيء(و لا انصحك بذلك الا اذا كنت واثقاً من ان كل الماكروات موثوق بها) وذلك: 1-اضغط على Developer 2- اختيار Macro security 3- اختيار البند الرابع من تبويب macro setting - حيث يوجد العبارة enable macro 4- ثم موافق
    1 point
  20. التحدي شيء جميل في عالم البرمجة , و أنا أشجعك على ذلك و نحن معك ان شاء الله ان احتجت اي مساعدة لا تتردد بارك الله فيك
    1 point
  21. أهلا و سهلا أستاذ يوسف حياك الله و بارك فيك طريقة أخرى للحل , لكن ايضا لايزال هناك خلل في تصميم البرنامج , و ننصح الأخت بمراجعة التصميم و لعل المطلوب يكمن في حل لآخر غير حل الاستعلام الالحاقي ان الاسم و خاصة الأسماء العربية من السهل جدا أن تختلف كتابتها من سجل لأخر و ذلك بوضع فراغ أو همزة أو ماشبه و بالتالي فانه لتفادي مثل هذا الخطأ , ينصح دائما باستخدام حقل معرف عبارة عن ID و ليس الاسم و جزاك الله خيرا
    1 point
  22. السلام عليكم استاذ رضوان اشتقنا اليك وانا سعيد جداً برؤيتك فأنت ممن تعلمنا منه الكثير فجزاك عنا خير الجزاء اتفق مع الحلول المقدمة من الاستاذ علي و الاستاذ رضوان . ولي مشاركة ان سمحتوا لي : ربما يكون القصد من السؤال هو فقط طريقة الالحاق بدون تكرار على مثال لا يمثل البنية الحقيقة للبرنامج لأنه كما ذكر استاذ رضوان بأن التكرار غير مقبول عند تصميم البرامج. ايضاً رأيت بأن استعلام الالحاق به حقلين و واحد منهم حقل رقم تلقائي و هو يدرج كتسلسل بمجرد الحاق الاسم .. فلماذا نلحقه ؟ و قد يتسبب هذا في خطأ بسبب التكرار. عموماً : لتفادي التكرار يمكن استخدام استعلام فرعي كمعيار لحقل الاسم بالاستعلام الالحاقي كالتالي : Not In (select cus_name from tb1 where cus_name=cus) مرفق الملف بعد التعديل مع ملاحظة ازالة حقل الترقيم التلقائي . بالتوفيق للجميع منع التكرار باستخدام استعلام الحاق.rar
    1 point
  23. أخي الحبيب وأستاذي الكبير إبراهيم أبو ليلة شرف لي مرورك على موضوع المتواضع ، فأنت ممن تتلمذنا على أيديهم ، لك مني كل الحب والاحترام والتقدير والعرفان .. الأخت الفاضلة morestudy أشكرك على شوية البنزين .. إن الله سأستكمل ، وصدقيني أنا أكبر المستفيدين من الموضوع ، حيث أن موضوع الحلقات يجبرني على الإطلاع على مصادر عديدة مما يثري معلوماتي قبلكم .. وأعتقد أنه سيأتي الوقت إن شاء الله أن يجد طلاب العلم مرجعاً يرجعون إليه في التعلم .. لا أقول أنني الأول الذي أتناول هذا الموضوع ، ولكني أطمح أن أكون أول من يجذب طلاب العلم إلى هذا الباب ، كبداية انطلاق لشرارة التعلم بالنسبة إليهم مشكور على مروركم العطر إخواني الكرام .. والحمد لله كدا الخزان (بقا Full Tank)
    1 point
  24. اعمل اسعلام جديد كما يلي design query wizard find unmached query wizard هذا المعالج يصمم لك استعلام بالفارق من جدولين اي السجلات الموجودة في جدول و غير الموجودة في الثاني سيظهر هنا معالج على عدة خطوات اختاري الجدول الأول ( الذي يحوي كل السجلات ) ثم في الخطوة الثانية اختاري الجدول الثاني ( الذي يحوي عدة سجلات فقط ) سيطلب هنا المعرف المشترك بينهما ( و هذا أمر ضروري جدا ) و هو هنا الحقل ID نتيجة الاستعلام المفروض أن تعطيكي الفارق بين الجدولين من هذا الاستعلام تعملي استعلام الحاق للسجل الأول هذا من ناحية الحل المطلوب , لكن من الناحية العملية هذه الطريقة غير مرغوبة برمجيا ( اي طريقة تكرار الجداول ) أعيدي صياغة قاعدة البيانات لتجنب تكرار الجداول
    1 point
  25. استاذ احمد تم التعديل على الملف مرة ثانية ليتناسب مع الحاجة انظر الى الورقة 1(3) Monthly Plan 2.rar
    1 point
  26. بس البنزين بيخلص للأسف .. إنت عارف لما تحس إن مفيش متابعة جيدة ، بيخلي الواحد كسلان ، ومش عايز يجدد ليس بنزينك الذي بيخلص ولكن العقول الراغبة بالعلم هي الي بتخلص وكما قال أخي ibn_egypt بالعكس الحلقات في منتهى الجمال والروعة واسلوبك مميز ومشوق " السهل الممتنع " لكل من يريد التعلم، لكن للاسف من يريد التعلم قلة، الناس بتستسهل تقولك احنا لسه هنتعلم ما نفتح موضوع ونطلب اللى عاوزينه وخلاص، دول حتى بيكسلوا يعملوا بحث عن اللى عاوزينه يمكن يكون موجود وأنا أضم صوتي إلى صوته ولنكُن نحن القِلة المتابعة بنزينك الخاص ، فنحن حقاً نرغب بالتعلم ولكن أحيانا تشغلنا أعمالنا الوظيفية لبعض الوقت ولكنا كالمدمنين لابد وأن نمر على هذا الموقع ونطلع على صفحاته. ثم ننصرف لأعمالنا. ومعذرة منا لتقصيرنا في المتابعة
    1 point
  27. الاخوة الزملاء فى هذا الصرح العظيم اقدم لكم فكرة بسيطة عن كيفية استغلال InputBox فى ادخال البيانات الملف المرفق الباسور 111 ارجوا ان ينال اعجابكم ويعم الافاده شاشة ادخال بيانات.zip
    1 point
  28. روعة يا ابن مصر بارك الله فيك إنت كنت فين من زمان ؟؟ مخبي عننا الجمال والروعة دي ليه !!
    1 point
  29. الأخ الحبيب مختار .. جزيت خيرا على مرورك العطر ، وعلى المعلومة الجديدة أيضا تستخدم Chr(10) أيضاً لإحداث سطر جديد زيها زي الكلمتين اللي ذكرناهم في الموضوع أنا عدلت المشاركة وأضفت معلومتك أما بالنسبة لسؤالك أعتقد إنك فهمت القصة .. كل مرة بنستخدم أي كلمة بنقدر ننزل سطر واحد لو استعملناها مرة واحدة ، ولو استعملتها مرتين هينزل سطرين ، ولو ... كدا تمام
    1 point
  30. عند تغيير (تحويل ) نوع الحقل الى رقمي تختفي هذه الاصفار للتغيير داخل الاستعلام استخدم CInt(expression) او CLng(expression)
    1 point
  31. تفضل استاذ أبو آلاء لعله يكون المطلوب 2السجل.rar
    1 point
  32. الحلقة العاشرة ************ السلام عليكم ورحمة الله وبركاته أقدم لكم اليوم حلقة كاملة الدالة MsgBox (وقد قدم لها الأخ الحبيب حسام عيسى موضوعاً كاملاً ، مما أخرني في تقديم الحلقة) .. عموماً هنتكلم عنها مرة تانية ، وفي الإعادة إفادة.. كلمة MsgBox اختصار للكلمة الإنجليزية Message Box أي صندوق الرسالة .. ودي وظيفتها إنك بتعرض رسالة للمستخدم تفيده بأمر معين .. لما نكتب الدالة MsgBox ، ونضغط مسطرة عشان ناخد مسافة ، بيظهر لنا مستطيل أصفر فيه توضيح لبارامترات الدالة .. كلها اختياري ما عدا البارامتر الأول اللي هو اسمه Prompt ، والبارامتر ده هو عبارة عن النص اللي هيظهر للمستخدم (وطبعاً مينفعش يكون اختياري وإلا مش هيكون فيه رسالة للمستخدم) بس إحنا ممكن نضحك على المحرر ، ونكتب السطر بالشكل ده : MsgBox "" هو كل اللي يهمه أقواس التنصيص .. هودا كل اللي يفهمه ، أما النص اللي بين أقواس التنصيص فدا ميعرفوش وميهموش ، اكتب أي كلام .. MsgBox "واخد على خاطري منكم" دي الرسالة اللي عايز أوصلها لكم أحبابي .. ودا سببه عدم المتابعة الجيدة للحلقات .. عموماً دا مش وقت للعتاب.. طيب واحد هيسأل : طيب كدا موضوع الدالة بسيط ومش محتاج حلقة ؟ أقوله البسيط هنعقده ، والمعقد هنبسطه .. تعالوا معايا نضع قيمة في الخلية D3 (كل اللي بيشرحوا مش عارف ليه مركزين على الخلية A1) أنا بحب التغيير - من باب خالف تعرف - ، وليكن القيمة 1500 عايزين نظهر القيمة الخاصة بالخلية في رسالة : MsgBox Range("D3").Value الرسالة هتظهر وفيها القيمة 1500 ، طيب ممكن نضيف عليها نص .. أكيد ممكن ! ليه لا! MsgBox "القيمة الموجودة يا أستاذ حسام في الخلية هي " & Range("D3").Value نلاحظ هنا إننا استخدمنا المعامل Concatenate اللي هو شكله & ، ودا وظيفته إنه بيدمج النصوص .. طبعاً القيمة اللي موجودة في الخلية D3 حتى لو كانت قيمة رقمية ، هنا مع دالة الرسالة مش بتشوفها رقم ، لكن بتشوفها نص (هنبص بعيون الدالة الجميلة) طيب ممكن نظهر قيمة خلية تانية .. أكيد ممكن ! ليه لا نضع القيمة 2000 في الخلية E4 ونجرب : MsgBox Range("D3").Value & Range("E4").Value هنلاقي إن قيمة الخلية D3 والخلية E4 لازقين في بعض ، دا لأنك مسبتش مسافة بينهم .. طيب المسافة هنعملها إزاي ؟ هو سؤال بسيط بس اعذروني أكيد فيه ناس بتسأله :: هنترك مسافة وبس .. لا .. هنعمل مسافة بالمسطرة بس بشرط تكون المسافة بين أقواس تنصيص زي كدا : MsgBox Range("D3").Value & " " & Range("E4").Value هنا نفس الكلام ربطنا بالمعامل & ، وعشان تكون المسافة مناسبة ضربت على المسطرة 3 مرات (معلش أصلي مضايق ومحتاج أضرب حد ، فملقتش غير المسطرة .. بس كفاية عليها 3 ضربات ..) واحد هيقولي أنا جربت الكود بس أنا مش عاجبني شكلهم جنب بعض ، ممكن نخلي كل قيمة في سطر .. أكيد ممكن ! ليه لا! MsgBox Range("D3").Value & vbNewLine & Range("E4").Value كلمة vbNewLine عشان نقدر ننزل لسطر جديد (وقلت قبل كدا بس محدش بيتابع إن فيه كلمة تانية بتؤدي نفس الغرض اسمها ايه يا شاكر؟ مش بقولكم محدش مذاكر .! اسمها vbCrLf ) يلا زيادة الخير خيرين .. وأضاف الأخ مختار كلمة جديدة أيضاً تؤدي نفس الغرض ألا وهي Chr(10) ربنا يسترها علينا وعليكم دنيا وآخرة. نشوف السطر ده : MsgBox ("الحمد لله الذي بنعمته تتم الصالحات") ايه الجديد يا أستاذ عبد المجيد ؟ الأقواس .. ممكن نستغني عنها ؟ آه ممكن .. ليه لا! .. بس الأقواس دي هنستفيد منها في إنك تخلي جملة MsgBox يمكن وضعها كقيمة في متغير (نصبر شوية هييجي الكلام عليها) .. طيب ايه هي الإضافات اللي نقدر نضيفها (هي زي البهارات حاجة كدا تحلي الأكله .. تخليها أحلى) ... إحنا قلنا البارامتر الأول خاص بالنص ودا إجباري (بس ممكن نخدع المحرر) ، البارامتر الثاني خاص بالأزرار Buttons .. الأزرار دي زي OK و Cancel و Retry وهكذا.. نجرب السطر التالي : MsgBox "هل تحب حلقات افتح الباب؟", vbOKCancel نلاحظ بعد نص الرسالة Prompt عملنا فاصلة , ودي عشان نقول للمحرر إننا هنضيف أزرار Buttons .. أول ما تعمل الفاصلة هتلاقي زي ما اتعودت قايمة فيها القيم اللي ممكن تستخدمها .. طيب لو نفذنا السطر اللي فات هنلاقي إن زر OK أو زر Cancel لو ضغطت عليهم مش هيحصل حاجة غير إنه يقفل الرسالة .. (قلنا نصبر هييجي عليها الكلام يا مستر عبد السلام) نتعرف على الأزرار الموجودة والمتاحة عندنا : vbAbortRetryIgnore vbOKCancel vbOKOnly vbRetryCancel vbYesNo vbYesNoCancel ممكن نجرب القيم دي ... القصة كلها في البادئة vb ثم الأزرار اللي هنستخدمها.. ننتقل لجزئية أخرى : مع نفس البارامتر الخاص بالأزرار ممكن نضيف رموز (علامة تعجب - علامة استفهام - ..) والرموز عشان نضيفها نضع علامة + بعد الأزرار التي سيتم استخدامها .. بالمثال يتضح المقال : MsgBox "هل تحب حلقات افتح الباب؟", vbYesNo + vbQuestion ممكن نتعرف على الرموز : vbQuestion vbInformation vbCritical vbExclamation طيب ممكن نستغنى عن الأزرار ونستعمل الرموز فقط ؟ أو ممكن نستغنى عن الرموز ونستعمل الأزرار فقط؟ أكيد ممكن ! ليه لا! (النهاردة واخدين حريتكم ..مفيش تقيد) هسيبكم شوية تجربوا الرموز دي ، وتشوفوا كل رمز شكله ايه؟ - فاصل ونواصل - واحد بعد ما شاف الرسالة ، لاحظ إن فيها عنوان Microsoft Excel فسألني ممكن أغير العنوان ده ؟ رديت عليه وقلت له (طبعاً عارفين الإجابة) عنوان الرسالة هو دا البارامتر التالت .. ود اسمه Title (ونلاحظ إن البارامتر لما يكون اختياري بيوضع بين أقواس بهذا الشكل [ ] ) نجرب السطر التالي : MsgBox "هل تحب حلقات افتح الباب؟", , "منتدى الأحبة" ايه دا بقا إنت عامل فاصلتين ليه؟ يا سيدي ما أنا قلت لك إن البارامتر التاني الخاص بالأزرار والرموز دي اختياري ، بمعنى يمكن الاستغناء عنه ، بس عشان نعديه لازم فاصلة ، وبعد الفاصلة فاصلة تانية ، يقوم المحرر يفهم إنك استغنيت عن البارامتر التاني ، ويشتغل على البارامتر التالت .. اللي هو عنوان الرسالة.. نجرب ونشوف ! ننتقل لأهم نقطة في حلقة اليوم ألا وهي تعيين الرسالة كمتغير ، عشان ببساطة ننفذ كود معين لو المستخدم اختار زر وننفذ كود تاني لو اختار زر تاني (أكيد الكلام يتوه ..خلينا في التطبيق) Answer = MsgBox("هل تحب حلقات افتح الباب؟", vbYesNo + vbQuestion, "منتدى الأحبة") نخلي بالنا إننا هنا هنستخدم متغير باسم Answer (ممكن تسميه بالاسم اللي يعجبك) ، والمتغير ده هيكون له قيمة (الرسالة مجرد ستارة .. والقيمة مخفية .. والقيمة دي هنعرفها حالاً) لو حبينا ننفذ كود معين في حالة اختيار معين ، هنستخدم الجملة If الشرطية ، يعني ببساطة لو المتغير Answer قيمتة كذا اعمل كذا ، ولو قيمته كذا اعمل كذا .. Sub Query() Answer = MsgBox("هل تحب حلقات افتح الباب؟", vbYesNo + vbQuestion, "منتدى الأحبة") If Answer = vbYes Then MsgBox "كدا حبيبي وصاحبي وكفاءة" ElseIf Answer = vbNo Then MsgBox "زعلت منك ..روح ربنا يسامحك" End If End Sub أظن المثال واضح ، في حالة إذا كانت قيمة Answer تساوي vbYes ، هينفذ السطر التالي ويظهر رسالة بمحتوى معين ، ولو كانت القيمة vbNo هيظهر رسالة تانية .. واحد هيقولي هو كله رسايل رسايل مفيش شات .. طبعا الأسطر اللي هيتم تنفيذها مش شرط تكون رسالة ، دا مجرد مثال عشان تفهم كيفية استخدام المتغير .. لكن ممكن تنفذ مجموعة أسطر من الأكواد في حالة vbYes ، ومجموعة أسطر أخرى من الأكواد في حالة vbNo ... ركز وخلي بالك من الكود التالي : Sub Query() Answer = MsgBox("هل تحب حلقات افتح الباب؟", vbYesNo + vbQuestion, "منتدى الأحبة") If Answer = 6 Then MsgBox "كدا حبيبي وصاحبي وكفاءة" ElseIf Answer = 7 Then MsgBox "زعلت منك ..روح ربنا يسامحك" End If End Sub كلنا اللي عملناه شيلنا vbYes وحطينا رقم 6 ، وشيلنا vbNo وحطينا رقم 7 (ايه دا بقا ..طيب هنعرف منين اللي إنت بتقوله ده ..فيه جدول بقيمة كل زر من الأزرار .. يرجى عدم الحفظ) فيه حاجة مهمة نسيت أقول عليها : لو لاحظتو إن الرسائل كلها وعنوان الرسائل بتظهر ناحية اليسار ، عشان نخليها يمين (ربنا يجعلنا من أهل اليمين) نجرب الكود التالي : MsgBox "هل تحب حلقات افتح الباب؟", vbMsgBoxRight, "منتدى الأحبة" آخر جزئية هنتكلم فيها .. مش هنتكلم فيها (فيه ملف مرفق فيه توضيح لآخر جزئية .. أنا بس هشرح نقطة واحدة في الملف المرفق ، وإنتو إن شاء الله المولى هتفهموا الباقي) الأزرار والرموز اللي عدت علينا في الحلقة ، ممكن نستغنى عنها بقيم ..إزاي ؟ MsgBox "هل تحب حلقات افتح الباب؟", vbYesNoCancel ممكن السطر ده يكون بالشكل ده : MsgBox "هل تحب حلقات افتح الباب؟", 3 يعني القيمة 3 = vbYesNoCancel .. مثال تطبيقي : ------------ Sub Query() Dim Answer As String Answer = MsgBox("هل تريد الدخول لتطبيق الإكسيل لتطبيق الأكواد في حلقات افتح الباب؟", vbYesNoCancel) If Answer = vbYes Then MsgBox "تفضل بالدخول .. بيتك ومطرحك ، وإن شاء الله تستفيد" ThisWorkbook.Activate ElseIf Answer = vbNo Then MsgBox "أكيد مشغول عشان ناوي تقفل .. عموماً تصحبك السلامة وفي رعاية الله" ActiveWorkbook.Save Application.Quit End If End Sub وأخيراً أتمنى أن أكون قد وفقت في توصيل المعلومة لكم بشكل مبسط .. دمتم في رعاية الله .. MsgBox Values.rar
    1 point
  33. أخى فى الله الأستاذ الكريم // حسام عيسى بارك الله فيكم وزادكم الله من فضله ومن علمه تقبل منى وافر الاحترام والتقدير
    1 point
  34. أخي الكريم حاول توضيح تفاصيل قاعدة البيانات عندك حتى نتمكن من فهم المطلوب ( اي تفاصيل الجداول و الحقول و تفاصيل الاستعلام )
    1 point
  35. Private Function Rem_days() تم تعريف الدالة هنا على أنها خاصة private لأنها ستكون خاصة لهذا النموذج فقط , أما اذا كان المطلوب استخدام في كافة أجزاء البرنامج فيتم انشاء وحدة نمطية خاصة في قسم الماكرو مع حذف كلمة private Dim FCount As Long Dim tDate As Date Dim Count_Fridays As Long Dim LDOM As Date يتم تعريف كافة المتغيرات التي ستستخدم في أجزاء الدالة مع تعريف نوعها , و اي متغير لايتم تعريفه في هذا الجزء لن يقبل الكود تنفيذه Count_Fridays = 0 هذا عداد لحساب أيام الجمعة , و دائما العداد يتم تصفيره قبل اسناد اي قيمة له اثناء تنفيذ الكود فكرة الكود هنا ان يتم الانتقال بين اليوم الحالي و تاريخ اخر الشهر و نريد ان نتعامل مع تلك الايام اي اليوم الحالي و غدا و الذي يليه و هكذا لذلك نحتاج استخدام متغير من نوع تاريخ ليحمل قيمة التاريخ التي نريد اختبارها tDate = Date اسناد قيمة أوليه لمتغير التاريخ tdate على أن يبدا بقيمة اليوم الحالي LDOM = DateSerial(Year(Date), Month(Date) + 1, 0) هنا تم حساب تاريخ آخر يوم في الشهر الحالي If Weekday(Date, vbFriday) <> 1 Then دالة weekday هي دالة معرفة في الأكسس تعطي قيمة اليوم من الأسبوع , فهنا نريد اختبار هل اليوم هو يوم جمعة ؟ اذا كان لا انتقل للسطر التالي حيث سيقوم بحساب قيمة تاريخ اول يوم جمعة قادم tDate = tDate - Weekday(Date, vbSaturday) + 7 End If الان يكون المتغير tdat قد تم اسناد قيمة اول يوم جمعة له اعتبارا من تاريخ اليوم في المرحلة التالية سيتم عمل حلقة دورانية لاحصاء عدد ايام الجمعة الواقعة مابين المتغير tdate و المتغير ldom و هو تاريخ نهاية الشهر الحالي Do While tDate <= LDOM الأمر السابق يقول نفذ الأمر طالما أن قيمة tdate أقل من قيمة ldom Count_Fridays = Count_Fridays + 1 سبق و أن اشرنا أن المتغير tdate يحمل قيمة تاريخ أول يوم جمعة اعتبارا من الآن , لذلك سيتم اعطاء عداد ايام الجمعة count_fridays القيمة 1 حيث أننا سبق و أن قمنا في أول سطر بتصفير قيمة هذا العداد , و الآن سيحمل القيمة 1 بعد ذلك سيتم اعطاء متغير التاريخ tdate قيمة يوم الجمعة التالي و ذلك باضافة 7 اليه كما يلي , tDate = tDate + 7 هنا سيعود مؤشر البرنامج لتنفيذ الجملة قبل السابقة تلقائيا و ذلك لأننا ضمن حلقة تكرارية تبدأ ب DO و تنتهي ب LOOP و سيكون الانتقال بينهما تلقائيا , للذك سيصبح قيمة عداد يوم الجمعة الآن 2 بعد اضافة 1 اليه ثم سيتم الانتقال الى يوم الجمعة التالي و هكذا الى أن تصبح قيمة المتغير tdate اخر قيمة ضمن الشهر الحالي , لأنه في شرط الحلقة الدورانية نفذ طالما أن قيمة tdate أقل من قيمة تاريخ أخر الشهر و بالمنطق , اذا تجاوز قيمة تاريخ أخر الشهر فسيتوقف الكود عن التنفيذ تلقائيا Loop هنا تنتهي الحلقة التكرارية و سيأخذ عداد ايام الجمع قيمة و لتكن أربعة مثلا نعود و نحسب في الجملة التالية نطرح تاريخ أخر الشهر ناقص التاريخ الحالي ناقص عدد ايام الجمعة Rem_days = LDOM - Date - Count_Fridays نلاحظ هنا أنه يجب أن نسند القيمة المطلوبة في الدالة الى نفس اسم الدالة التي تم تعريفها rem_days End Function هذا شرح مختصر للدالة , و أنا أنصح بأن يتم فهم الدالة أكثر عن طريق اختزالها على عدة مراحل مثلا يتم اعطاء اسم الدالة لأول سطر تنفيذ و حذف باقي الأسطر , ثم يتم اختبار القيمة التي سيرجعها لتكون مفهومة ثم يتم اضافة السطر التالي و فحص القيمة ,, و هكذا أما بالنسبة لسؤالك الأول , طبعا الدالة المفروض أن تعطي القيمة الصحيحة المتبقية كلما تم فتح النموذج أما اذا كان سيتم ابقاء النموذج مفتوحا طيلة ايام الشهر , فهنا لايتم تنفيذ الحساب تلقائيا , بل ينبغي في هذه الحالة استخدام خاصية المؤقت - التايمر لأن التايمر ينفذ الكود بعدد اجزاء الزمن المعرف له سواء بالثانية أو أجزائها
    1 point
  36. انسخي الكود أدناه في الصيغة البرمجية للنموذج Private Function Rem_days() Dim FCount As Long Dim tDate As Date Dim Count_Fridays As Long Dim LDOM As Date Count_Fridays = 0 tDate = Date LDOM = DateSerial(Year(Date), Month(Date) + 1, 0) If Weekday(Date, vbFriday) <> 1 Then tDate = tDate - Weekday(Date, vbSaturday) + 7 End If Do While tDate <= LDOM Count_Fridays = Count_Fridays + 1 tDate = tDate + 7 Loop Rem_days = LDOM - Date - Count_Fridays End Function ثم غيري معادلة النص في النموذج لتكون كما يلي =rem_days()
    1 point
  37. ما رايك ان يتم انشاء ملف الاكسل اولا وبجميع التنسيقات . وربطه بالاكسس لجلب البيانات ويمكن طبعا ربطه باستعلام . وكل مرة تفتح الاكسل تتحدث البيانات تلقائيا كما بالاستعلام المصدر. ثم طباعة من الاكسل. بالتوفيق
    1 point
  38. الحلقة الثانية ونبدأ حلقة جديدة من حلقات مسلسل افتح الباب يا عبد التواب .. اتعلمنا المرة اللي فاتت إزاي ندخل على محرر الأكواد وإزاي نضيف كود واتعرفنا على نافذة المشروع .. دلوقتي جه الوقت اللي لازم تعرف فيه الهيكلة العامة للتعامل مع الأكواد .. يعني ايه ؟ هضرب مثال ليتضح المقال : أنا ساكن في عمارة كبيرة (العمارة زي تطبيق الإكسيل Application) دي العمارة بتاعتنا وساكن في شقة فيها (الشقة دي هي WorkBook المصنف يعني .. والشقة عندي فيها 3 أوض (أوضة 1 - أوضة 2 - أوضة 3 ) دي زي أوراق العمل اللي عندنا Sheet1 و Sheet2 و Sheet3 جوا كل أوضة فيه مجموعة أشياء أو بنسميها كائنات Objects بس حاجات صغيرة.. مثلا فيه تلاجة .. والتلاجة طبعا واخدة حيز من الفراغ بنسميه نطاق Range يعني النطاق ده جوا الأوضة اللي جوا الشقة اللي في العمارة يبقا ممكن نبرمج التلاجة : أيوا صحيح !! هنحدد مكانها .. عمارة.شقة.أوضة(1).تلاجة.فتح بالإكسيل تكون بالشكل ده : Application.ThisWorkbook.Sheets(1).Range("A1").Select بكدا نكون عرفنا هيكلة الكائنات الموجودة عندنا Objects .. في السطر اللي فات بدأنا بالعمارة أقصد التطبيق متبوعاً بنقطة Period ثم حددنا الشقة أقصد المصنف Workbook وهنا أشرنا للمصنف الحالي ThisWorkbook، وبعدين حددنا الأوضة اللي هي الشيت Sheets (1) ثم أخيرا التلاجة أقصد النطاق المراد العمل عليه وهو هنا الخلية A1 بهذا الشكل Range("A1) . >>> وأخيرا .. بعدما وصلنا للتلاجة هنعمل ايه ؟ أكيد هنفتحها عشان نشوف أي حاجة نشربها بعد الكلام الكتير ده الواحد ريقه نشف اللي يبل ريقكم .. أيوا نفتح دا فعل والفعل في اللغة العربية نعرفه إزاي .. لما نحط قبليه كلمة (أن) يعني لو قلنا (أن يفتح) كدا فيه معنى واضح .. أما لو قلنا كلمة حجم وحطينا قبليها (أن حجم) دي ملهاش معنى ، فبالتالي كلمة يفتح فعل أما كلمة حجم فدي اسم أو صفة (كدا معلمي اللغة العربية هيبلغوا عني إني بدي دروس في العربي) !! يرجع مرجوعنا لموضوعنا إحنا ليه شرحنا الفعل لأن الفعل في البرمجة بيساوي كلمة Method يعني لما نشوف كلمة Method دي نربطها بحدث الفعل تلاجة.فتح يعني لو جربنا السطر اللي فات ووقفنا في خلية بعيدة شوية ونفذنا الكود هيحدد الخلية A1 .. مبروك عليكم السطر الأول من الأكواد الفعل هنا أو الـ Method اسمه Select وترجمتها حدد .. أي أننا قمنا بالإشارة لكل الكائنات وصولا إلى الخلية A1 ثم نأمر الكود بتحديد النطاق. ناخد مثال مهم أوي عشان نفهم الـ Method بشكل أكبر Application.Quit هنا لما اكتب الكائن Application وبعدين أكتب النقطة هلاحظ حاجة في غاية الأهمية .. ايه هيا؟ محرر الأكواد بيقدم مساعدة لينا (ودي عشان الجماعة اللي بيقولوا المشكلة في اللغة .. خلوا بالكم) بيظهر لنا قايمة شبه القايمة المنسدلة بس مش منسدلة فيها كلمات كتيرة .. وهنلاقي شكلين : الشكل الأول عمنا بيل جيتس بيشاور بصبعه على ورقة والشكل التاني علامة شبه الطوبة الخضرا .. الشكل الأول بنسمية الخاصية Property وهنشرحها بالتفصيل كمان شوية ، والشكل التاني الطوبة الخضرا ربنا يجعل حياتكم خضرا ومزهزهة هي دي الـ Method أو الفعل طيب هعرف إزاي إذا كانت كلمة Quit دي Method ولا Proerty ببساطة بص على شكلها هتلاقي علامة الطوبة الخضرا اللي قلنا عليها يعني كلمة Quit دي Method وطبعا الحتة اللي فاتت للجماعة اللي مش بيعرفوا إنجليزي زي حالاتي ، أما بالنسبة للي بيعرفوا إنجليزي فيبصوا لكلمة Quit هيلاقوا معناها اخرج ودا فعل يعني Method> يبقا خلاصة الكلام السطر اللي فات بيعطي أمر للخروج من التطبيق. نقطة تانية في غاية الأهمية لما نلاقي نفسنا مش عارفين حروف الكلمة اللي بنكتبها .. بعد النقطة ولما تظهر القايمة بكتب أول حرف أو حرفين في الكلمة اللي أنا عايزها ، وبعدينباستخدام الأسهم فوق وتحت أقف على الكلمة اللي عليها العين والنن واضغط TAB من لوحة المفاتيح اللي تحت حرف الذال يا رجالة (أنا عارف إن فيه ناس هتدور دلوقتي على حرف الذال ومش هتلاقيه . بصوا في لوحة المفاتيح أيوا بصوا .. فوق شمال فوق شمال فوق شمال تحت زر Esc هتلاقي حرف الذال ، وتحت الذال هتلاقي Tab عليها سهمين سهم متجه لليسار وآخر لليمين .. لو ملقتش السهمين قوم حالا رجع لوحة المفاتيح للراجل اللي إنت اشتريت منه دا نصب عليك) المهم لما نضغط Tab هنلاقي الكلمة اتكتبت لوحدها .. يا سلام ونعم الكلام ونعم المساعدة شكرا يا بيل !! ممكن أريح ايدي شوية عشان والله ايدي تعبت !!! ---------------------------------------------- طيب دي الـ Method فيه حاجة تانية اسمها Property ودي ترجمتها خاصية (وتشمل زي ما قلنا الاسم أو الصفة) تلاجة.حجم حجم دي هي خاصية التلاجة Property فلو حبينا نضع قيمة لحجم التلاجة تلاجة.حجم = 10 قدم نلاحظ إن الخاصية ليها قيمة وعشان نضع قيمة ليها بنحط علامة يساوي متبوعة بقيمتها ناخد مثال على الخاصية Property عشان عارف إنتو تهتو مني ... ركزوا يا شباب! Application.Caption= "Officena" طبعا إحنا عارفين شريط العنوان بيكون فيه اسم الملف أو المصنف متبوعا بشرطة - وبعدين اسم التطبيق Excel طيب لو حبينا نخليه باسم منتدانا الحبيب يبقا ننفذ السطر اللي فوق الكلمة اللي جات ورا Application اللي هي كلمة Captionدي خاصية من خواص التطبيق مش فعل يا مستر حمدي .. وطالما إنها خاصية فبنحدد ليها قيمة بعلامة يساوي (واحد هيعمل فيها مركز طيب إحنا نسينا علامة يساوي مع Quit أقولك الفعل مش بيتحدد له قيمة ، القيمة بتكون مع الخاصية أو الاسم أما الفعل له حاجات تانية اسمها بارامترات .. متخرجنا برا الموضوع) المهم بنحدد قيمة للخاصية وليكن مثلا كلمة Officena وطبعا دي نص ، وعرفنا من المرة اللي فاتت إن النصوص توضع بين أقواص تنصيص " " .. اللي مش عارف يرجع يراجع من الأول أنا مش بحب أكرر المعلومة أكتر من 100 مرة .. لو نفذنا بقا السطر اللي فات هنلاقي شريط العنوان اتغير (يا حلااااااااوة) واحد هيقولي طيب إزاي نكتب الأسطر اللي إنت نازل دش فيها أقولك فيه قايمة اسمها Insert اختار منها Module أو فيه علامة في شريط الأدوات جنب علامة الإكسيل على يمينها علطول اختار منها Module ,وضع فيها الأسطر المراد تنفيذها يرجى مراعاة حاجتين الأسطر مبتكونش عريانة كدا لازم نغطيها بلحاف وبطانية يعني اللحاف Sub وبعدين اسم الإجراء ، والبطانية End Sub ونحاول عشان نقدر نتعلم صح نبص كويس قبل تنفيذ الكود وبعده يعني في المثال الأخير بص لشريط العنوان هتلاقي Excel مشرف في العنوان ، وبعد تنفيذ الكود هتلاقي Officena هي اللي نورت ... وإلى لقاء في حلقة جديدة من حلقات افتح الباب أسأل المولى عزوجل أن ينفع بهذا الرغي جموع المسلمين وأن يكون شاهدا لي لا علي ..
    1 point
  39. اعتقد انه مطلوب رفع الملف مره اخرى بعد التعديل لانه فيه حاجات كثيره غير موجوده
    1 point
  40. الأخ الفاضل / محمد نصرى نورت المنتدى مرحبا بك فى أسرة أوفيسنا أخا عزيزا ومبدعا يتعلم منه الجميع
    1 point
  41. الأستاذ / أشرف سعيد السويسي السلام عليكم ورحمة الله وبركاته تعقيب على كلام حضرتك أن دالة sumifs تعطي الصلاحية على شرطين فقط . دالة sumifs تعطي شروط كثيرة جداً جداً أكثر من120 شرط وإليك الملف به الحل بدالة sumifs. 11.rar
    1 point
  42. ايها الخبير المعتمد السلام عليكم ورحمة الله ميدع بفطرتك ولا يزيدك المدح اجلالا ولكن هل هذا الشرح هو سلسلة جديدة اي ان (شرح الجمل الشرطية واتخاذ القرارات في ال vba بالكامل من الالف للياء) قت توقف وسنكمل هنا ام ان هذه فقط لشرح range .. cells .. offsetثم سنعود الى الموضوع السابق لتكملة يوجد طلب للاخوه المشرفين جزاهم الله كل خير لتسهيل متابعة سلسلة الشروح توجد طريقة يستخدمها اغلب المنتديات حيث يتم وضع الشرح في المشاركة الاولى ويتم اضافة وتحديث السلسلة كامله في نفس المشاركة الاولى حتى يتسنى للمستفيد معرفة اخر الشروح ولا يفوت اي جزء وتكون المشاركات والاستفسارات في الاسفل في حالة الرغبة في المزيد اعتقد ان هذا اتنظيم سيكون جداً مفيد في سلسلة الشروحات المقدمة من الاستاذ الكبير عماد الحسامي وستضيف لمنتدانا العزيز ميزة جديدة على مميزاته المتعدده اخوكم بوفيصل
    1 point
×
×
  • اضف...

Important Information