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

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

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

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

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


    • نقاط

      8

    • Posts

      13165


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

    ياسر العربى

    الخبراء


    • نقاط

      5

    • Posts

      1510


  3. طلعت محمد حسن

    طلعت محمد حسن

    الخبراء


    • نقاط

      4

    • Posts

      774


  4. جلال الجمال_ابو أدهم

    • نقاط

      4

    • Posts

      1417


Popular Content

Showing content with the highest reputation on 09/27/16 in all areas

  1. بسم الله الرحمن الرحيم للتسهيل في استخراج مواد الرسوب للطلبة تم عمل هذه الدالة لاستخراج المواد الراسب فيها او متغيب يشترط وجود صف الدرجة العظمى ودرجة النجاح نضع هذا الكود في موديول Function ASEEL(x As Range) Dim D As String For Each Rng In x If Rng = "" Then GoTo 1 If Rng < Cells(5, Rng.Column) Or Rng = "غ" Then D = " (" & Cells(3, Rng.Column).Text & ")" & D End If 1 Next If D <> "" Then ASEEL = D Else ASEEL = "ناجح ومنقول" End If End Function ونضع هذه الدالة في الملاحظات داخل الكشف ونسحبها نزولا كما موضح بالمرفق =ASEEL(D6:J6) وشكرا دالة معرفة لاستخراج مواد الرسوب.rar
    2 points
  2. تم رفع هذا الكود فى مشاركة منفصله حتى لا ننسى هذه المشاركة برنامج محاسبة لادارة مكتبة تم ارفاق المشاركه من الفاضل _ أ / طلعت محمد حسن و لا تنسونا من صالح الدعاء تحياتى مكتبةsama.rar
    2 points
  3. السلام عليكم ورحمة الله وبركاته أقدم لكم اليوم درس تعليمي في منتهى الأهمية حول كيفية استخدام الدالة VLOOKUP داخل الـ VBA ، حيث يوجد ميزة استخدام دوال الإكسيل التي نستخدمها في أوراق العمل داخل محرر الأكواد في الملف المرفق مثال بسيط لتتضح الصورة بشكل أعمق ، وقد قدمت طريقتين مختلفتين لتنفيذ المطلوب ، مع شرح بالتفصيل لكل سطر من أسطر الكود بفرض أن لديك مجموعة من الأسماء في العمود الأول ، والمطلوب هو البحث عن اسم محدد ، وإظهار عمر هذا الشخص في رسالة نصية. المثال بسيط والغرض منه تعلم كيفية استخدام الكائن التابع لتطبيق الإكسيل والمسمى WorksheetFunction ، وكذلك تعلم كيفية استخدام الكائن المسمى Dictionary للمزيد انقر على الرابط التالي رابط الموضوع من هنا
    2 points
  4. شرح مبسط لطريقة عمل الكود Sub YASSER_ELARABY() 'YASSER_ELARABY Dim ARR Dim ARRY Dim ARRYS Dim R As Long Dim X As Long Dim ALL_LESS As String Const STATUS As Byte = 101 'عمود الحالة ناجح او دور ثان Const NOTES As Byte = 102 ' عمود الملاحظات عمود المواد او منقول للصف ا لاخر Const GENDER As Byte = 112 ' عمود الجنس ذكر او انثى '_____________________________________________________ Const LESS_ROW As Byte = 6 'صف الدرجة الصغرى Const NAM_ROW As Byte = 2 'صف اسماء المواد Const NAME_FIRST As Byte = 7 ' اول صف لاسماء الطلاب Const NAME_LAST As Long = 206 + NAME_FIRST ' عدد الطلاب '_____________________________________________________ ARR = Array(9, 18, 27, 36, 46, 52, 54, 59, 64, 69, 78) ' اعمدة اختبار الفصل الدارسي الثاني لجميع المواد ARRY = Array(13, 22, 31, 40, 51, 52, 57, 62, 67, 72, 82) 'اعمدة الدرجة النهائية لجميع المواد ARRYS = Array(5, 14, 23, 32, 41, 52, 53, 58, 63, 68, 74) 'اعمدة اسماء كل المواد '_____________________________________________________ With Sheet2 'اسم شيت البيانات For R = NAME_FIRST To NAME_LAST ' حلقة تكرارية تبدأ بأول اسم طالب الى اخر اسم For X = 0 To UBound(ARR) ' حلقة تكرارية تبدأ من الصفر الى اقصى مصفوفة اعمدة اختبار الفصل الدارسي الثاني On Error Resume Next Application.ScreenUpdating = False 'الغاء تحديث الشاشة 'هذا الجزء خاص بمادة العلوم تحديدا الفصل الدراسي الثاني لانه مقسم على عمودين فتم اضافة هذا الجزء ليتم معالجة هذه المرحلة If ARR(X) = 46 Then 'لايوجد اختلاف بين هذا الكود وبين الكود الموجود بالاسفل If Val(.Cells(R, ARR(X))) + Val(.Cells(R, ARR(X) + 1)) < Val(.Cells(LESS_ROW, ARR(X))) Or .Cells(R, ARR(X)) = "غ" Or .Cells(R, ARR(X) + 1) = "غ" Then ALL_LESS = ALL_LESS & .Cells(NAM_ROW, ARRYS(X)) & " - " GoTo 86 'هنا يتم تخطى عمل الكود بالاسفل حتى لايتم معالجة مادة العلوم مرة اخرى Else GoTo 86 'وهنا ايضا يتم تخطى مادة العلوم الى المادة الاخرى End If End If 'هنا يتم مقارنة المواد بالدرجة الصغرى الخاصة الفصل الدارسي الثاني في اول الكود او اذا كانت غياب يتم اضافة اسم المادة من صف المواد الى المتغير 'ALL_LESS 'او مقارنة الدرجة النهائية لكل مادة بالدرجة الصغرى لها او اذا كانت غياب اذا تحقق الشرط فيتم اضافة المادة الى المتغير 'ALL_LESS If .Cells(R, ARR(X)) < .Cells(LESS_ROW, ARR(X)) Or .Cells(R, ARR(X)) = "غ" _ Or .Cells(R, ARRY(X)) < .Cells(LESS_ROW, ARRY(X)) Or .Cells(R, ARRY(X)) = "غ" Then ALL_LESS = ALL_LESS & .Cells(NAM_ROW, ARRYS(X)) & " - " End If ' 86 Next X 'الذهاب الى المادة الاخرى لاعادة تطبيق الكود مرة اخرى حتى انتهاء جميع المواد '_____________________________________________________ 'هنا بعد اكتمال الكود يتم عمل شرط للمتغير 'ALL_LESS 'اذا كان المتغير فارغ اي لم يتم اضافة اي مواد به اذا الطالب ناجح If ALL_LESS = "" Then If .Cells(R, GENDER) = 1 Then .Cells(R, STATUS) = "ناجح " 'اذا كان نوع الطالب ذكر يتم وضع ناجح If .Cells(R, GENDER) = 2 Then .Cells(R, STATUS) = "ناجحة " 'اذا كانت انثى يتم وضع ناجحه If .Cells(R, GENDER) = 1 Then .Cells(R, NOTES) = "ومنقول " & INFO.Range("B14") 'ويتم وضع في الملاحظات منقول الى ويتم جلب الصف من صفحة الانفو If .Cells(R, GENDER) = 2 Then .Cells(R, NOTES) = "ومنقولة " & INFO.Range("B14") 'مثل ماسبق 'اما اذا كان المتغير يحمل اي بيانات لمواد يصبح الطالب له دور ثان ElseIf ALL_LESS <> "" Then If .Cells(R, GENDER) = 1 Then .Cells(R, STATUS) = "له دور ثان في" 'مثل ما سبق بخصوص النوع If .Cells(R, GENDER) = 2 Then .Cells(R, STATUS) = "لها دور ثان في" ' .Cells(R, NOTES) = Left(ALL_LESS, Len(ALL_LESS) - 2) 'هنا يتم وضع قيمة المتغير اي المواد في خلية الملاحظات ALL_LESS = Empty 'تفريغ المتغير لاعادة تعبئة اسم طالب اخر End If Next R 'الذهاب الى الصف التالي حتى انتهاء عدد الطلاب End With Application.ScreenUpdating = True 'اعادة تحديث الشاشة End Sub الكود به بعض التعديلات البسيطة
    2 points
  5. الأخ الكريمmohamedmomtaz السلام عليكم يرجى الطلاع على تعليمات المنتدى بتغيير الأسم الى اللعة العربية جرب المرفق التالى لعلة يفى بالغرض ونسألكم الدعاء abo_abary_شيت الرواتب تجريبي.rar
    2 points
  6. اولا وقبل اى شئ انا مجرد طالب علم ولما تحب تكلمنى اسمى محمد بدون القاب نهائيا ثانيا : انا قلت لحضرتك فى المشاركة السابقة طيب اول شئ جرب دى وبعد كده لو ده طلبك نتناقش طالما حضرتك وجدت ضالتك هل من الضروري ان يكون الجدول الفرعي له مفتاح اساسي حتى يتم له الربط مع الكمبوبوكس الخاص بالشهر او العام كنت ابحث فى موضوع حضرتك ووجدته شيق للبحث وللاستاذه فهدانى الله تعالى الى الاتى اولا قمت بوضع موديول باسم : mod_day_month_year_DayLoop - - - - خصائص الموديول الاتى استدعاء اليوم : عن طريق DayLoop() استدعاء الشهر : عن طريق MonthLoop() استدعاء السنة : عن طريق YearLoop() وهنا المتعة والمرونة فى تلك الجزئية من الكود فى الموديول Dim N As Integer N = 20 حيث ان القيمة N = 20 هى اعداد السنين التى تريد اظهارها بعد العام الحالى لذك تجد فى الكمبوبوكس الخاص بالسنة ينتهى عند عام 2036 اى ان العام الحالى + 20 عام >>------------> 2016 + 20 = 2036 طبعا تقدر تغير العدد 20 بما تريد لاظهار عدد السنين القادمة ان اردت - باقى الكود وهذا الجزء من الكود For i = -12 To N i = -12 To N -12 تعنى اعداد السنوات السابقة للعام الحالى والتى تريد اظهارها فى الكمبوبوكس لذلك تجد العام الذى يبدأ فى الكمبوبوكس 2004 اى ان العام الحالى - 12 عام >>------------> 2016 - 12 = 2004 طبقا لذلك الكود مرن والقيم فى الكمبوبوكس تتغير كل عام بما يناسب العددين الاول الخاص بظهور عدد السنين + العام الحالى والعدد الثانى عدد السنين التى تظهر قبل العام الحالى ولك ان تغير تلك الاعداد بما يتناسب مع حضرتك مرة واحدة فى الموديول نستفيد من ذلك الاتى لا يوجد ربط لاى شئ ولا نحتاج الى اى مفاتيح كما تعتقد الا ان اردتها ان لشئ ما يخص الية عمل البرنامج النموذج الذى به الكمبوبوكس باسم frm_a قمت بعمل حدث فى الحالى لاستدعاء الاكواد من الموديول عن طريق هذا الكود Private Sub Form_Current() Me.Combo_year.RowSource = YearLoop() Me.Combo_month_name.RowSource = MonthLoop() End Sub طبعا من خصائص الكمبوكوس لكل من العام والشهر اختيار الـ Row Source Type = Value List وهنا نريد عمل الفرز نجعل مصدر بيانات الجداول الفرعية استعلام لكل جدول فرعى حضرتك كنت طالب الفرز والفلتر يتم على التاريخ عن طريق الشهر والسنة الحقل الخاص بالتاريخ فى المرفق كان اسمه b_date استخدمت تلط الطريقة لفصل اليوم عن الشهر عن السنة من التاريخ بتلك الطريقة c_day: Format([b_date],"dd") c_day هو اسم الحقل الذى سيظهر فى الاستعلام لفصل اليوم من حقل التاريخ يمكن تغير الاسم بلا قيود كما تحب Format اى التسيق المطلوب ([b_date],"dd") الجزء الاول يجب ان يكون نفس اسم الحقل الخاص يالتاريخ كما فى الجدول وهو b_date الجزء الثانى ,"dd طريقة عرض اليوم اليوم بالارقام من 01 - 30 او 31 حسب عدد ايام الشهر ممكن تكون ddd اختصار اليوم اختصار لاسم اليوم ممكن تكون dddd اسم اليوم كامل وكذلك ونفس الفكرة لكل من الشهر والسنة استفدنا من هذه الخطوة الاتى اليوم فى حقل الشهر فى حقل السنة فى حقل كل مختص بذاته مثلا 03/07/2016 تكون كالاتى c_day = 03 c_month = 07 c_year = 2016 ولان حضرتك طلبت الفلتر على الشهر وعلى السنه تم وضع معيار على حقل الشهر c_month يتم الفلتر بناء عليه والمعيار هو Like "*" & [forms]![frm_a]![Combo_month_name] & "*" وهذا يعنى عمل فلتر بناء على قيمة الكمبوبوكس بالاسم : Combo_month_name فى النموذج باسم : frm_a وكذلك تم وضع المعيار الخاص بالعام فى حقل السنة c_year Like "*" & [forms]![frm_a]![Combo_year] & "*" كل الحكاية تم عمل استعلام خاص بكل جدول تريد اظهار محتوياته كمصدر بيانات للنموذج الفرعى وتم وضع كود على الكمبوبوكس عن التحديث بقوم بعمل تحديث للبيانات فى النموذج الفرعى بس انا خلصت معلش طولت عليك بس كنت حابب اشرح كل شئ بالتفصيل الممل
    2 points
  7. لقد طرح أخي ومعلمي الجليل الأستاذ // عبدالله باقشير "حفظه الله " وجزاه عنا خير الجزاء , في ابداع سابق له (( قــوائم مخصصة علي الفورم باستخدام - CommanBars)) علي الرابط التالي http://www.officena.net/ib/index.php?showtopic=44506 وعمله الذي فتح بوابة كبيرة امام استخدمات الاكسيل وتمكنه من التحكم بالاكواد وتطويعها جزاه الله خيرا وجعل كل اعماله في ميزان حسناته وارجوا منه السماحة انني استخدمت عمله وطبقته علي موضوع شئون الموظفين الاصدار الثاني - النسخة التجريبية لوجود اخطاء بالنسخة الاولي فاهدي عملي المتواضع كلمة المرور 2300 جعل الله جميــــــع اعمالنا خالصة لوجه الكريم والله ولي التوفيق شئـون الموظفيين الاصدار الثاني نسخة تجريبية.rar
    1 point
  8. بسم الله و ما شاء الله اللَّهُمَّ انْفَعْنَا بِمَا عَلَّمْتَنَا , وَعَلِّمْنَا مَا يَنْفَعُنَا , وَزِدْنَا عِلْمًا إِلَى عِلْمِنَا اهداء لكل من شارك بعلمه اقل ما يقال لكم "عندما تنتهى كلمات الابداع عندكم و تبدأ من جديد و تنتهى عندكم" ايام مباركه من الله عز وجل و لا تنسونا من صالح الدعاء أقدمه لكم صدقه جاريه على روح المغفور لها امى و استاذنا / عماد الدين الحسامى للذهاب الى ملف _ المدونه الاصدار الاول من هنا مدونة اعمال ايقونات الماس لمنتدى اوفيسنا_سلسله تجميعيه و هديتى متجدده باذن الله تعالى من هنا اضغط على رابط العنوان اسفله للوصول للمدونه
    1 point
  9. السلام عليكم و رحمة الله تعالى و بركاته. هذه محاولة مني لإنشاء قاعدة بيانات بريد إلكتروني بإستعمال الأكسس. المرفق به ملفين أكسس : الأول خاص بقاعدة البيانات أما الملف الثاني فهو خاص بواجهة البريد. و هو يحتوي على بريد وارد و صادر و إنشاء رسالة. طريقة التشغيل: نضع ملف قاعدة البيانات في الكمبيوتر الخادوم (server) ونضع ملف الواجهة (برنامج الإتصال) في الأجهزة الأخرى, و عند فتحه نبحث عن مسار ملف قاعدة البيانات و نقوم بربطه بها. ثم نبدأ تشغيل البرنامج بنجاح إن شاء الله ملف البيانات.rar
    1 point
  10. و عليكم السلام اخى محمد لا ازعاج بالنسبة لى على الاطلاق سأحاول البحث عن طريقة أخرى لتلافى ذلك أو يتقدم أحد الأخوة بحل آخر يناسبك مع خالص تحياتى
    1 point
  11. اخي ياسر خليل زادك الله من علمة وامدك بالصحة والعافية وراحة البال كل تقديري واحترامي لشخصك الكريم .
    1 point
  12. السلام عليكم اخي رشيد شاهد المرفق واخبرني عن رايك هل هذا ما تقصد. تحياتي الاداءات 2.rar
    1 point
  13. السلام عليكم اخي الكريم رشيد البحث في الفورم يعتمد على العامود B وهو الرقم في شيت الاكسل.
    1 point
  14. السلام عليكم اخي الكريم هذا الكود يقوم باخفاء اطار اكسس ويفتح النموذج الرئيسي داخله بشرط ان يكون النموذج الرئيسي غير منبثق DoCmd.ShowToolbar "ribbon", acToolbarNo
    1 point
  15. أخي الكريم رحيم هذه الرسالة قد تظهر ولكن لها حل يمكن أن تطبقه لكي تتخلص منها قم بالإطلاع على موضوع "بداية الطريق لإنقاذ الغريق" لمعرفة كيفية التخلص من رسالة الخصوصية ..ستجد الحل في نهاية الموضوع رابط الموضوع من هنا
    1 point
  16. أخي الكريم قم بالإطلاع على الرابط التالي فيه موضوع وشرح لكيفية تحويل المعادلة إلى كود بأسلوب بسيط إن شاء الله رابط الموضوع من هنا
    1 point
  17. عمل وحدة نمطية واكتب هذا Public Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Public Sub HideAccess() Call ShowWindow(Access.hWndAccessApp, 0) End Sub Public Sub ShowAccess() Call ShowWindow(Access.hWndAccessApp, 5) End Sub و بعدين في فورم ( نموذج ) اللي يفتح مع فتح قاعدة بيانات اكسس في حالة on load اكتب هذا السطر fSetAccessWindow (SW_HIDE) مع تحياتي
    1 point
  18. إستاذي ومعلمي الاستاذ المحترم / ياسر خليل أبو البراء السلام عليكم ورحمة الله وبركاته و الله ياإستاذي إني احبك في الله و أسال الله العظيم رب العرش العظيم أن يزيدك تواضعا و حلما و علما و حسن خلق وأن يبصرك بالحق اينما كان إن العبارات التي سطرتها ماهي الا شعلة يجب ان يرفعها كل طالب علم يبحث عن هدف يريد أن يحققه وقد سبقنا في ذالك هدهد سليمان الذي رفع الله ذكره في كتاب الله الي قيام الساعة وهو يبحث عن الحقيقة "فَمَكَثَ غَيْرَ بَعِيدٍ فَقَالَ أَحَطتُ بِمَا لَمْ تُحِطْ بِهِ وَجِئْتُكَ مِن سَبَإٍ بِنَبَإٍ يَقِينٍ " وهذه هي الهمة الحقيقية التي يجب ان يتحلي بها كل طالب علم وفقك الله لكل خير في الدنيا و الاخرة
    1 point
  19. تم رفع هذا الكود فى مشاركة منفصله حتى لا ننسى هذه المشاركة مساعدة فى البحث بملف الاكسيل تم ارفاق كود الحل من الفاضل _ أ / أبوعبد الله ـ عبد الفتاح كيرة و لا تنسونا من صالح الدعاء تحياتى قص صف بيانات ولصقه لورقة تحددها من خلال فورم للبحث عن البيانات (1).rar ـkemasكود البحث عن كلمة فى الصفحة ثم حذف صفها.rar ـkemasكود البحث عن كلمة فى الصفحة ثم حذف و لصق صفهاورقتان.rar
    1 point
  20. ما فدمنا شيء هذا واجبنا ... احنا بالخدمة مع تحياتي
    1 point
  21. الكود شغال تمام وجزاكم الله خيرا على المحاولات والمساعدات انت قدمت لى كثيرا
    1 point
  22. السلام عليكم اخى ياسر الردود والاقتراحات بتحسن العمل فعلا وتطوره الملف انا مشغل بيه مدرستى وقوتها 2800 طالب بلا مشاكل ولكن الاراء المختلفة سوف تحسن العمل المهم سوف استمر انشاء الله مساء اليوم وبأذن ربنا لن يقتصر العمل على قوائم الفصول فقط بعد ذلك لو تسمح لى سوف انزل شرح لكيفية عمل قوائم اللجان (كشوف المناداه) وكشوف الملاحظة من البداية بحيث يستطيع العضو انه يعمل الكشوف هو مش ياخدها جاهزة وكشوف اعمال السنه وكثير من الاعمال لو كان فى العمر باقية
    1 point
  23. مبدع كالعادة شرح وافي وعمل جبار لا تحرمنا من ابداعاتك المتواصله ادعو لك بالتوفيق والعافية والستر
    1 point
  24. درس رائع وممتاز وشرح فائض ومستنير شكرا لك وبوركت ورزقت العافية والستر ارجو الاستمرار في شرحك لجميع الدوال وكيفية وضعها مثل الكود كما اقترح عليك وضع معادلتين او اكثر داخل كود
    1 point
  25. من ينابيع افكار استاذنا ياسر نرتوى .. زادك الله من علمه وفضله واحسانه
    1 point
  26. اخي احمد لا داعي لتكرار الموضوع فقد تم الاجابة عن طلبك سابقا بأكثر من حل تفضل رابط الموضوع القديم https://www.officena.net/ib/topic/72005-فصل-أسماء/
    1 point
  27. السلام عليكم اخي الكريم شاهد المرفق لعلة يكون هو المطلوب الاداءات.rar
    1 point
  28. جزاكم الله خيرا على اطرائكم على الرغم من اننى اجد مبالغة ولكن على كل حال كل الشكر والتقدير لحضرتك على دعوات حضرتك الطيبة فقط نسأل الله تعالى القبول واتمنى على الله تعالى ان يرزقكم اكثبر مما دعوتم لى ان شاء الله تعالى واخيرا وليس اخرا الحمد لله الذى تتم بنعمته الصالحات الحمد لله تعالى سبحانه كما ينبغى لجلال وجهه ولعظيم سلطانه سبحانك لا علم لنا الا ما علمتنا انك انت العليم الحكيم الحمد لله تعالى الذى هدانا وما كنا لنهتدى لولا ان هدانا الله عزوجل
    1 point
  29. قمت بالتجربة لا يعمل عندى نظام التشغيل ويندوز 10 64 بيت اوفيس 2010 برو بلس 32 بيت
    1 point
  30. هذا رابط وجدته اثناء البحث وبه مشاركة http://arabteam2000-forum.com/index.php?/topic/182093-قاعدة-بيانات-تطلب-من-أخرى-الارتباط-بها/ مستخدما دوال ال api العجيب ان اسم صاحب المشاركة قريب من اسمي تنبيه فقط اذا كان لديك 64 بت غير مايلزم بالدالة باضافة ptrsafe كما انبه والله اعلم انه لابد من وجود صلاحية لمستخدمك الحالي وكذلك يمكن يتطلب اعادة تشغيل الكمبيوتر بالتوفيق
    1 point
  31. بارك الله فيكم أخي جلال الجمال على هذه التجميعة القيمة والمتميزة ولكن لدي العتب عليك وين ياصديقي تم نسياننا بالكامل لو سمحت وأتشرف فيك اذا قمت بمشاهدة هذه البرامج لعلها أذا كانت مفيدة لكم أن تقوم باضافتها للمدونة برنامج دليل حسابات بعدد لا نهائي من المستويات هدية رمضان برنامج للصرافة المالية الخاصة تقبل تحياتي ومروري
    1 point
  32. شكرا جزيلا على هذا الإطراء ماشاء الله عليك نفخت ونفخت فيني ، والآن اصبحت زي البالونه المهم ، هل عملت معاك الطريقة؟ جعفر
    1 point
  33. متابعة الواجبات ************* الأخ الفاضل صلاح 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
  34. ملفك اخي الكريم مغلق برقم سري واعتقد ان المشكلة لديك في طريقة حفظ الملف اليك اخي الكريم ... كل امتدادت الاكسيل والفرق بينهم ( راجعهم واختار ما يناسبك منهم ) وان كانت المشكلة غير ذلك اخبرنا XLS تستطيع قرائتها بالإكسل 2003 XLS تستطيع الإحتفاظ بالكود فيها بداية من أوفيس 2007 ، تم استبدال XLS بثلاث إمتدادات xlsb ، xlsx ، xlsm وثلاثتهم لايستطيع الأوفيس 2003 قرائتهم إلا بإضافة أداة جديدة إضافية 1- الإمتداد xlsx لحفظ ملفات الإكسل العادية التي لاتحتوي علي أكواد ، فإن كتبت كود وحفظت الملف بهذا الإمتداد ولم تنتبه لرسالة التنبيه وأغلقت الملف ، فلن تجد الكود مرة أخري عند الفتح 2- الإمتداد xlsm لحفظ ملفات الإكسل التي تحتوي علي أكواد 3- الإمتداد xlsb لحفظ ملفات الإكسل (مع أكوادها) ، ولكن لاتستطيع عمل مشاركة لهذا النوع من الملفات للعمل بأكثر من مستخدم علي الملف في الشبكة ، أي Share وننصح باستخدام xlsb بدلا من xlsm لقلة حجم هذا النوع الملحوظة بالنسبة للآخرين (( إلا في حالة مشاركة الملف علي الشبكة )) ارجو ان اكون قد افدتك ولو قليلا تقبل خالص تحياتي
    1 point
  35. متابعة الواجبات : ************** قام الأخ الفاضل الجموعي بعمل الواجب المطلوب على أكمل وجه .. بارك الله فيك أخي الحبيب الجموعي وجزيت خيراً على هذه المتابعة الجيدة ممكن نستفيد معلومات جديدة من خلال الواجب مش هنصحح كدا ونقول صح ولا غلط وبس لا إحنا نضيف معلومة تضاف للحلقة الثالثة كملحق ليها . يا ريت المشرفين يقوموا بالمهمة دي .. عايز تجميع لكل الحلقات والملحقات للحلقات زي الملحق ده عشان يضاف للشرح لتسهيل المتابعة لمن أراد المتابعة بإذن الله . طبعا الكود اللي تفضل به أخونا الفاضل بالشكل ده 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
  36. الحلقة الخامسة **************** السلام عليكم ورحمة الله وبركاته نستكمل حلقاتنا للي متابعين .. وللي مش متابعين بردو! هنتكلم النهاردة عن النطاقات في 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
  37. الحلقة الرابعة طبعا أنا ايدي بتترعش وأنا بكتب كلمة الحلقة (الرابعة) ، دا عشان رقم 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
  38. الاخ الكريم / ابراهيم حضرتك هتدخل البيانات اليوميه فى صفحه البانات و البانات دى بتتحول اتوماتيك فى الصفحه التانيه , انا دايما بستخدم الطريقه دى عشان اعرف اجماليات البيانات اللى عندى عشان انا ضعيف فى استخدام الاكواد و المعادلات الجدول المعمول فى صفحه الاجمالى ده اتوماتيك يعنى حضرتك مش هتدخل اى بيانات فيه بس انت هتستخدمه لو عاوز تعرف اى معلومه خاصه باى حاجه فى الصفحه الاساسيه , هيا هيا نفس البيانت اللى ممكن تستخد الفلتر و تجيبها بس الجدول ده بيبقى احسن شويه من وجهه نظرى كل اللى المطلوب من حضرتك انك بعد ما تدخل البيانات بتاعتك فى الصفحه تروح على الصفحه التانيه بتاعت الاجمالى و تقف بالفاره فى اى خليه داخل الجدول و بعدين تعمل كليك يمين و تختار رفرش زى ما هو واضح فى الصوره داخل الملف حاول تدوس كده على علامه ( +) اللى جنب رقم الماكينه فى الجدول كده و شوف الجدول هيتغير ازاى و يعرض كل البيانات الخاصه بالماكينه انا عارف ان شرحى وحش بس يارب اكةن عرفت اوصل الفكره لحضرتك و لو حسيت ان حكايه الجدول دى ممطن تلخبطك يبقى خليك فى الصفحه الاساسيه و ممكن تشيل الصفحه دى من الملف نهائيا و مش هتسبب اى مشكله جرب كده و لو احتجت حاجه انا تحت امرك اخوك / محمد سعد جديد بيان بمصروفات الماكينات و المعدات خلال سنة 2014.zip
    1 point
  39. اخي محمد تفضل المرفق فيه زرين الاول للترحيل بدون مسح البيانات المرحلة الثاني للترحيل مع مسح المبيانات المرحلة وللتنبيه فعند خلو اول خلية (A2) من البيانات ستظهر رسالة تنبيهية بعدم وجود بيانات لترحيلها راجع الاكواد واي جزء لم تفهمه انا مستعد للشرح ابواحمد Posting.rar
    1 point
×
×
  • اضف...

Important Information