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

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

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

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

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


    • نقاط

      15

    • Posts

      13165


  2. ibn_egypt

    ibn_egypt

    الخبراء


    • نقاط

      3

    • Posts

      764


  3. هاني بدر

    هاني بدر

    03 عضو مميز


    • نقاط

      3

    • Posts

      421


  4. KHMB

    KHMB

    04 عضو فضي


    • نقاط

      3

    • Posts

      674


Popular Content

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

  1. السلام عليكم إخواني الكرام أقدم لكم ملف بسيط فيه شرح لكيفية استخراج القيم بدون الخلايا الفارغة باستخدام معادلات الصفيف وباستخدام الفلترة Extract Content Form Non-Empty Cells.rar
    3 points
  2. عمل رائع أستاذ" ياسر" ويمكن أيضا صيغة الصفيف هذه تحقق نفس المطلوب {=INDEX($A$2:$A$16, SMALL(IF(ISBLANK($A$2:$A$16),"",ROW($A$2:$A$16)-MIN(ROW($A$2:$A$16))+1),ROW(A1)))} تقبل تحياتى
    3 points
  3. بسم الله الرحمن الرحيم أساتذتى بالمنتدى و ألاخوة الزملاء كل عام وانتم بخير بمناسبة العام الجديد مما لا شك فيه أن الأهداء يقدم الى أغلى شخص لدى الانسان وبما انه اغلى شخص فلابد من تقديم أغلى هدية يملكها فسمحو لى ان اقدم أغلى ما املك واعز ما أملك وهو برنامج EMA الى أغلى منتدى . منتدى أوفيسنا هذا الصرح العظيم الذى شرفت بالانضمام اليه أهداء برنامج EMA برنامج EMA تم تصميمة بعمل متواصل على مدار 300 يوم بمعدل لا يقل عن 5 ساعات يوميا معظمها كان البحث والتفكير وكيفية التنفيذ فأن أحسنت فمن الله وما توفيقى الا بالله وأن أخطأت فمن نفسى والشيطان والحمد لله الذى بنعمته علينا تتم الصالحات تم رفع البرنامج بتاريخ 29-9-2014م وهذا كان الاصدار الاول من الجزء الاول للبرنامج وبعد التواصل مع الاعضاء ومشاركتى لأرائهم طلب منى بعض الاضافات الاخرى والحمد لله تم ذالك أقدم لكم الاصدار الثانى من الجزء الاول أتمنى أن يحوز اعجابكم ورضاكم البرنامج به أمكانيات وخيارات كبيرة جدا تم تصميمه على اعلى مستوى من الرقابه والتحكم فى المدخلات أنا الحمد لله عملت على برامج كبرى وهذا البرنامج عصارة خبرة محاسبية وأنتظرو منى قريباً الجزء الثانى للبرنامج (المخازن والمبيعات والمشتريات) فى نفس الملف وأخيرا وليس أخراً البرنامج بين أيديكم لا يتم فتج البرنامج الا فى الساعه 12ص أى بالليل 2015/1/1م لأنه نسخة عام 2015م ملحوظه مهمه جدا 1-يفضل تشغيل البرنامج على 2007 2-لا يتم تغيير اسم البرنامج نهائيا لانه لا يفتح عند تغيير- الاسم (EMA)فقط فى بعض الاحيان عند التنزيل يكون EMA 1 فى هذه الحالة يحذف 1 أن شاء الله نرفق لكم شرح لكيفية العمل على البرنامج اسم المستخدم / الدعم الفنى الباسورد / 123 EMA.zip
    2 points
  4. السلام عليكم ورحمة الله اللهم اننا نسألك ياواحد يا احد يافرد ياصمد يامالك الملك يابديع السموات والأرض ان تغفر وترحم لوالد مختار حسين ونجيه من الذنوب كما ينقى الثوب الأبيض من الدنس وبدله اهلا خير من اهله ودارا خير من داره وتقبله عندك واكرم مثواه ونزله وبدل سيئاته حسنات ووسع قبره واجعله روضة من رياض الجنة لا حفرة من حفر النار وان تغفر وترحم لاموات المسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات برحمتك يا ارحم الراحمين آمين يارب.
    2 points
  5. السلام عليكم اخوانى وأحبابى كل سنه وحضراتكم طيبين بمناسبة السنه الجديدة نسأل الله عزوجل أن تكون سنة خير وسعاد ة علينا وعليكم وعلى مصر والعالم العربى والاسلامى و كل سنه وحضراتكم طيبين بمناسبة المولد النبوى الشريف الدنيا كلها مناسبات حلوه وأنا معاى هديتين هديتى بمناسبة السنه الجديدة طريقة مبتكرة للتراجع عن تنفيذ الماكرو . لنفرض أن حضرتك بتشتغل على الاكسل و ايدك خبطت فى زر حذف بيانات بالورقة مثلا بتتصرف ازاى فى هذه الحالة ؟ قدامك 3 طرق : الأولى ما تعرفش تتصرف وتقعد تبكى على البيانات الثانية تقفل الاكسل بدون ما تحفظ وتعيد فتح الملف من جديد الثالثة تستخدم الكود التالى ( فكرته نابعة من الطريقة الثانية بس بنريحك من قفل الملف وإعادة فتحه ) وهذا هو شرح الأكواد المستخدمة : الكود التالى لحذف بيانات Sub DELEDTE() ' تحديد مدى معين Range("a1 :c10").Select ' حذف البيانات Selection.ClearContents ' الوقوف على الخلية a1 Range("a1 ").Select End Sub الكود التالى لتشغيل الكود الذى يليه بعد مدة زمنية ومنع حفظ التغييرات الأخيرة فى الملف Sub CloseMe() ' هنا نحدد المدة الزمنية التى يعمل بعدها الكود "OpenMe" Application.OnTime Now + TimeValue("00:00:10"), "OpenMe" ' هنا نحدد منع حفظ التغييرات ومنع غلق الملف نهائيا Savechanges = False ThisWorkbook.Close False End Sub الكود التالى للتأكيد على عودة البيانات Sub OpenMe() ' رسالة تأكيد عودة البيانات MsgBox " البيانات رجعت ! خلى بالك يا أفندينا مش كل مرة تسلم الجرة " End Sub احنا بكده نكون اتعلمنا جاجتين : الأولى التراجع عن ماكرو الثانية : ودى مهمة خالص وكتير مننا مش واخد باله منها وهى ( كيفية تشغيل ماكرو عن طريق ماكرو آخر ) أتمنى أن يكون الموضوع أعجبكم ودعواتكم للمرحوم أبى ( دعوه بظهر الغيب تكون فى ميزان حسناتك ) هذه هى هديتى الأولى بمناسبة السنة الجديدة انتظروا هديتى الثانية الليلة بمناسبة المولد النبوى الشريف ( كود X قاعة المحكمة ) وهذا المرفق تطبيق على الموضوع والسلام عليكم انتظرونى قبل منتصف الليلة undo macro by mokhtar.rar
    1 point
  6. عزيزي الرائع ابوعبدالله اعتذر بشدة على تاخيري في الرد على كلامك الاكثر من رائع بخصوص محاسبة المطاعم وذلك لظروف مرضي ولكن ان شاء الله يمكننا سويا وضع نواة حسنة لمشروع محاسبة الفنادق والذي كما سبق واوضحت انه يشمل المطاعم بداخله واامل ان نبدا سويا من الالف الى الياء حتى يخرج مشروع فريد لمحاسبة الفنادق والتي اعتقد انها شاملة لاهم ومعظم مجالات المحاسبة. ولكن دائما سيبقى الوقت هو العدو الاوحد لي وساضع امامك اطار عام لمجال المحاسبة داخل المنشآت السياحية ولكن بكل بساطة او بمعنى ادق بالمفهوم العامي وقبل البدء ارجو ان يتسع صدرك لكلام محاسبة وبس اى بدون برمجة حتى تصلك الفكرة الاساسية والتي من خلالها يمكنك معرفة كافة مدخلات الاطار المحاسبي ( البيانات التي سيتم معالجتها او تبويبها )داخل الفندق وكذلك العمليات التي تتم فيه ثم المخرجات والتي ستكون في شكل تقارير اساسية واخرى مكملة - هناك اقسام داخل قسم المحاسبة والتي تقوم بتجميع البيانات كل حسب تخصصه. وهي كالتالي : قسم مراقبة التكاليف :Cost Control ويتراسه Cost controller وهو القسم المسئول عن مراقبة المخزون ومخرجه الاساسي هو ( تكلفة البضاعة المباعة )Cost Of Salesوبالطبع كي نصل الى رقم تكلفة البضاعة المباعة فنحن بحاجة لمعرفة رصيد اول الفترة المحاسبية وصافي المشتروات واخيرا رصيد بضاعة آخر الفترة (كل هذه البنود بسعر التكلفة وليس البيع) والمخزون في غالبية الفنادق يصنف على 4 محاور رئيسية 1- مخزون اغذية Food Store 2- مخزون مشروبات Beverage Store 3-مخزون عام General store 4-مخزون الصيانة Maintenance Store وساقوم برفع ملف به هذه التصنيفات بمحتوياتها من اصناف لان كل من هذه المخازن بداخلها تصنيف فرعي آخر وهنا يجب الاشارة الى معيار هام في التفرقة بين ماهو Food وما هو Beverage وهو اذا لم تتم اضافة اى تكاليف للصنف بعد شراؤه فهو Beverage وللتوضيح الشاى نضيف اليه سكر اذا فهو Food وليس مشروب Beverageاما الكولا فهي مشروب عزيزي ابو عبدالله اعلم اني اطيل عليك ولكن انت قلت ان الفكرة اعجبتك واذا اردت مني اكمال الموضوع فانا معك حتى تصل الفكرة للاذهان واذا قلت توقف وارسل ملفات فانا ايضا معك واتمنى ان لا تمل مني وفي المرة القادمة ساقوم بشرح باقي الاقسام والتعريف بمهامها الاساسية ومدخلاتها ومخرجاتها وهي على النحو التالي قسم مراقبة الايرادات Income و يتراسه Income Auditor ويليه Night Auditor ويليه Restaurant Auditor ويليه General Cashier ثم F&B Cashier وكل له تخصصه وله مدخلات بيانات ومخرجات مكملة لبعضها البعض قسم المدفوعات Payable قسم المقبوضات Receivable وكل هذه الاقسام تصب بياناتها في جعبة رئيس الحسابات والذي بدوره يصب بياناته بعد المعالجات والتسويات المطلوبة للمدير المالي تحياتي للجميع وتحياتي الخاصة جدا لك عزيزي المبدع على الدوام ابوعبدالله هاني بدر
    1 point
  7. السلام عليكم ورحمة الله وبركاته ****************** نويت بإذن الله تعالى - والله الموفق - أن أقوم بالبدء في هذا المشروع الكبير الذي أطلقت عليه اسم (مكتبة الصرح .. زاخرة بالشرح) بحثت عن ملف الأستاذ الكبير عبد الله باقشير (محفظة الأكواد) للعمل عليه .. ** رجاء من الأخ عبد الله .. إضافة للفورم في هذا الملف أن تكون عملية البحث غير مقتصرة على عناوين الأكواد فقط ، بل تشمل عمليه البحث الـ ListBox الذي يحوي الأكواد نفسها ، وكذلك صفحة التعليمات ، حتى يسهل فيما بعد على الباحث أن يصل لمراده بسهولة .. الأمر مختلف قليلاً عما قدم من قبل ، إذ أن الأكواد ستكون مصحوبة بالشرح (على قدر استطاعتي ) ولمن أراد أن يزيد على الشرح فليفعل ولا يتردد.. من هنا بإذن الله ستكون الإنطلاقة الكبرى نحو المشروع الكبير .. وسأحاول جاهداً أن أبدأ عملية بناء المكتبة بشكل منظم يسهل على الباحث فيما بعد الوصول للكود الذي يرغبه ، ويعرف كيف يقوم بتطبيق الكود بنفسه دون الحاجة لغيره .. يعني مبدأ الاعتماد على النفس في تطبيق الأكواد.. وإليكم الملف المرفق به 5 أكواد فقط مدعومة بالشرح منها 3 اكواد بسيطة ، وكود صعب قليلا ، ودالة معرفة UDF كنقطة بداية .. ملحوظة الأكواد مدعومة بالشرح في صفحة التعليمات . أرجو أن ينال رضاكم ... ولا تنسوا التصحيح والتنقيح إخواني أولاً بأول ، حتى يخرج العمل في النهاية بشكل لائق يليق بمنتدانا .. يليق بالصرح العملاق ولذا أسميت المشروع (مكتبة الصرح والصرح المقصود به منتدانا الغالي .. وإن شاء الله تكون المكتبة زاخرة وممتلئة بالشرح بعون الله وتوفيقه ثم بجهودكم ومساندتكم للمشروع) Codes Library.rar
    1 point
  8. السلام عليكم ورحمة الله هذا كود يحذف الملف تلقائيا بعد 3 مرات إستخدام وإمكانية تغيير عدد مرات الاستخدام وكذلك يشعر المستخدم برسالة في آخر مرة You have exceeded the maximum of uses of this file لقد تجاوزت الحد الأقصى لعدد استخدام هذا الملف The file has been permanently deleted from your drive تم حذغ الملف نهائيا من محرك الاقراص الملف يحذف نفسه تلقائيا بعد 3 استعمالات و يشعر المستخدم بعد الحذف.rar
    1 point
  9. السلام عليكم إخواني الكرام إليكم دالة UDF تقوم باستخراج القيم بدون الخلايا الفارغة ..الشرح داخل الملف المرفق NoBlanks Function.rar
    1 point
  10. المعادله وين ربي يجزاك الجنة ويحفظك من كل مكروه ويوفقك في الدنيا والآخرة
    1 point
  11. الاخت الكريمه جربى الملف المرفق الجدول.rar
    1 point
  12. اليك يا اختي الممرضة هذا الملف ربما يساعدك ممرضة.rar
    1 point
  13. اللهم ارحم والد الأخ مختارحسين رحمة واسعه واكتب له الفردوس الاعلى واجعله من أهل فضلك ورحمتك اللهم أمين
    1 point
  14. السلام عليكم ورحمة الله وبركاته الاخ العزيز مختار حسين حفظكم الباري عز وجل كل سنة وانتم تنعمون بالصحة والعافية دائما تاتي بالجديد المفيد اثابكم الله وجعل عملكم في موازين حسناتكم دمتم في رعاية الله وحفظه
    1 point
  15. اخى الفاضل تفضل .. مرفق الملف به طلبك تحياتي data.rar
    1 point
  16. أحببت أن أشارك معكم هذا العمل العظيم وجدت هذا العمل ضمن بحثى داخل الإنترنت ولكن بالإنجليزى يا ريت ينال إعجابكم ويستفاد منه الجميع VBAcodeLibrary.rar
    1 point
  17. اخي ياسر السلام عليكم ارجو ان تقبل مني هذة المشاركة ارجوا من الله العلي القدير ان يجعل اعمالك في موازين حسناتك وان ينفع بها الناس Codes Library v1.3.rar
    1 point
  18. اخى الفاضل استبدل الكود الموجود في حدث ListBox1_DblClick بهذا الكود .. وان شاء الله تزبط معاك If Me.ComboBox1.ListIndex = 0 Then Me.TextFind1.Value = Me.ListBox1.Column(0) Else Me.TextFind2.Value = Me.ListBox1.Column(0) End If Me.ListBox1.Visible = False تحياتي
    1 point
  19. أخي عبد الله تمت الإضافة لمكتبة الصرح كود رائع بارك الله فيك الله ينور يا أبو الأنوار
    1 point
  20. جرب هذا الملف مسح خلية معينة بعد ثواني يمكنك تغيير الرنج و التوقيت من الكود مسح محتوى خلايا بعد ثواني.rar
    1 point
  21. استاذى الحبيب والقدير ياسر خليل كل سنه وحضرتك طيب جزاكم الله على خيرا على هذه المعادله واسمح لى بتقديم معادلة اخرى . =INDEX($A$2:$A$15;SMALL(IF($A$2:$A$15="";"";ROW($A$2:$A$15));ROW($A1))-1) Extract Content Form Non-Empty Cells.rar
    1 point
  22. ما شاء الله عليك ، أستاذ حسام زادك الله تألقا وعلما تقبل أجمل تحياتي
    1 point
  23. جزاكم الله خيرا ونتمنى للجميع مزيد من التقدم
    1 point
  24. انت مثل بئر زمزم ( ماشاء الله تبارك الله عليك ) كلما تاخذ منة الماء يزيد ويزيد ويزيد بارك الله فيك وفي علمك وفي وقتك وفي صحتك وجهدك
    1 point
  25. أخي الحبيب جرب الملف التالي . Test This.rar
    1 point
  26. إخواني الكرام ..ها أنا أعمل على قدم وساق ..أضفت 4 أكواد أربعة بقول أربعة ..مستفز بطبعي تفضلوا الإصدار الأخير ................>>>>>>>> Codes Library v1.2.rar
    1 point
  27. بارك الله فيك وعافاك من كل سوء وكل عام وانتم بخير
    1 point
  28. ويجزاك الجنة ان شاء الله الطريقة واضحة ...... وهي باختصار ادرجنا النموذج رقم واحد في النموذج الثاني واضفنا الكود الخاص بمربع النص في مصدر العنصر تحياتي
    1 point
  29. اخى الفاضل الجموعي جرب الملف المرفق لربما به طلبك تحياتي data.rar
    1 point
  30. السلام عليكم تفضل اخي العزيز بالتوفيق student.rar
    1 point
  31. حول التاريخ من هجرى الى ميلادى واطرح ( انا دورت كتير وفى المنتدى هنا عملت مواضيع ملقتش الطرح الهجرى ) يارب حد يساعدك ويساعدنى
    1 point
  32. جزاكم الله الجنة ... بوركت الجهد عمل اكثر من رائع
    1 point
  33. بالنسبة لرابط تحميل الجزء الثاني اللى يواجه مشكلة معاه ممكن يجرب الرابط دة http://www.gulfup.com/?4YPaO6
    1 point
  34. السلام عليكم ورحمة الله ... مشكورين على جهودكم بهذا البرنامج الرائع الصراحه برنامج جداا مميز .. لكن عندي سؤال : هل استطيع ان اغير العمله مثلا ( دولار ) $ اخليها وثانيا اغير التاريخ يبقى فقط الميلادي وشكراا وثايا اريد مساعدة .. محتاج برنامج للتقسيط والصراحه حالتي المادية ضعيفه وماعندي امكانية اشتري اذا تكدرون تساعدوني مشكورين تحياتي لكم جميعا
    1 point
  35. الحلقة السادسة ************ أهلا بكم إخواني الأحباب مع حلقة جديدة ، والحلقة دي استكمال لحلقة المتغيرات .. كنا اتكلمنا عن نوعين من المتغيرين باستفاضة (3 مرات على ما الكلمة اتكتبت معايا ) ..اتكلمنا عن النوع Integer ودا بيكون للأرقام الصحيحة ، والنوع String ودا بيكون للقيم النصية. نكمل رغي عن المتغيرات عشان نخلص منها ونخلص عليها .. بداية أحب أعرفكم بدالة في VBA اسمها CINT ..الدالة دي وظيفتها إنها بتحول أي قيمة لعدد صحيح من النوع Integer (ودي اختصار Convert Integer..الحرف الأول من Convert وأول 3 حروف من Integer) >> الكلام مش هيفيد بقدر التطبيق :: نجرب المثال التالي Dim LValue As Integer LValue = CInt(8.45) MsgBox LValue لو نفذنا الكود هنلاقي إن القيمة أصبحت 8 .. طيب نغير الرقم إلى 8.5 ونشوف النتيجة بردو نفس القيمة 8 .. طيب نغير الرقم ونخليه 8.6 خلي بالك متتوقعش 8 ، القيمة بقت 9 (تسعى في الخير) الملاحظات المستفادة : إن الكسر لو أقل من أو يساوي 0.5 .. القيمة بتتقرب لتحت ، أما لو الكسر أكبر من 0.5 يبقا يتقرب لفوق ..(يعني الدالة دي ممكن نستفيد منها في أمور تانية .. زي التقريب) جرب القيمة 8.50001 .. جربتو : أكيد لا نازلين قراية وخلاص .. اللي جرب هيتأكد من إن : لو هفوة مفيش تفاهم!! نراجع مرة تانية المتغير Integer بمثال عملي : Dim nRowCount As Integer nRowCount = Rows.Count MsgBox nRowCount أولاً عايزين نتعلم شيء مهم جداً وإحنا لسه في البداية : إننا لما نيجي نسمي متغير يا ريت يكون الاسم وصفي (يعني كل المتغيرات عندي هسميها وصفي ..شكلك بتعزه يا أستاذ ...طيب ما نسميه شوقي أو مراد ..لازم وصفي ) .. يا جدعان انتو فهمتوني غلط أنا أقصد بكلمة وصفي إنه يوصف الاسم بشكل كويس .. يعني مثلا نشوف نوع المتغير نلاقيه Integer فنقوم في أول الاسم نحط مثلا n عشان يوضح لأي حد يقرا الكود إنه Interger ، وبعد الحرف الدلالي n نكتب اسم للمتغير يكون دال عليه .. أنا مثلا هعد الصفوف فاقوم أكتب RowCount .. يبقا في النهاية اسم المتغير nRowCount ...طبعا اللي بقوله ده مش الزامي ..دي عادة حسنة بيتبعها المبرمجون المحترفون ..مش الاقي ناس تكتب mghy حاجة كدا ملهاش دلالة على اسم المتغير ...!! السطر التاني وضعنا قيمة للمتغير وهي Rows.Count وطبعا كلمة Count دي Method بمعنى (عد) ، ودي وظيفتها إنها تعد بس تعد ايه .. تعد الصفوف Rows واحد يقولي طيب ممكن أعد الأعمدة أقوله أيوا Columns.Count مفيش مشكلة .. واحد يقولي يعني ممكن أعد الخلايا في نطاق معين زي A1:C5 ، بردو مفيش مشكلة Range(Cells(1, 1), Cells(5, 3)).Count المهم خلينا في السطر التالت (محدش يخرجني برا الموضوع) .. مش محتاج شرح ..إظهار قيمة عدد الصفوف في رسالة ننفذ الكود (رسالة خطأ .. ميهمكش من الفشل .!! ) واحد هيسألني طيب الغلطة فين ..كل حاجة زي الفل .. المحرر دا بيستعبط ! أنا مش هشتغل على المحرر دا تاني سلااام .. هرد عليه وأقوله اصبر بس كل الحكاية إننا بنتعامل بقواعد وقوانين ..أنا لما عرفت المتغير حددت نوعه بـ Integer ودا بيكون للأرقام الصحيحة ما بين 32, 767 و القيمة السالبة -32, 768 يعني ببساطة بيتعامل مع الأرقام دي وبس ..ميقدرش يتعامل مع أكبر من كدا .. طيب ايه الحل ؟ ايه البديل ؟ البديل المتغير Long دا بيتعامل مع الأرقام الصحيحة بردو ، بس ما بين 2,147,483,647 -2,147,483,648 طيب نرجع للكود بتاعنا ..عدد الصفوف في إكسيل 2007 مثلا يساوي 1048576 ، والمتغير Integer قلنا إن صحته على أده ، فيقوم المتغير Long ييجي ويشيل.. يبقا كل اللي هنغيره كلمة واحدة عشان الامور تمشي تمام (نشيل Integer ونحط Long) يعني ممكن الكود يكون بالشكل ده (لاحظوا أنا هغير البادئة في اسم المتغير إلى L اختصار Long) Dim LRowCount As Long LRowCount = Rows.Count MsgBox LRowCount بكدا نكون اتعرفنا على Integer و Long في حالة التعامل مع الأعداد الصحيحة. ننتقل لجزئية جديدة .. التعامل مع الأرقام اللي فيها كسور عشرية.. مش هنطول في الكلام ، هناخد باختصار مثال عملي عشان نفهم الدنيا ماشية إزاي Dim FloatingPoint As Single FloatingPoint = 10 / 3 MsgBox FloatingPoint طيب نغير كلمة Single بكلمة Double ونلاحظ الفرق..!! مش هشرح الفرق لكن هقول إن اللي فهم الفرق بين Integer و Long ، هيفهم الفرق بين Single و Double ... حازم رفع ايده وقالي لأ يا باشا اشرحها بردو (حاضر يا عم حازم حازم هنشرحها عشان نأكد المعلومة بس مش أكتر ) لما استعملنا النوع Single نلاحظ إن عدد الأرقام العشرية 6 بس ، أما Double فنلاقي إن اللي على يمين العلامة 14 رقم (جرب الكود مرة كدا ومرة كدا وعد بنفسك (فيه ناس هتكسل)) نقطع على الجماعة المدرسين اللي بدوا رياضيات ، ونقول إن مساحة الدائرة = ط نق2 ، والله مش عارف إذا كان صح ولا غلط عموما القيمة ط = 22/7 ، ودي موجودة في الإكسيل باسم Pi ، يعني لو كتبنا في خلية =PI() هيديني قيمة الـ ط ... المهم نستفيد في المثال التالي معلومة جديدة (إننا ممكن سنتخدم بعض الدوال الموجودة في الإكسيل ونطبقها في الـ VBA) Dim FloatingPoint As Single FloatingPoint = WorksheetFunction.Pi MsgBox FloatingPoint نخلي بالنا إننا وضعنا قيمة للمتغير واستخدمنا WorksheetFunction عشان أقول لمحرر الأكواد إننا هنستخدم دالة ، وبعدين نقطة Period وبعدين اسم الدالة هنا Pi ومفيش أقواس (دا الاختلاف ..لما استخدمناها في ورقة العمل كان لازم أقواس أما هنا فلا يتم استخدامها .. نجرب مرة المتغير Single ومرة المتغير Double ..(أي خدمة يا حازم حازم .. منستغناش عن خدماتك يا متسر ياسر ياسر ) نكمل كلام عن المتغيرات عشان نخلص منها : نتكلم عن المتغير التقيل Variant ودا بنستخدمه لما نكون مش عارفين نحدد القيمة هل هي رقم ولا نص ولا كائن Object ولا ولا (ولى زمن الجهل وأقبل زمن التعلم) .. فبنستخدمها ..بس نخلي بالنا إنها بتستهلك مساحة من الذاكرة فكثرة استخدامها بتخلي التعامل مع الأكواد يكون بطيء .. المتغير اللذيذ Boolean ودا يا أبيض يا أسود .. يا صح يا غلط .. يا True يا False .. يا 1 يا صفر بتكون القيمة المخرجة إحدى قميتين فقط Dim bOfficena As Boolean MsgBox bOfficena هنا حددنا نوع المتغير بـ Boolean .. لما ننفذ الكود هنلاقي رسالة فيها False (نفهم من كدا إن الاختيار الافتراضي هو False) يعني مش زينا بنفترض حسن النية ، لا دا ماشي بمبدأ المتهم مجرم حتى تثبت براءته ، فهنا وضع القيمة False للمتغير .. نجرب نضع القيمة صفر Dim bOfficena As Boolean bOfficena = 0 MsgBox bOfficena هنلاقي نفس الناتج اللي فات False ..!! نغير شوية ونخلي القيمة أي قيمة غير الصفر ، هتلاقي الناتج True فيه متغيرات تانية زي Date للتعامل مع التواريخ ، والمتغير Currency للتعامل مع العملات وبكدا كفاية أوي على المتغيرات .. المهم في الموضوع الفكرة تكون وصلت .. للمزيد من الشروحات يرجى الإطلاع على الدورة الرائعة التي يقوم بها أخونا محمود الشريف (كلنا بنكمل بعض ..دا شعارنا في المنتدى ..أنا بس مجرد واحد معاه مفاتيح ..هديكم نسخة منها عشان تعرفوا تفتحوا الباب يا أحباب) كان معكم صانع المفاتيح Keys Maker أخوكم أبو البراء وإلى لقاء في حلقة جديدة من حلقات افتح الباب واهرب من الشباك .. دمتم بود .. تقبلوا حبي وأشواقي وتحياتي القلبية
    1 point
  36. متابعة الواجبات ************* الأخ الفاضل صلاح 15 صلاح (مش كان كفاية علينا صلاح واحد) بسم الله ما شاء الله يبدو أنك متمكن ، مش بس عملت الواجب وكمان بتشرح كل جزئية فيه .. أول ملحوظة كمعلومة جديدة كمان عشان الكل يستفيد .. فيه جملة اسمها Option Explicit دي يفضل الاعتياد على استخدامها ، ودي بتخلينا وتجبرنا لما نشتغل نعلن عن المتغيرات غصب عننا طول ما هي موجودة ، ودي بتتكتب مرة واحدة في أول الموديول وبتكون منفصلة عن الإجراء الفرعي يعني بتكون بالشكل ده Option Explicit Sub Officena() MsgBox "Hello Salah15Salah. Thank you very much" End Sub ولو حبينا نعلن عن متغير نصي هيكون بالشكل ده Option Explicit Sub Officena() Dim MyString As String MyString = "Hello Salah15Salah. Thank you very much" MsgBox MyString End Sub هنا فيه متغير نصي من النوع String وتم الإعلان عنه .. ممكن لو مفيش الجملة Option Explicit ممكن يتم الاستغناء عن الجملة الأولى ..جملة الإعلان وهنلاقي الكود تم تنفيذه ومفيش مشكلة نجرب الكود مرة تانية بس هنحط تعليق في بداية الجملة وفي بداية سطر الإعلان ونشوف النتيجة!! 'Option Explicit Sub Officena() 'Dim MyString As String MyString = "Hello Salah15Salah. Thank you very much" MsgBox MyString End Sub طيب دلوقتي بقا جرب تشيل التعليق من بداية جملة Option Explicit ونفذ الكود هتلاقي محرر الأكواد بيطلع لك رسالة خطأ ويقولك معناها إن المتغير لم يتم الإعلان عنه ..اضغط على علامة المربع الأزرق اللي على يمين المثلث الأخضر الخاص بتنفيذ الكود .. المربع الأزرق ده اسمه Reset عشان الكود دلوقتي في حالة Break زي فاصل .. وهيفضل محرر الأكواد معلم لك على سطر باللون الأصفر إشارة إلى إن فيه شيء خطأ ، ومش هيسيبك لحد ما تصلح غلطك ..لكن ممكن نهرب منه مؤقتا بالضغط على Reset (أضف إلى معوماتك) طيب جرب تنفذ تاني يمكن يحن عليك المرة دي وينفذ لك الكود (والله لو قعدت جنبه من هنا للقرن الجاي) مش هينفذ كودك طول ما الجملة دي موجودة. واحد هيقولي وأنا أربط نفسي بيها ليه سيبك منها دي باين عليها جملة رخمة وغلسة وهتقطع عليا ..! هقولك لا حاول تعود نفسك ع الصح عشان تتعلم صح .. إحنا قلنا قبل كدا إننا لازم نفشل عشان ننجح .. عمر ما فيه نجاح من غير فشل (دا حتى كدا يبقا نجاح طعمه بايخ)!! طيب معلومة تانية ..هل كل مرة أعمل موديول جديد هكتب الجملة دي بنفسي ؟ قولك لا عمنا بيل جيتس وضع في خيارات المحرر من قايمة Tools ثم Options اللي هي الخيارات اللي بيحب دائما إضافتها في البرامج بتاعته (أصله بيعز الخيار شوية).. هنلاقي تبويب اسمه Editor وفيه تاني جملة جنبها مربع فاضي نحط فيه علامة صح الجملة اسمها Require Variable Declaration وبكدا لما نيجي نعمل إضافة موديول جديد هنلاقي الجملة موجودة في كل موديول كبداية إجبارية للإعلان عن المتغيرات.. طيب نرجع لصلاح الراجل زمانه خد برد مننا بسبب التذنيبة دي من بدري (حضرتك جملة option Explicit موجودة مرتين ..دا كلام !! أكيد إنت بتعزها شويتين ، بس معزتك ليها متخلكش تخرج برا القاعدة اللي بتقول إن الجملة دي تيجي مرة واحدة بس ) ، ودي الرسالة اللي هتظهر لك لما تبدأ التنفيذ بس عموما برافو عليك ..إنت خلتني أعمل حلقة من غير حلقة وأضفنا للزملاء معلومات جديدة . حاجة تانية أخي الحبيب صلاح MyString = "ÓÈÍÇä Çááå æÇáÍãÏ ááå æáÇ Åáå ÅáÇ Çááå æÇááå ÃßÈÑ" With æÑÞÉ1 .Range("C5").Value = MyString End With يفضل إن تكون جملة الإعلان عن المتغير ووضع قيمة له في الأول قبل جملة With ... End With على فكرة الكود اللي لصقته دلوقتي فيه حاجة مش مظبوطة ... أنا تعمدت إن أسيبه كدا عشان تشوفوا اللغة العربية لما نلصقها هنا بتكون بالشكل ده (لا هي إنجليزي ولا هي عربي ..هي تيجي على عبري شوية) .. طبعا كمعلومة جديدة بالنسبة لناس كتير عشان اللغة العربية تيجي معانا بشكل صحيح بنعمل حاجة بسيطة جدا بنخلي اتجاه الكتابة في الكود باللغة العربية وبعدين نعمل نسخ ولصق هنلاقي المشكلة اتحلت (شفتوا البطاطا أقصد البساطة) Dim MyString As String MyString = "سبحان الله والحمد لله ولا إله إلا الله والله أكبر" With ورقة1 .Range("C5").Value = MyString End With الحمد لله اتحلت المشكلة .. بصراحة أشكر الأخ الغالي صلاح نظرا إنه ألهمنا بمعلومات جمة وجميلة (جمة وجميلة) من خلال متابعة الواجب الخاص بيه (بصراحة روعة يا صلاح) هو دا اللي فعلا بدور عليه إنت بالنسبة لي طالب مجتهد ومثالي!! معلومة جميلة بيقدمها لنا الأخ صلاح إننا ممكن بدل ما نكتب سطرين لوضع قيمة لمتغيرين مثلا ..ممكن نخليهم في سطر واحد وبنفصل بينهم بنقطتين i = 100: t = 150 وكمان الإعلان عن متغيرين ممكن يكون في سطر واحد زي كدا Dim i As Integer, t As Integer نشكر الأخ الحبيب صلاح من أعماق قلوبنا متمنين له دوام التوفيق (ومتحرمناش من الواجب الجميل ده .عايزين كل يوم من ده) بكدا نكون اتعلمنا من صلاح معلومات غاية في الأهمية.. الأخت الفاضلة morestudy معلش اتأخرنا عليكي في التصحيح (صلاح خد وقتنا كله ، بس كله في النهاية بيصب ليكم) المرة دي فيه تحسن ملحوظ .. الواجب جميل جدا والحمد لله مفيش أخطاء! بالنسبة لسؤالك الأول : اللي هيجاوب عليه أخونا حماده عمر من خلال المشاركة دي http://www.officena.net/ib/index.php?showtopic=56983#entry361677 السؤال التاني : نعم يمكن تنفيذ الأمر بدون أزرار لكن الزر لتسهيل التعامل مع التنفيذ ، ولكن يمكن الضغط على Alt+F8 هيطلع لنا نافذة فيها كل الأكواد اللي عملناه بنختار الكود ونضغط Run . أما بالنسبة لمعرفة الكود تم تنفيذه أم لا فدا العين هي اللي تقرره .. يعني مثلا أنا هشتغل غلى الخلية C5 أقوم أمسحها وأنفذ الكود ، لو طلعت النتيجة في الخلية زي ما انا متوقعها يبقا كدا تم التنفيذ بنجاح ..لو حصل العكس براجع الكود مرة تانية عشان أعرف الغلطة فين (حد عرف الغلطة فين؟ الغلطة فين؟ ساب الباب مفتوح ! أكبر غلطة ممكن يغلطها المبرمج إنه يسيب الباب مفنتوح (شركة الرعب المحدودة)) .. طبعا قفلنا بقوسين عشان فتحنا قوسين ..ودي مهمة في البرمجة (إننا لو فتحنا قوس يبقا مننساش نقفل القوس شفتوا الطالب النبيه اللي خد باله إني مقفلتش القوس في السطر اللي فات برافو عليك .. بس أنا كنت لسه بكمل كلامي) السؤال التالت : هناك طرق أخرى يمكن فيها الاستغناء عن Run ولكن ليس هذا هو الوقت المناسب للحديث عنها ممكن نقول باختصار إنها أكواد مرتبطة بحدث الصفحة أو المصنف ودي هييجي الكلام عنها بعدين إن شاء الله دمتم في رعاية الله وحفظه وعونه وتوفيقه والسلام عليكم
    1 point
  37. متابعة الواجبات : ************** قام الأخ الفاضل الجموعي بعمل الواجب المطلوب على أكمل وجه .. بارك الله فيك أخي الحبيب الجموعي وجزيت خيراً على هذه المتابعة الجيدة ممكن نستفيد معلومات جديدة من خلال الواجب مش هنصحح كدا ونقول صح ولا غلط وبس لا إحنا نضيف معلومة تضاف للحلقة الثالثة كملحق ليها . يا ريت المشرفين يقوموا بالمهمة دي .. عايز تجميع لكل الحلقات والملحقات للحلقات زي الملحق ده عشان يضاف للشرح لتسهيل المتابعة لمن أراد المتابعة بإذن الله . طبعا الكود اللي تفضل به أخونا الفاضل بالشكل ده Range("A1:B10").HorizontalAlignment = xlCenter Range("A1:B10").Font.Name = "Arial" Range("A1:B10").Font.Size = 14 Range("A1:B10").Font.Bold = True Range("A1:B10").Font.Color = -4165632 لو لاحطنا هنلاقي الأسطر الخمسة كلها بتبدأ نفس البداية ودا طبيعي لأن كل الشغل على نفس النطاق . ممكن تضيف لمعلوماتك إنك ممكن تستغنى عن تكرار هذه البداية باستخدام جملة With .... End With ومننساش بردو القفلة مهمة جدا نقطة تانية بالنسبة للون يمكن استبالها بقيمة vbBlue بدلا من الرقم اللي شكله يخض ده .. الأسطر كلها تحتوي على Properties أي خصائص وطبعا كل خاصية بيكون ليها قيمة ..ممكن تكون القيمة نص زي اسم نوع الخط Arial وطبعا مننساش إن النص يوضع بين أقواس تنصيص .. وقد تكون القيمة رقم زي حجم الخط ودا طبيعي لأن الحجم بيكون برقم (افتكروا التلاجة الـ 10 قدم .. رقم 10 دا حجم) .. وممكن تكون القيمة حاجة اسمها Boolean أيوا يا شيرين اسمها بولين ، ودي يا إما 1 أو 0 واحد هيقولي غلط إنت بتدي معلومات غلط هي القيمة إما True أو False هقوله صحيح .. ما هي القيمة True =1 والقيمة False = 0 ، وقد تكون القيمة عبارة عن تنسيق معين زي أول سطر xlCenter ودي شرحناها الحمد لله .. وقد تكون قيمة ثابتة vbBlue زي مثلا اللون الأزرق دا ثابت ومعرف في محرر الأكواد هيكون الكود بهذا الشكل بعد التعديل عليه .. وبكدا نكون اتعرفنا على أشكال مختلفة للقيم اللي بتيجي بعد علامة يساوي يعني دلوقتي الأخ الجموعي اختصر الكود اللي في تسجيل الماكرو بشكل رائع ، وإحنا كمان هنختصر اللي اختصره في الكود التالي فبكدا يكون دا مختصر المختصر (يعني دا المفيد) With Range("A1:B10") .HorizontalAlignment = xlCenter .Font.Name = "Arial" .Font.Size = 14 .Font.Bold = True .Font.Color = vbBlue End With آخر نقطة ممكن نتكلم فيها عشان دي أنا نسيتها إزاي نربط الماكرو بزر يقوم بالتنفيذ : معلش نسيت النقطة المهمة دي - اعذروني بسبب الزهايمر - بنروح للتبويب ومش هقول اسمه لأن كل شغلنا عليه هنلاقي فيه كلمة Insert بنضغط عليها بيفتح معانا قايمة منسدلة فيها أدوات تحكم اختار أول واحد اسمها Button (Form Control ودا أول أداة تحكم موجودة وأكثرها استعمالا ..ارسمها ببساطة على ورقة العمل وبعديها كليك يمين ثم اختر الأمر Assign Macro وحدد اسم الماكرو المراد ربط الكود به في المثال السابق مثلا دا مثلا شكل الكود بالكامل فيه اسم الإجراء الفرعي بعد كلمة Sub Sub FormatRangeA1_B10() With Range("A1:B10") .HorizontalAlignment = xlCenter .Font.Name = "Arial" .Font.Size = 14 .Font.Bold = True .Font.Color = vbBlue End With End Sub لما نعمل كليك يمين على زر التحكم هنلاقي اسم الإجراء الفرعي موجود نعلم عليه ونضغط أوك وبكدا نكون ربطنا الكود بزر تحكم ما عليك الآن إلا أن تقوم بعمل كليك واحدة على الزر لتنفيذ الأمر بكل بساطة .. الأخت الفاضلة morestudy بالنسبة لأول ملف عندك مفيش أي خطأ لا في الكود ولا في التنفيذ .. وبعدين لما يظهر خطأ يا ريت نسرد محتوى رسالة الخطأ لتحليلها .. بس الملف مفيهوش أي مشكلة. الملف الثاني أيوا فيه أخطاء المفروض إننا لازم قبل أي شيء الإشارة لنطاق محدد في الأسطر اللي في الكود خاصتك مفيش إشارة فطبيعي إنه يكون غط راجعي الكود اللي تفضل بيه الأخ الجموعي وشوفي الفرق .. وصححي الخطأ بنفسك أرجو ان تكونوا قد استفدتم إخواني الكرام دمتم في رعاية الله وحفظه
    1 point
  38. الحلقة الخامسة **************** السلام عليكم ورحمة الله وبركاته نستكمل حلقاتنا للي متابعين .. وللي مش متابعين بردو! هنتكلم النهاردة عن النطاقات في VBA وطرق تحديدها ... نبدأ الأول نعرف معنى كلمة نطاق : هل النطاق مجموعة خلايا متجاورة (جنب بعض) ولا مجموعة خلايا غير متجاورة (خلايا زعلانة ومتخاصمة فبعيد عن بعض) ؟ أعتقد إن فيه كتير فاهمين كلمة نطاق غلط .. أولا نطاق بالانجليزي Range والنطاق في الإكسيل بيكون مطاطي (مرن) بيشمل مجموعة كبيرة من المفاهيم :: الخلية الواحدة اسمها نطاق .. واحد يقولي يعني A1 دي نطااااااااااق .. إنت كدا خليت الخلية تاخد أكبر من حجمها هي مجرد خلية ، أرد وأقوله .. الخلية نطاق ومجموعة الخلايا المتجاورة نطاق ، ومجموعة الخلايا الغير متجاورة نطاق ، والصف الواحد نطاق ، ومجموعة صفوف نطاق ، والعمود الواحد نطاق ، ومجموعة أعمدة نطاق .. بس خلاااص (الحاجة الوحيدة اللي لا تصلح إنك تحدد نطاق في أكتر من ورقة عمل .. يعني الشغل كله في تحديد النطاقات بيكون في ورقة واحدة .. بمعنى آخر ميجيش واحد ويقول عايز أحدد مجموعة خلايا في الورقة الأولى + مجموعة خلايا في الورقة التانية دي لسه بيل جيتس معلمهاش) جميل لحد دلوقتي يبقا كدا اتعرفنا على لفظ نطاق ..طيب كلنا عارفين إننا عشان نقدر ننفذ أمر معين لازم الأول نحدد النطاق اللي هيتم التنفيذ عليه .. مينفعش أقول مثلا نسق الخلايا ولونها وخلي حجمها 14 - طبيعي إن اللي بيفكر كدا يبقا فاهم إن الكمبيوتر بيسمعه وعارف عايز ايه ، مفيش خلاف إننا لما بنتعامل مع الكمبيوتر مننساش إننا بنتعامل مع آلة ، يعني مهما كانت درجة تفوقها فهي غبية ، والغباء هنا صفة مش مذمومة ، الغباء اللي أقصده إنه لازم تمشي خطوات منطقية ومنطقية جدا عشان تقدر تحقق هدفك .. فأول خطوة دايما للتعامل غالبا بتكون تحديد النطاق اللي هشتغل عليه .. عشان كدا هافرد الشرح عن تحديد الخلايا والنطاقات بشكل تفصيلي .. ادعوا لي ربنا يوفقني في توصيل المعلومة) نبدأ على بركة الله .. واحد هيقولي : كل دي بداية دا إنت هتطلع عنينا ، على ما نعرف المعلومة (بس أحب أوضح إن الأمور لما تكون مفهومة تمام الفهم والإدراك ، دا بيسهل عملية التعلم بشكل كبير ؛ عشان كدا متستغربوش إني برغي كتير .. الهدف في النهاية توصيل المعلومة بأسلوب غير تقليدي) بصراحة أنا مش مرتب هشرح إزاي الموضوع نظرا لأن فيه معلومات كتير وخايف تتوهوا مني .. بس دلوقتي خطرت لي فكرة إننا نقسم الموضوع ، ونتعامل مع جزئية جزئية أول جزئية هنتكلم عليها الخلية المفردة (الخلية : زي ما إحنا عارفين عبارة عن التقاء الصف مع العمود ..معلومة قديمة .. والصف بيكون عبارة عن رقم ، والعمود عبارة عن اسم حرف .. بردو معلومة قديمة .. والخلية لما بنسميها بتكون عبارة عن اسم العمود وبعديها رقم الصف .. بردو معلومة قديمة!!) (شكلي كدا معنديش معلومة جديدة أديهالكم النهاردة !!) مثال : لو قلنا الصف الرابع والعمود الخامس ، هنعبر عنه إزاي ؟ نحسبها : نبدأ الأول بالعمود (نظرا لأن العمود رأسي وأنا رأسي مشغولة بالفكرة) ، العمود الخامس دا فين .. عشان نعرف يبقا لازم ناخد درس إنجليزي الأول ونركز على الحروف (أصلي معلم إنجليزي وعايز أسوق لنفسي دروس) ..نبدأ نقول مع بعض : A و B و C و D و E (بس خلاص وصلنا للحرف الخامس يبقا العمود الهدف هو العمود E .. بلغة البرمجة Target.Column=5 .. محدش يدقق أوي في الجملة دي ، بعدين هنعرفها ، دا كان حرف العمود ، والرقم مش محتاج نحسبه لأن الصف الهدف هو الرابع .. بلغة البرمجة Target.Row=4 (بكدا تكون عنوان الخلية الهدف هي الخلية E4 .. وبلغة البرمجة Target.Address=$E$4 السؤال الأول : كيف يمكن تحديد الخلية E4 في محرر الأكواد ؟ الإجابة : الإجابات متنوعة ، نشوف كل الطرق عشان نتعلم ... أول طريقة : استخدام الخاصية Range >> نطبق على الخلية E4 مثلا Range("E4").Select هنا لازم بعد الخاصية Range بنفتح قوس ) وبعد القوس قوس تنصيص " وبعدين عنوان الخلية .. وزي ما اتعودنا القفلة يا رجالة ... كدا إحنا أشرنا للخلية E4 ، ونقول لمحرر الأكواد حددها بكلمة Select تاني طريقة : استخدام الخاصية Cells ، ودي مختلفة شوية Cells(4, 5).Select هنا بنفتح قوس بعد الخاصية Cells وبنستخدم أرقام (رقم الصف الأول ، وبعدين رقم العمود) ودي شرحناها بالتفصيل وعرفنا إن رقم الصف 4 ، ورقم العمود E هيكون رقم 5 ، ونفس القصة بعد الإشارة للخلية الهدف نقول لمحرر الأكواد حددها بكلمة Select تالت طريقة زي تاني طريقة ..إننا نستخدم Cells بردو (إزاي دي ؟؟!!) Cells(4, "E").Select هنا لو موضوع رقم العمود دا مضايقك ، ولا يهمك هنشوف لك بديل ، ممكن تكتب اسم العمود بس مننساش أقواس التنصيص !! رابع طريقة : طريقة الباشمهندس طارق محمود (أنا سميتها كدا لأنها المفضلة عند الباشمهندس طارق) [E4].Select ويا ريت نعرف كل الطرق ، لأن كل طريقة وليها استخدامها في مواقف معينة .. دي بتيجي مع الخبرة .. نقطة أخيرة قبل ما ننتقل للجزئية التانية .. افتراضيا الشغل بالشكل ده على ActiveSheet يعني كل الأسطر اللي كتبناها ممكن نضيف قبل كل سطر كلمة ActiveSheet متبوعة بنقطة (عشان لما نبدأ نتعامل مع أكتر من ورقة نخلي بالنا .. بس لو شيلناها بيفهم محرر الأكواد إننا بنتعامل مع المصنف النشط الورقة النشطة) @ انتهى الجزء الأول@ السؤال التاني : كيف يمكن تحديد النطاق A1:C10 في محرر الأكواد؟ الإجابة : أجب بنفسك (ارحموني شوية كله عليا لوحدي ، أنا تعبت!!) Range("A1:C10").Select هنا استخدمنا الخاصية Range (واحد هيسأل هي Range خاصية ولا كائن .. أقولك هي كائن وخاصية ، هي من ضمن خواص ورقة العمل ، وفي نفس الوقت كائن (يعني ممكن نقول تابع ومتبوع) ...هنا عشان نحدد نطاق الموضوع في منتهى البساطة بنحدد أول خلية في النطاق وآخر خلية في النطاق (لما نجرب نحدد بالماوس الخلية A1 وبعدين نضغط Shift من لوحة المفاتيح ونحدد الخلية C10 هنلاقي النطاق اللي ما بين الخليتين تم تحديده بالكامل ، أنا قلت الحتة دي ليه ؟ ؛ عشان أوصلكم معلومة إننا كل اللي بيهمنا عشان نحدد نطاق بدايته ونهايته ..... نلاحظ إننا فصلنا بين البداية والنهاية بالعلامة دي : طريقة تانية : Range("A1", "C10").Select زيها بس الفصل بين البداية والنهاية بيكون بفاصلة .. وهنا لاحظ الاختلاف بنفسك (مش كل حاجة لازم نشرحها بالتفصيل .. فيه ناس بدأت تحس بالملل والرتابة ) طريقة تالتة : اننا نستخدم Range و Cells مع بعض Range(Cells(1, 1), Cells(10, 3)).Select واحد هيبص للسطر اللي فات ويقولي ايه الكلكعة دي إنت كنت ماشي زي الفل والأمور واضحة ..مالها بقت ضلمة ليه كدا ؟؟ يا حاج سعد ولا ضلمة ولا حاجة إنت بس ركز كد .. الخاصية Range بيكون وراها قوسين بين القوسين بداية ونهاية .. البداية Cells(1, 1) اللي هي مرادف الخلية A1 والنهاية Cells(10, 3) اللي هي الخلية C10 بكدا نكون حددنا البداية والنهاية داخل الخاصية Range ...أظن الأمور كدا بقت واضحة يا شوقي !! طريقة رابعة إننا نسمي النطاق في ورقة العمل .. وطبعا دي أمرها بسيط ..داخل ورقة العمل بحدد A1:C10 وأسميها عن طريق وضع الماوس في صندوق الاسم ونكتب اسم وليكن Officena Range("Officena").Select ومننساش إن Officena دي اسم للنطاق ، والاسم نص ، والنص يؤكل إذاً الجبن يؤكل ..أعتذر (سرحت في الفلسفة : الخوف جبن والجبن يؤكل إذاً الخوف يؤكل ..دا منطق فاسد) أما المنطق بتاعنا مش فاسد الحمد لله ... الاسم نص والنص يوضع بين أقواس تنصيص. خامس طريقة (طريقة باشمهندس المنتدى .. من أحب الناس لقلبي) [A1:C10].Select @انتهى الجزء الثاني@ الجزء الثالث عن طريقة تحديد خلايا أو نطاق في ورقة عمل أخرى داخل المصنف .. ودي بسيطة بس ركزوا لأنها مختلفة شوية أد كدا (طبعا محدش شايف ايدي والحمد لله ، لأنكم لو شفتوا ايدي هتدعوا عليا !!..) Application.Goto Sheets(3).Range("A1:C10") الخاصية Goto دي مش خاصية يا متنورين ، دي Method لأنها حدث أو فعل (نسينا ..كله يراجع تاني ، وإلا مش هكمل ) معناها( اذهب إلى ) ، وبعدين مسافة ، وبنحدد المكان اللي هيروحله محرر الأكواد .. نخلي بالنا هنا مستخدمناش Select والله يا أبطال مستخدمناها ، ولو استخدمناها محرر الأكواد هيفضحنا برسالة خطأ الـ Method هنا اللي اسمها Goto أغنت عن الـ Method اللي اسمها Select .. لأنه ببساطة مينفعش فعلين في نفس الوقت .. هو دا النظام إذا كان عاجبكم ... مينفعش حدثين مع بعض يا إما Select يا إما Goto طيب نجرب نستعمل Select ونشيل Goto اللي إحنا مش متعودين عليها كدا نجرب ، وإحنا واقفين في الشيت رقم واحد وننفذ السطر التالي Sheets(3).Range("A1:C10").Select شكلها صح ، لكن للأسف غلط ..لأننا دلوقتي بنتعامل مع ورقة عمل تانية ، بالتالي لازم عشان نعمل سطر زي ده ، وميكونش فيه رسالة خطأ ، لازم ولابد وحتما إننا ننشط ورقة العمل اللي هنشتغل عليها بـ Method اسمها Activate (نشط) Sheets(3).Activate Sheets(3).Range("A1:C10").Select كدا نتلاشى رسالة الخطأ ، والحمد لله ..خلاصة الكلام إننا لو استخدمنا Select أثناء التعامل مع ورقة عمل أخرى ، يبقا لازم ننشط ورقة العمل (نديها منشطات عشان متهنجش مننا .. ممكن نستعين بالأستاذ الغالي اللي غايب عننا رجب جاويش) وحتى النطاقات المسماة زي النطاق اللي سميناه من بدري باسم Officena لو أنا في ورقة عمل تانية ، مش هينفع أستخدم Select معاها بردو .. فالأفضل في التعامل مع أوراق العمل الأخرى استخدام Goto Application.Goto Range("Officena") @انتهى الجزء التالت@ وانتهت الحلقة .. مش عارف إذا كنت استوفيت الموضوع النهاردة بالتفصيل ولا لا .. بس عموما لو حد عنده إضافات بالنسبة لتحديد النطاقات يفيدنا بيها .. أنا قلت اللي عندي ، قولوا إنتو اللي عندكو (بارك الله فيكم على حسن المتابعة ، وإلى لقاء مع حلقة جديدة ومعلومات جديدة ..أستودعكم الله) الواجب : متروك لكم حرية عمل مصنف ، وتنوع فيه الطرق المختلفة للتحديد .. كان معكم على الهواء تحديداً في الكرسي الأخير من الصف الأخير في قاعة أوفيسنا .. قاعة أوفيسنا.الصف الأخير.الكرسي الأخير.تحديد(أبو البراء) دمتم في رعاية الله
    1 point
  39. الحلقة الرابعة طبعا أنا ايدي بتترعش وأنا بكتب كلمة الحلقة (الرابعة) ، دا عشان رقم 4 بقا من المحرمات في مصر .. وربنا يستر ومحدش يبلغ عننا!! فيه نقطة معينة في الشرح تعمدت إن أسيبها عشان حبيت إن حد يسألني عليها بس للأسف محدش سألني ، ودا معناه إن اللي بيتابع الحلقات مجرد متلقي يعني مش فعال .. أو فعال وخايف إنه يسأل لأحسن أضربه .. متخافوش مش بضرب ولا بحب الضرب وبحب اللي يسألني ، حتى لو كان السؤال تافه .. لإن السؤال هو طريق المعرفة .. ومن غير السؤال مش هنتعلم !! النقطة اللي بتكلم عليها حفظ الملف اللي فيه أكواد .. محدش فيكم جاتله رسالة زي دي؟ طبعا النقطة دي كان لازم نشرحها ولازم تسألوا عليها .. طبعا أول ما بتفتح الإكسيل وتشتغل عليه بيكون الملف الافتراضي xlsx .. وطول مفيش أكواد بتتم عملية الحفظ بشكل طبيعي ، أما لو كتبت إجراء فرعي أو بمجرد كتابة اسم إجراء فرعي بس حتى لو كان جواه فاضي مفيهوش أكواد ، وجيت تحفظ هتلاقي الرسالة دي ، لأن صيغة الملف اللي بيحتوي على ماكرو مختلفة عن الصيغة العادية ، بتكون الصيغة xlsm. طيب نعمل ايه ؟ أكبر غلطة إنك تضغط Yes مش أي حد يقولنا نعم نقوله ماشي غلط .. هنا لو ضغطت Yes هيحفظ الملف بدون أكواد .. لازم تتمرد وتضغط No وتحدد اسم الملف في حقل File Name أظن دي كلنا عارفينها ، وفي الحقل التالي فيه قايمة منسدلة بنختار منها تاني اختيار Excel Macro-Enabled ، وبكدا نقدر نحفظ الملف اللي فيه أكواد . طبعا هتلاقي ملف تاني موجود في المكان اللي فيه الملف الأول بس الصيغة مختلفة .. الحمد لله حفظنا الملف اللي هنشتغل عليه !! نبدأ الحلقة : هنرغي النهاردة عن المتغيرات .. لاحظت في كل الشروحات اللي شفتها إن درس المتغيرات بيكون دمه تقيل ورخم ؛ لأن كله بيكون غالبا نظري أكتر منه عملي وبيكون في درس واحد مرة واحدة . إحنا لأننا اتبعنا أسلوب مختلف تماما هنتكلم عنه واحدة واحدة متغير متغير ، وبالأمثلة والتطبيق ، ومش مهم الكم بقدر الكيف (ومحدش يفهم الكيف دي غلط) نفهم الأول يعني ايه متغير .. يعني مش ثابت (صح يا حسام .. حد عنده إجابة تانية كله ساكت يعني مفيش غير حسام اللي عارف ..)! لما نبدأ في عالم البرمجة ، مع الوقت هتلاقي نفسك محتاج الذاكرة إنها تخزن لك أرقام معينة أو نصوص ؛ عشان تستدعيها في وقت اللزوم ، وتبدأ تتعامل مع لما تستدعيها (ربنا يكفينا شر الاستدعاء) عشان نقدر نخزن الأرقام والنصوص دي لازم نستعين بالمتغير .. ييجي المتغير ويقولنا تحت أمرك يا فندم أنا في الخدمة ، وطبعا الذاكرة بردو متأخرتش عننا في تقديم المساعدة. بس المتغير له شروط عشان نقدر نستفيد منه ..أولاً عايز حاجة تسنده عشان بيتكسف يقف لوحده فبنستدعي كلمة اسمها Dim ، ومن غير الكلمة دي يبقا المتغير وحيد ومش هيرضى يساعدك (هي دي اللي بنعلن بيها عن المتغيرات) ثانياً بنديله اسم تمام .. فاكرين شروط تسميه الإجراء الفرعي تقريبا نفس شروط تسمية المتغير .. يعني مينفعش يبدأ برقم لكن ممكن الرقم ييجي بعدين في الاسم بس في أول الاسم لا .. وممنوع الحروف الخاصة زي علامة # $ % ^ & * @ عموما لو فيه حاجة غلط محرر الأكواد هيظهر لك رسالة Syntax error تعرف إن فيه حاجة غلط.. دا كان الشرط التاني للمتغير إن يكون له اسم ، تالت شرط اللي هو نوع المتغير ( ودا ضروري بس اختياري ) فزورة دي ..>> أيوا هو اختياري يعني ممكن ميتكتبش ومفيش مشكلة ، بس طبعا ذوي الخبرة يعرفوا إن كدا محرر الأكواد بيحدد نوعه بردو ، بس بيحدده نوع اسمه Variant ودا له ميزة وعيب .. ميزته إنك لو مش عارف نوع المتغير بيكون دا الافتراضي وبيعفيك من تعريف نوع المتغير .. وعيبه إنه بيستهلك مساحة كبيرة في الذاكرة .. يعني لما ربنا يكرمكم وتكتبوا أسطر كتيرة من الأكواد لو معرفناش نوع المتغير ، هيكون الكود بطيء جدا مقارنة بإننا نعرف الكود بنوع محدد ..! عشان كدا قلنا إنه ضروري يعني هو اختياري ، بس ممكن إحنا نخليه إجباري ؛ عشان نتعود على الصح من البداية (مش كدا ولا ايه!) طيب إحنا هنعرف نوعه إزاي ؟؟ إنت اللي بتحدد نوعه حسب ما تريد وهنتعرف على الأنواع بس بالراحة عليا ..أنا أحب أرغي وآخد وقتي في الرغي قبل ما أكمل بكدا نكون عرفنا شكل السطر اللي هيتم الإعلان فيه عن المتغير ، هيكون ببساطة بالشكل اللي جاي حالا هنفترض إني هخزن في الذاكرة رقم صحيح وهنسميه MyNumber Dim MyNumber As Integer أيوا نحفظ بقا الشكل دا كويس ونشوف الشروط اللي قلنا عليها انطبقت ولا لا ! أول شرط الكلمة Dim اللي هتخلي المتغير ميخافش ، وتاني شرط اسم المتغير وهو هنا MyNumber ودا أنا اللي سميته مش محرر الأكواد عشان محدش يفكر إنه لازم يكون بالاسم ده يعني الاسم إنت حر فيه إن شا الله تسميه (مكرونة) ، وبعدين هنلاقي كلمة من حرفين As ودي متكلمناش عليها دي اللي بتفصل بين الاسم والنوع .. صحيح الاسم مرتبط بالنوع بس لسه في مرحلة الخطوبة والخطوبة هتطول فنفصل بينهم بمحرم اللي هو As وأخيرا النوع Integer ودا بيستخدم للأرقام الصحيحة (أول نوع خلصنا منه الحمد لله)... يبقا خلاصة الكلام السطر ده بنقول لمحرر الأكواد إننا هنستخدم متغير باسم MyNumber وهيكون نوعه عدد صحيح (إحنا كدا بنوفر في الذاكرة مساحة وبنخلي الكود يكون أسرع لما نحدد النوع) طبعا الطالب الناصح هيقولي هو فين الرقم اللي إحنا خزناه في الذاكرة دا ملوش أثر هقوله لسه الحتة دي جاية دلوقتي .. السطر دا بس كأننا بنكلم الذاكرة ونقولها : استعدي أيتها الذاكرة آتٍ إليكي متغير بهذا الاسم ومعاه بطاقة الرقم القومي بتاعته ابدأي اتعاملي معاه .. فالذاكرة تشوف اسمه لو كان اسمه صحيح تقوله اتفضل ، وتشوف نوعه وتحجز له مكان مناسب على أده .. ما هو كل نوع على أد حجمه (زي المثل اللي بيقول كل برغوت على أد دمه) ..يعني النوع Integer غلبان وصحته على أده هتحجزله مكان صغير ، أما Variant فربنا يديله الصحة هياخد مكان لا بأس به (يا ريت تكون النقطة دي بقت واضحة) طيب بعد ما عرفنا المتغير .. نديله قيمة وعشان ندي قيمة قلنا قبل كدا لازم علامة = يساوي ، وتكون القيمة اللي عايزين نخزنها على اليمين بعد علامة يساوي مش قبليها ومينفعش نحط القيمة الأول كدا غلط .. عايزين نتعلم صح ! زي ما أخدنا في الخصائص إن كل خاصية ليها قيمة بنحددلها قيمة .. بردو المتغير بنحدد له قيمة زي كدا MyNumber = 70 يبقا إحنا كدا حددنا قيمة المتغير بـ 70 طيب واحد يقولي يعني عشان أخزن الرقم 70 في الذاكرة هكتب سطرين ، طب ما نختصرهم في سطر واحد يا معلمي (طبعا هو مش معلمي بضم الميم لا دا بقولها بكسر الميم ، على أساس إننا قاعدين على قهوة) .. وبعدين يقولي هختصره كدا Dim MyNumber As Integer = 70 هقوله جرب بنفسك هتلاقي محرر الأكواد أظهر لك رسالة خطأ .. اللي اشتغل على Visual Basic.Net الفكرة دي مقبولة لكن هنا في الـ VBA غير مقبولة.. طيب دلوقتي نطبق عملي السطرين اللي فاتوا .عايزين مثلا نحط قيمة المتغير في الخلية A1 >> Range("A1").Value = MyNumber الخلية A1 وبعدين نقطة متبوعة بخاصية أول مرة تقابلنا دلوقتي ، ودي مهمة جدا ومعناها القيمة Value .. يعني خلي قيمة الخلية A1 تساوي المتغير اللي اسمه MyNumber ، فيقوم محرر الأكواد يروح للذاكرة يسألها عندك متغير اسمه MyNumber ، ترد تقوله أيوا قاعد مرزوع هناك أهو .. يقوم المحرر يشده من قفاه (شكلها كدا أنا اللي هيتعمل فيا كدا النهاردة .. مش جايبها لبر من بدري عمال أقول 4 واستدعاء وشد من القفا ربنا يستر ..) المحرر يشوف قيمة المتغير اللي تم تخزينها ويحطها في الخلية A1 .. اعذروني إذا كنت بشرح اللي بيحصل بالتفصيل بس التفصيل دا مهم .. واحد تاني مخه شغال هيقولي طيب أنا أقدر أختصر الكود بتاعك اللي هو 3 أسطر في سطر واحد وهيطلع الناتج صح Dim MyNumber As Integer MyNumber = 70 Range("A1").Value = MyNumber هيقولي بص بقا السحر أهو الكود بتاعك في سطر واحد Range("A1").Value = 70 هقوله برافو عليك دا صحيح بس مش هو دا المهم إننا نحط القيمة 70 في الخلية A1 وخلصت الحكاية .. الفكرة إن المتغير هنستخدمه مثلا في أكتر من سطر .. وليكن هستخدمه 10 مرات .. لو أنا سمعت كلامك يا نبيه يبقا لو حبيت أغير قيمة المتغير لـ 100 مثلا هضطر أدور على القيمة 70 في كل أسطر الكود وأغيرها 10 مرات .. لكن بالطريقة اللي قلت عليها المتغير لو حبيت أغيره هغيره مرة واحدة بس في أول الكود وخلصت الحكاية!! دي نقطة نقطة تانية إن ممكن يتم على المتغير عمليات حسابية متداخلة ، فلو استعملنا القيمة من غير المتغير هيكون صعب التعامل مع الكود طيب نجرب نحذف كلمة Dim من الكود ونخلي الكود بالشكل ده MyNumber As Integer MyNumber = 70 Range("A1").Value = MyNumber شيلنا كلمة Dim الغريب إن محرر الأكواد مبيديش خطأ لما بتشيلها .. لكن ساعة التنفيذ يخضك برسالة ويقولك معنى الكلام ده إن المتغير مينفعش يتم الإعلان عنه إلا بكلمة Dim ، وإلا سيتعبر الإعلان غير قانوني وسيتم إحالة الكود للمحاكمة (مش بقولكم مش جايبها لبر) بكدا نكون اتعرفنا على أول نوع من المتغيرات اللي هو Integer !! نتعرف سريعا على نوع تاني مشهور جدا اللي هو String ودا بيكون للقيم النصية بالمثال يتضح المقال : Dim Myname As String Myname = "Yasser" MsgBox Myname طبعا بقت الأمور أوضح دلوقتي المتغير اسمه Mname ونوعه String يعني نص .. وتم وضع القيمة النصية Yasser له ، ومننساش مع النصوص أقواس التنصيص .. وآخر سطر مش محتاج إني أشرحه بس نلاحظ في آخر سطر فايدة تانية للإعلان عن المتغيرات .. هنا لما حطينا القيمة النصية Yasser وأسندناها للمتغير Myname ، لما نيجي بعد كدا نستخدمه خلاص هنرتاح من أقواس التنصيص .. وهنعتبر دي فايدة تانية يلا بقا خدوا الواجب عشان أنا تعبت ... 1 - قم بالإعلان عن متغير بأي اسم يعجبك من أي نوع يعجبك وخليه يظهر في الخلية C5 ويظهر معاه رسالة مضمونها أنه قد تم وضع القيمة للمتغير اللي إنت سميته في الخلية C5 2 - قم بالإعلان عن متغيرين من النوع Integer وقم بعمل عملية جمع وناتج الجمع في الخلية E5 إلى لقاء مع حلقة جديدة من حلقات افتح الباب وزغردي يا رباب (دا إذا عدا اليوم بسلام ومكانش فيه استدعاء) دمتم في عون الله وحفظه
    1 point
  40. الحلقة الثالثة طبعا واحد هيقولي ارحم نفسك .. كفاية كدا النهاردة ..!! أقولك ايه النهاردة أجازة وبعدين أنا عايز أخلص الشوية اللي دايما بنطول فيهم عشان نبدأ نتعلم جديد .. مش كل اما دورة تبدأ تلاقي الموضوع يبقا زي الفل وياخد وقته في البدايات والأساسيات وفجأة الدورة تتقطع .. هنتكلم شوية في الحلقة دي عن تسجيل الماكرو .. واحد رفع ايده وبيقول أيوا أنا متمكن فيها (أقوله كتر خيرك !) بس أنا مش عايزك متمكن .. إحنا بس هنستفيد من حكاية التسجيل دي في أمور معينة .. واحد تاني هيرفع ايده ويقول طيب أنا أقدر أعمل الكود بالشكل اللي أنا عايزة من غير ما يكون عندي فكرة بالأكواد ووجع الدماغ هقوله إنت صح وغلط .. صح من جهة وغلط من جهة .. بس مش هناقش الموضوع ده المهم نبدأ نشوف ايه حكاية التسجيل دي.. قبل ما نبدأ نتعلم إزاي نخلي نافذة الإكسيل ونافذة محرر الأكواد جبنا إلى جنب خلي عينك ع الاتنين ..!! نفتح الاتنين (بلاش الجمعه عشان أجازة الموظفين) نفتح النافذتين وبعدين نفعل نافذة الإكسيل ونضغط على علامة الويندوز اللي ف لوحة المفاتيح اللي ما بين CTRL و ALT في الناحية الشمال .. لو ملقتهاش يبقا إنت مرجعتش لوحة المفاتيح اللي قلت لك رجعها أو رجعتها بس نصب عليك تاني !! بنضغط على زر الويندوز + سهم شمال مثلا .. ونروح نفعل النافذة التانية ونضغط على زر الويندوز + سهم يمين . بحيث تكون النافذتين جنب بعض عشان نتأمل في جمالهم وهما جنب بعض كدا زي عريس وعروسة .. في محرر الأكواد : هندرج موديول جديد أو مش شرط .. وفي الإكسيل هنروح للتبويب Developer طبعا خلاص عرفنا إزاي نوصله ونضغط على Record Macro قبل ما نضغط منستعجلش نبص الأول على الشكل المرفق مع الأمر هنلاقي علامة دايرة حمرا ولو ركزنا في شريط الحالة اللي في أسفل تطبيق الإكسيل هنلاقي نفس العلامة .. معنى كدا إن تسجيل الماكرو متاح في التبويب وفي شريط الحالة (أضف إلى معلوماتك) لما نضغط عليه هنلاقي نافذة طلعت لنا بنسجل فيها اسم الماكرو واتعرفنا شروط الاسم ..وممكن نعمله اختصار وأنا مش بحب الحركة دي لأن الإكسيل ملياااااااااان اختصارات فممكن يحصل تعارض ما بين اختصارات الإكسيل والاختصار اللي سيادتك هتعمله .. إحنا شوية وهنتعلم إزاي نربط الكود بزر لتشغيله من داخل الإكسيل أو ورقة العمل أفضل. وبعدين بيقولك هتخزنه فين وأنا أفضل تتركه زي ما هو This Workbook لو فتحت القايمة دي هتلاقي فيه مصنف باسم Personal.XLSB ودا بيكون مكانه في البارتشن C: وبيكون مخفي وممكن تظهره عن طريق التبويب View ثم Unhide هتلاقي اسم المصنف موجود ممكن تظهره ..أنا بقا لا أحب أظهره ولا أخفيه أنا بحذفه عشان بيضايقني بظهوره في محرر الأكواد في نافذة المشروع .. دا مجرد ارتياح شخصي وطبعا إنت ليك كامل الحرية في حذفه أو عدم حذفه عشان ممكن شركة مايكروسوفت تزعل مني عموما المصنف دا لزمته ايه .. المصنف معمول إنك تخزن فيه الأكواد الخاصة بك عشان تقدر تنفذها في أي مصنف مفتوح بدون إدراج الكود مرة أخرى (بس يا سلام بقا لو أكوادك كلها اللي بتستعملها محفوظة فيه ومعندكش منها نسخة تانية وفجأة الكهربا تقطع ودا مبيحصلش كتير في مصر والحمد لله تلاقي الويندوز سقط والحمد لله أكوادك في خبر كان ) عموما هي ميزة بس أنا شايفها مش ميزة .. بالنسبة لمسار المصنف دا بيكون في : C:\Users\Administrator\AppData\Roaming\Microsoft\Excel طبعا Administrator دا اسم المستخدم بيختلف من جهاز للتاني .. روح للمسار ده هتلاقي المصنف احذفه وريح بالك (ليك مطلق الحرية) أنا طبعا شرحته بالتفصيل أهو رغم إني مش بستخدمه بس عشان محدش يقول إني قصرت ... آخر حاجة وصف الكود واللي هتكتبه هنا هيظهر لك على شكل تعليق .. بصراحة دي بقا رغم إن فيه كتير بيطنشها بس أنا شايف إنها مهمة .مهم جدا توثق أكوادك بتعليقات عشان تقدر بعد فترة لو حبيت تعدل على الأكواد تكون الأمور واضحة بالنسبة لك .. هتقولي أنا اللي كاتب الكود وحافظ كل كبيرة وصغيرة فيه ... يتهيأ لك والله أنا ساعات أندمج في كتابة كود بشكل معين وبعد فترة أحتاج للكود تاني أقوم أروح للكود الاقي نفسي تايه رغم إني أنا اللي كاتبه ومطبقه قبل كدا .. التوثيق مهم صدقوني .. المهم بيظهر التعليق في الكود بلون أخضر .. طيب إزاي أعمل تعليق طبعا بيكون بالضغط على ' طبعا اللي نظرهم ضعيف مشافوش .. لما يكون اتجاه الكتابة إنجليزي نضغط حرف الطاء اللي بعد العلامة دي بيتم تجاهله تماما يعني متقلقش مش هيتنفذ الأمر لو كان قبله علامة ' دي .. جمد قلبك واضغط أوك هتبدأ عملية التسجيل (وطبعا مننساش المايك والكاميرا يكونوا راكبين في الجهاز وكله تمام بس المشكلة إننا مش محتاجينهم اخلعهم تاني يا مراد بلاش وجع قلب) اضغط أوك ولاحظ علامة التسجيل اللي قلنا عليها من بدري هنلاقيها اتغيرت لشكل مربع صغير لونه أزرق اللي هو دليل إن التسجيل شغال .. العلامة موجودة زي ما قلنا في التبويب وفي شريط الحالة كمان (بيل جيتس مش حارمنا من حاجة أبداً) طيب واحد هيقولي خلص ابدأ تسجيل عشان الوقت هيتحسب في التسجيل هقوله متقلقش التسجيل بيكون لكل حركة إنت بتعملها ملهاش علاقة بالوقت ... طيب نعمل ايه ؟ فكروا معايا أنا بحاول الاقي فكرة .. قول إنت يا جمال .. جمال رد وقال : حدد الخلية اللي فيها اسمي وخلي المحاذاة لليمين .. الخلية اللي فيها اسم جمال هي A3 مثلا ننقر عليها بزر الماوس الأيسر (تعليم تقليدي) يا عم حدد الخلية بس خلاص وبعدين من التبويب Home نعمل محاذاة لليمين (اللي ميعرفش يسأل اللي جنبه) نسيت أقولكم على أهم حاجة (منك لله يا جمال نسيتني كنت عايز أقول ايه) .. عنينا وإحنا نسجل على محرر الأكواد (إنتو نسيتو إن النافذتين مفتوحتين ولا ايه ) عشان نشوف سعادته شغال إزاي .. نبدأ تاني نحدد الخلية A3 واحد هيقولي مفيش حاجة حصلت هقولك عشان إنت واقف في المكان الغلط .. لما بنيجي نسجل الماكرو بيتم إضافة موديول جديد يعني ارجع تاني خطوة لورا واضغط على موديول 2 اللي تم إدراجه من غير ما تاخد بالك.. دبل كليك عليه عشان تتابع من الأول .. معلش يا جماعة أنا مركز على حكاية المتابعة دي عشان تقدروا تستفيدوا من التسجيل نحدد الخلية A3 هوب اقف عندك Range("A3").Select السطر دا اتكتب لوحده يا سلام سلام دا أحلى كلام ولا في الأحلام .. بيكتب لوحده يا عمر .!! طيب نحدد خلية تانية هنلاقي السطر اللي فات اتغير وأصبح A4 ايه الحكاية هي الأسطر مش بتفضل ثابته .. أقولك آه بتفضل ثابتة لكن الشغل بيكون على خلايا محددة يعني إنت حددت A3 وبعد شوية غيرت رأيك وحددت A4 هتلاقي محرر الأكواد غير رأيه عشان مينفعش يشتغل على اتنين في نفس الوقت إلا إذا حددتهم مع بعض نروح للتبوبيب Home وركز عينك على محرر الأكواد هتلاقي With Selection .HorizontalAlignment = xlRight .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With كل دا تم إضافته لما دوست على محاذاة لليمين .. طيب جرب بقا إنت اعمل شوية تنسيقات هتلاقي الدنيا بقت هيصة .. طبعا دا كله ميلزمناش أقصد الأسطر الكتير دي كلها أنا يهمني المفيد وبس ..يعني ممكن أختصر الكود اللي فات أقولك آه وبسطر واحد بس مش بدا كله بالشكل ده Range("A3").HorizontalAlignment = xlRight شفتوا بقا إني أشطر من التسجيل .. طبعا دا اللي يأكد كلامي في الأول إنه مينفعش نستخدم التسجيل بشكل دائم وبردو منستغناش عنه ..طيب ايه الفايدة إننا بندور على اللي يهمنا ونبدأ نكتبه بطريقتنا .. طبعا اتعلمنا إزاي نشير إلى الكائن Range بنفتح بعديه قوس وعلامة تنصيص ومننساش بردو نفس القفلة بس علامة التنصيص الأول وقفلة القوس ..معلش أصل الجو برد شوية عليه.. بعد كدا بنتبعه بنقطة ونكتب الخاصية Property طبعا خلاص استوعبتوها كويس HorizontalAlignment معناها محاذاة أفقية وطبعا قلنا إن الخاصية بيتحدد ليها قيمة وهنا القيم معروفة المحاذاة بتكون إما لليمين (ربنا يجعلنا من أهل اليمين) XlRight وإما توسيط وإما محاذا لليسار XlCenter (واحد متوقع إني هقول ربنا لا يجعلنا من أهل الشمال .. بس أنا هكسفه ومش هقولها) XlLeft >> أظن كدا بقا الكود واضح .. يعني التسجيل اللي اتعمل في 12 سطر (أراهن فيه ناس هتعد ورايا) عملناه في سطر واحد ..بس أنا استفدت ايه إني أقدر أطلع الكلمات اللي عايزاها وأشكلها زي ما أنا عايز .. يعني خلاصة الكلام في الحلقة دي إحنا اشتغلنا خبازين (خدنا العجينة اللي هي الماكرو المسجل .. وشكلناها بمهارة عشان تقدر تطلع بالشكل اللي إحنا عايزينه ) وإلى لقاء مع رغي جديد .. الواجبات : قم بتسجيل ماكرو حدد فيه النطاق من A1:B10 وخلي نوع الخط أي نوع ترغبه وحجم الخط 14 ولون الخط أزرق بلاش الأحمر عشان واحد هيقولي ايه حكايتك مع اللون الأحمر وخلي عريض Bold يعني وخلي المحاذاة الأفقية توسيط .. وطبعا اللي هيجيب الواجب تسجيل ماكرو مش هقبله منه .. أنا عايزك تختصر الأسطر الكتير اللي هتظهرلك في أسطر قليلة ... في رعاية الله كان معكم أخوكم أبو البراء من فرن أوفيسنا (يلا ورورني مين هياكل العيش طازة)
    1 point
  41. الحلقة الثانية ونبدأ حلقة جديدة من حلقات مسلسل افتح الباب يا عبد التواب .. اتعلمنا المرة اللي فاتت إزاي ندخل على محرر الأكواد وإزاي نضيف كود واتعرفنا على نافذة المشروع .. دلوقتي جه الوقت اللي لازم تعرف فيه الهيكلة العامة للتعامل مع الأكواد .. يعني ايه ؟ هضرب مثال ليتضح المقال : أنا ساكن في عمارة كبيرة (العمارة زي تطبيق الإكسيل 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
  42. السلام عليكم اليك مرفق يحدد صلاحيات المستخدمين قم بعمل الجدول باى من الصفحات الموجوده جرب وبانتظار الرد الدعم الفنى انت فقط من يقوم بالعمل علية ويسمح لك بكل شئ صلاحيات المستخدمين - الاصدار 2.zip الشرح.zip
    1 point
  43. بسم الله الرحمن الرحيم وبه نستعين الاخت الفاضلة / ميارالتابعى السلام عليكم ورحمته الله وبركاته دالة IF هى إحدى الدوال المنطقية ومعناها عربيا لو فلوذاكرات نجحت ...... فمنطقيا إن لم تذاكرترسب وتنقسم دالة IF الى ثلاثة أجزاء الاول شرط الاختبار logical-test الثاتى حالة تحقق الشرط value – if - true الثالث حالة عدم تحقق الشرط value – if – false كما فى المرفق
    1 point
  44. السلام عليكم ورحمة الله وبركاته اخى الكريم شكلك شغال فى شئون الموظفين لانك بجد عامل تصوير للبرنامج رائع وانا فعلا حاولت كتير اوصل لحل لشغلى ده من ربط قاعدة البيانات بموقع مقيم وللاسف فشلت ولكن اعانك الله على هذا العمل الممتاز واسمحى لى بعرض افكارى فى هذا المجال طبعا بيكون فيه : 1- عمالة جديدة بسجل هذه البيانات فى جدول عادى :(الاسم ،رقم الحدود، الجنسية، قيمة السلفه، الراتب، بدل اضافى، المهنة ،التوقيع ) بعمل كشف كل فترة فية تاريخ اليوم الى بستلم العمالة دى وابعته الى الفرع عن طريق الايمل للموظف المسئول هناك واطبع نسخة عندى . 2- فيه كمان الهروب وتقارير بالهاربين عشان نخلى مسئولية 3- المخالفات المرورية وسداد المبالغ المستحقة ودى بقى بتعمل لى مشكلة عشان مخالفة منسية فزادت ممكن اشيلها انا بقى 4- سداد الاقامات برضه محتاج شغل وتفكير بعمل تقرير بالاقامات قبل ما تنتهى والمبالغ المستحقة ولو فيه غلط بالطباعة اسم اتكرر اقامة اتسدد اكتر من مرة اقامة طوفت الخ .......... 5- رخص سيارات ومتابع السيارات 6- خطابات داخلية 7- كمان فيه حديثى الدخول كبرت الموضوع انا اقوى بس ان شاء الله ربنا يوفقك للخير وونفعنا الله جمعيا بما قدمت لنا
    1 point
  45. السلام عليكم ورحمة الله وبركاته الاستاذ ضاحي المحترم جزاك الله خيرا الله اكبر على شغلك انت كنت فين من زمان اخوك شغال فى شئون الموظفين فى السعودية تعبت اقوى عشان اعمل قاعدة بيانات للشركة بس بجد شغلك هايل بس بعد اذن معاليك من خلال الاطلاع السريع لاحظت الامور فى قاعدة البيانات 1- ليه بعد الخول يظهر فورم بيانات الوثائق يعنى ممكن اظهار فورم اهم وفى هذا الفورم عند الضغط على القائمة الرئيسية من هذا الفورم بتظهر رسالة خطا (424 2 - اوقات البرنامج بيعلق بيختفى موش بيظهر موش عارف ليه امكانيات جهازى عالية 3- فى ورقة data عند تغير القطاع لا يتغير فى باقى الاوراق 4- صفحة تقرير الصلاحية عند الضغط على ازار الاوامر باعلى الصفحة يظهر خطا رقم 75 ، 5- صفحة <=30 زر total لا يعمل . وفقك الله وبعد اذن حضرتك ممكن اقترح اضافة بعض الامور حتى يكون برنامج كامل شامل لكل اعمال شئون الموظفين فى مشاركة اخرى ان شاء الله
    1 point
  46. عزيزي ابو عبدالله اسف على مانسيت ان اذكره في اسباب الصرف والتي منها إرتجاع البضاعة ومرفق شكل الريسيبي والمطلوب فيه Master Recipe.rar
    1 point
  47. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته اشكر الجميع واتمنى من الله ان تكون مشاركتي فعالة تخدم كل من له علاقة بالمجال بالطبع عزيزي ابوعبدالله اوافقك تماما على هذه الفكرة فلو علمت ان تكلفة مثل هذا البرنامج قد تصل الى مئات الالوف لما ترددت في اكماله. وارجو ان يوافقني الجميع على البدء في تنفيذه لنبدا على بركة الله خطوة بخطوة اولا : كتصور مبدئي لشكل البرنامج فكبداية يجب عمل ال Chart سواء اكان للاصناف او للحسابات المالية وبنفس فكرة برنامج القدير ابو عبدالله مشروع 2 سيتم تسجيل الشجرة ثانيا يجب ان تكون هناك نافذة لادخال ارصدة افتتاحية اصناف وحسابات مالية كمرة واحدة لاتتكرر ولكن يمكن التعديل فيها بكلمة مرور من المستوى المتقدم ثالثا يجب التعرف على الدورة المستندية(المستندات التي سيتم تسجيل بياناتها التي سيتم بناء البرنامج على اساسها رابعا يجب تحديد صلاحيات لكل مستخدم سوف اطرحها في وقتها خامسا معرفة مخرجات عملية تسجيل البيانات وساقوم برفع شكل التقارير المطلوبة بشكل يومي او بشكل شهري او سنوي ولتكن البداية مع المخزون والذي سبق وان اوضحت اركانه الرئيسية والمستندات الرئيسية المستخدمة ستكون (بدون توسيع نطاق المستندات) هي فواتير الشراء (سواء اكانت نقدية او آجلة )وفواتير الارجاع للمورد واذون استلام البضاعة و( سندات صرف البضاعةو سندات تحويل داخلي ) Debits To Cost و(شيكات البيع في كل Area او Outlet (وشيكات الاوفيسر وشيكات الضيافة ومستند اتلاف او اهلاك بضاعة) Credits to Cost الاخ الجليل ابو عبدالله الموضوع اعلم انه ليس بالسهل ولكن عندي الثقة الكاملة في قدرتك ان شاء الله على اكماله على احسن صورة بفضل خبرتك الواسعة في مجال البرمجة. وفيما يخص Recipe الاصناف ففكرته تقوم على تحديد مبدئي ولكن محسوب جيداً لمكونات صنف سيتم بيعه من خلال تصنيعه بمكونات مأخوذة من Chart الاصناف ثم اضافة نسبة تجهيز تتراوح بين 4 و 5 % من اجمالي تكلفة المكونات .وهذه النسبة متروكة لرؤية محاسب التكاليف فمثلا الصنف س يستمر على النار لمدة 10 دقائق وغيره قد تستمر لمدة 30 دقيقة وهكذا ..... وبناء عليه يمكن تحديد سعر بيع المنتج وتحديد نسبة التكلفة له ومفهوم التكلفة هنا يعني بالبلدي (احنا بندي الطباخ بضاعة 40 جنيه يبيعها ب 100 جنيه يبقى تكلفة المنتج 40 % ندخل في تفاصيل هامة : دورة المستندات ستكون بالشكل التالي فاتورة شراء يتم تسجيل بياناتها لتكون عندي تكلفة الاصناف المشتراة وباذن الاستلام سيكون لدي رصيد البضائع داخل المخازن ( 4) التي تم تحديدها وعند عمل سند صرف من المخازن يجب معرفة المكان الذي سيتم الصرف اليه وكذلك تكلفة الاذن بالكامل وهنا يجب الاشارة على ان غالبية الفنادق تعمل بنظام متوسط حركي للمخزون صنف مثل الطماطم دخل المخازن يوم 3 في الشهر 50 كيلو بسعر 4 جنيه للكيلو وفي يوم 6 دخل كمان 50 كيلو ولكن بسعر 5 جنيه للكيلو فلو تم صرف بضاعة يوم 5 فالسعر هيبقى 4 جنيه للكيلو اما اذا تم الصرف يوم سبعة فسيكون السعر 4.5 جنيه. وحتى لااطيل عليكم فساقوم برفع ملف قديم عندي كنت قد صممته من فترة بعيدة وهو يؤدي الغرض ولكن بعد ان نرى الردود والمساهمات وسامحوني جميعا فالوقت ليس معي بحكم وظيفتي التي تستهلك مني اكثر من 14 ساعة عمل ولكن ارجو ان تتقبلوا عذري ولتكن هناك مساهمات من الاخوة المهتمين بالموضوع هاني بدر
    1 point
×
×
  • اضف...

Important Information