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

محمد حجازي

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

    771
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    2

كل منشورات العضو محمد حجازي

  1. السلام عليكم ... أخي ، لاحظ معي : بفرض أن يوجد لدينا ثمانية سنوات : - 50 يوم مكافئة الخمس سنوات الأولى (10 يوم لكل سنة). - 60 يوم مكافئة السنوات الثلاثة الباقية (20 يوم لكل سنة). المجموع هو 110 وليس 165 !
  2. السلام عليكم ... يمكنك ذلك عن طريق استخدام المراجع في الصيغ لتظهر لك نفس البيانات في العامودين A و B ولكن بتنسيقين مختلفين (تحددهما أنت ، تنسيق لكل عامود).
  3. السلام عليكم ... ممكن يا أخي ذلك جداً ولك من تجربتي الأخين هنداوي وفلسطيني خير مثال . قم بتحميل الملفات في قسم التحميل الموقت و ضع موضوعاً لها في هذا القسم ، وعندها سأقوم بدمج الموضوعين ، وستستمر هذه الطريقة إلى حين ترقيتك إن شاء الله إلى الأعضاء المميزين. ملاحظة : كل البرنامج التي ستطرحها سينتهي بها المطاف إن شاء الله في قسم التطبيقات . تحياتي
  4. السلام عليكم ... ابحث في المنتدى عن "الترقيم التلقائي" وستجد إن شاء الله الكثير من الموضوعات المشابهة.
  5. السلام عليكم ... شكراً يا أخي على هذه الروابط ، و لك مطلق الصلاحية في وضع الروابط .
  6. السلام عليكم ... شكراً لك يا أخي على هذه الملفات ، وجاري الحميل ...
  7. السلام عليكم ... كثرت في الآونة الأخيرة التساؤلات عن كيفية إخفاء أشرطة القوائم و المعلومات و الأدوات وحتى تبويبات ورقة العمل من مصنف الاكسل ، وكان لابد من حسم النقاش بموضوع متكامل يسد هذه الثغرة العويصة ، وسوف أعرض لكم في هذا الموضوع آخر ما توصلت إليه : يمكننا تقسيم التغيرات (الإظهار/الإخفاء) التي يمكننا تطبيقها على مكونات مصنف الاكسل إلى ما يلي : 1.تغيرات لا تؤثر سوى على المصنف المطبق عليها : مثل إخفاء/إظهار ما يلي : أشرطة التمرير العامودية و السفلية ، خطوط الشبكة ، علامات تبويب الأوراق ، رؤوس الصفوف و الأعمدة . ومشكلة هذه المجموعة بسيطة ، وذلك لأن أي تغيير نجريه عليها لا يتأثر به سوى المصنف المعدل ، وعملية إظهار/إخفاء عناصر هذه المجموعة تتم كما يلي : انقر على الخيار Options الموجود ضمن القائمة Tools لتظهر لك نافذة ، وفي علامة التبويب View وتحت Window options توجد عدة خيارات حدد/ألغي تحديد ما تشاء منها و اضغط على OK . 2. تغيرات تؤثر على المستخدم الحالي : مثل إخفاء/إظهار ما يلي : أشرطة الأدوات ، شريط المعلومات ، شريط القوائم ، شريط الصيغة . و المشكلة تكمن في تعديل خصائص أحد العناصر الموجودة في هذه المجموعة ، وذلك لأن أي تغيير نجريه على عناصر هذه المجموعة يؤثر على المستخدم الحالي ، فضلاً عن عدم تخزين هذا التغيير في مصنف العمل المعدل ، كيف ؟ لنفترض أنك تقوم بتسجيل دخولك على نظام التشغيل ويندوز تحت اسم معين (ليكن MAH) ، الآن إذا فتحت الملف Book1 و قمت بإخفاء شريط الأدوات القياسي فإن هذا التغيير سينسحب على جميع مصنفات الاكسل التي تفتحها من داخل المستخدم MAH ، وبنفس الوقت فإن هذا التغيير لن يحفظ في المصنف Book1 السابق (جرب فتح المصنف Book1 من مستخدم آخر لنظام تشغيلك أو من جهاز آخر و لاحظ النتيجة). مما سبق نلاحظ أنه لا مناص من استخدام أكواد الفيجوال من أجل حل هذه المشكلة . ضع الكود التالي في الـ ThisWorkbook : Private Sub Workbook_Open() Call HideCommandBars End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Call UnhideCommandBars End Sub و الكود التالي في الـ Module : Dim MyCommandBars_Name() As String Sub HideCommandBars() On Error GoTo OutOfRange Dim cd As CommandBar With Application .DisplayFormulaBar = False .DisplayStatusBar = False For Each cb In .CommandBars If cb.Visible = True Then ReDim Preserve MyCommandBars_Name(UBound(MyCommandBars_Name) + 1) MyCommandBars_Name(UBound(MyCommandBars_Name)) = cb.Name If cb.Name = "Worksheet Menu Bar" Then cb.Enabled = False Else cb.Visible = False End If End If Next cb End With Exit Sub OutOfRange: If Err = 9 Then ReDim MyCommandBars_Name(0) Resume Next Else MsgBox Err.Description End If End Sub Sub UnhideCommandBars() With Application .DisplayFormulaBar = True .DisplayStatusBar = True For i = 0 To UBound(MyCommandBars_Name) If MyCommandBars_Name(i) = "Worksheet Menu Bar" Then .CommandBars(MyCommandBars_Name(i)).Enabled = True Else .CommandBars(MyCommandBars_Name(i)).Visible = True End If Next i End With End Sub الكود HideCommandBars السابق يقوم بما يلي : - إخفاء شريط المعلومات و شريط الصيغة (عند فتح المصنف) . - البحث داخل التطبيق عن أشرطة الأدوات (بما فيها شريط القوائم) الموجودة و الظاهرة و إدراج أسماءها في المصفوفة الديناميكية MyCommandBars_Name ومن ثم القيام بإخفائها (عند فتح المصنف). الكود UnhideCommandBars السابق يقوم بإعادة إظهار شريط المعلومات و شريط الصيغة ، وكما يقوم أيضاً بإظهار أشرطة الأدوات (بما فيها شريط القوائم) بالاعتماد على أسمائها الموجودة داخل المصفوفة MyCommandBars_Name السابقة (عند إغلاق المصنف) ، وبهذه الطريقة فإننا قمنا بإخفاء أشرطة الأدوات (المحددة بواسطة المستخدم) عند فتح المصنف و إعادتها دون زيادة أو نقصان عند إغلاق المصنف ، و بذلك فلن يعاني المستخدم من إشكاليات و ذلك لأن أشرطة الأدوات ستظهر كما حددها هو بنفسه. ملاحظات : 1. انتبه إلى أن سير عمل الكود سيتأثر بشكل كبير فيما إذا فقدت المعلومات الموجودة داخل المصفوفة MyCommandBars_Name ، وتفقد المعلومات من المصفوفة السابقة في إحدى الحالات التالية: تحرير الأكواد ، إغلاق المصنف بشكل غير قانوني ، توقف الجهاز قبل إغلاق الملف (بسبب عطل في التيار الكهربائي مثلاً) . ولذلك فإن عملية الاعتماد على المصفوفات لحفظ هكذا معلومات يعتبر أمراً غير مناسب ، وهنا لك الخيار في اختيار طريقة الحفظ (كحفظ هذه المعلومات في ورقة عمل معينة). 2. لاحظ أخي الكريم أننا اعتمدنا على الخاصية Enabled من أجل إخفاء شريط القوائم ، و على الخاصية Visible من أجل إخفاء أشرطة الأدوات الباقية . أرجو أن أكون قد وفقت في إيصال المعلومة بشكل صحيح مرفق مثال يوضح ما سبق : تحياتي CommandBars.zip
  8. 2. الفرق بين Sheets و Worksheets : الكلمة المحجوزة Worksheets تستخدم للإشارة إلى أوراق العمل فقط في المصنف ، أما الكلمة المحجوزة Sheets فتستخدم للإشارة إلى الأوراق بكافة أنواعها (أوراق العمل ، أوراق التخطيط ، ... ، الخ) في المصنف ، لاحظ الأكواد التالية : Sub WorksheetsAndSheets1() Sheets("Sheet1").Activate End Sub Sub WorksheetsAndSheets2() Sheets("Chart1").Activate End Sub Sub WorksheetsAndSheets3() Worksheets("Sheet1").Activate End Sub Sub WorksheetsAndSheets4() Worksheets("Chart1").Activate End Sub نلاحظ أن الكود الرابع يعطي الخطأ رقم 9 عند تشغيله : و هذا ينطبق مع ما قلناه سابقاً ولكن ألم يخطر في بالك السؤال التالي: لماذا لا نستخدم الكلمة المحجوزة Sheets في جميع أكوادنا ؟!!!! هذا بالفعل ما أقوم به وذلك لأن الكلمة المحجوزة Sheets أسهل بالكتابة و أريح على الذهن :d ، ولكن مهلاً يمكننا الاستفادة من التفريق السابق في أكوادنا : بفرض أنه لدينا مصنف يحتوي على ثلاثة أوراق عمل Sheet1 ، Sheet2 ، Sheet3 و ورقة تخطيط واحدة Chart1 ، وبفرض أن ترتيب الأوراق كان كما يلي : Sheet1 ، Sheet2 ، Chart1 ، Sheet3 الآن لنقم بتطبيق الكود التالي : Sub WorksheetsAndSheets5() Worksheets(3).Activate End Sub نلاحظ أنه تم تنشيط الورقة Sheet3 ، هل تعرف لماذا؟ الكود السابق يقوم بتنشيط ورقة العمل الواقعة في الترتيب الثالث ، وبما أننا هنا نتعامل مع الكلمة المحجوزة Worksheets فإنه لم يتم أخذ الورقة Chart1 في الحسبان أثناء حساب ترتيب الأوراق. مرفق ملف يتضمن الحالات السابقة مع أكوادها : بالتوفيق Worksheets_Sheets.zip
  9. 1. الفرق بين Select و Activate : قد يتساءل المرء : ما الفرق بين تحديد الهدف Select وتنشيطه Activate : قد يكون من الصعوبة بمكان الإجابة عن هذا السؤال ببضع كلمات ، و لكن وكما تعودنا ، فإن الأمثلة هي خير طريقة لإيصال المعلومات ، لاحظ الكود التالي : Sub SelectAndActivate1() With Sheets("Sheet1") .Range("A1:E10").Select .Range("C5").Activate End With End Sub نلاحظ أننا قمنا بتحديد المجال A1:E10 و لكن الخلية النشطة في هذا المجال (الخلية الجاهزة لإستقبال البيانات) هي الخلية C5 . يمكننا تطبيق نفس الأسلوب السابق على أوراق العمل ، لاحظ الكود التالي : Sub SelectAndActivate2() Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Sheets("Sheet2").Activate End Sub ولكن يجب عليك الانتباه إلى أن هذه الميزة متوفرة فقط في حال كون الهدف المنشط ينتمي إلى مجال الأهداف المحددة ، لفهم الموضوع بصورة أوضح راقب ما ينج عن هذه الأكواد : Sub SelectAndActivate3() With Sheets("Sheet1") .Range("A1:E10").Select .Range("H6").Activate End With End Sub Sub SelectAndActivate4() Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Sheets("Sheet4").Activate End Sub لاحظ أن الهدف المحدد هو نفسه الهدف المنشط :p خذ هذا الأمر في الحسبان :pp: نفس الشيء يحصل عندما يكون الهدف المحدد هو هدف واحد ، في هذه الحالة فإن الهدف المحدد يكون منشطاً بصورة تلقائية ، وهنا لا فرق نستطيع استناجه بين هذين الكودين : Sub SelectAndActivate5() Sheets("Sheet1").Activate End Sub Sub SelectAndActivate6() Sheets("Sheet1").Select End Sub مرفق ملف يتضمن الحالات السابقة مع أكوادها : بالتوفيق Select_Activate.zip
  10. السلام عليكم ... أعتذر أولاً عن هذا العنوان الغريب ، ولكن كان لا بد منه (لزوم التشويق :d ). عندما يخوض المرء في غمار الـ VBA فإنه يكتشف الكثير و الكثير من الثنائيات المميزة التي لا يجدها في كتب البرمجة التقليدية . هذه الثنائيات ترقى بالمبرمج إلى مستوى الاحتراف و تسهل عليه الكثير من الأمور. سوف أقوم إنشاء الله بعرض متتابع لهذه الثنائيات و ذلك على شكل مشاركات مرتبة و مرقمة في هذا الموضوع وذلك كلما خطرت على بالي واحدة منها ، وهذا الموضوع مفتوح للنقاش من كل الأعضاء ، ولكن رجائي لكل من يريد عرض تجاربه التقيد بالترقيم الموضح للمشاركات . وشكراً سلفاً على التفاعل
  11. السلام عليكم ... جرب التعديل التالي بفرض أن الشهر مؤلف من ثلاثين يوماً: ___1.zip
  12. السلام عليكم ... جرب المرفق التالي: 16834.zip
  13. السلام عليكم ... هناك طريقة لا أحبذها و ذلك لأنها مرهقة : بدلاً من كتابة مجال البيانات اكتب البيانات التي تريد تضمينها في القائمة المنسدلة و ذلك بعد فصلها عن بعضها بالفاصلة المنقوطة. جرب الطريقة و أعلمني بالنتيجة.
  14. السلام عليكم ... أخي ، جرب الصيغة التالية : =IF(ISNA(VLOOKUP(G2;A2:E6;2;FALSE));0;VLOOKUP(G2;A2:E6;2;FALSE)) لمزيد من المعلومات راجع الرابط التالي : http://www.officena.net/ib/index.php?showtopic=4570 بالتوفيق
  15. السلام عليكم ... لقد خصصت هذا الموضوع لتبادل التهاني بذكرى ولادة سيدنا محمد صلى الله عليه وسلم ، وبما أننا في منتدى الاكسل فلابد من التعبير عن هذه المناسبة بطريقة اكسلية. :d لقد صممت بطاقة على الاكسل خاصة بهذه المناسبة العظيمة أرجو أن تنال إعجابكم. البطاقة موجودة كمرفق في هذه المشاركة (y) تحياتي Mostafa.zip
  16. السلام عليكم ... بالنسبة للخيار Go : فقط وضح أخي الكريم ماذا تقصد في المرفق. هل سيتم الانتقال بالاعتماد على بيانات الجدول؟ أم ماذا؟ بالنسبة لباقي الخيارات : بسيطة إن شاء الله ، فقط وضح ما تريد ونحن جاهزون لإعطاءك الأكواد المطلوبة. بالتوفيق
  17. السلام عليكم ... جرب الصيغة التالية: =INDIRECT("[mah]"&SheetsCount(2)&"!"&"D4") التي تقوم بإرجاع قيمة الخلية D4 الموجودة في الورقة الثانية من المصنف mah. ملاحظة : يجب أن يكون المصنف mah مفتوحاً وإلا فإن التعليمة INDIRECT ترجع الخطأ #REF! تحياتي
  18. السلام عليكم ... لاحظ أخي الكريم كيف أننا استخدمنا المحرف & من أجل دمج البيانات في متغير نصي . إذا كان المتغير EndRow يحتوي على الرقم 10 ، فإن عملية دمجه السابقة مع المحارف B و : و W ستعطي القيمة النصية (المجال) التالية : B10:W10 و الموجودة داخل المتغير Range2 المستخدم ضمن التعليمة Range. لتدرك الأمور بشكر واضح ، أقترح عليك النقر بزر الفأرة الأيسر على حافة المحرر لتظهر لك نقط حمراء Breakpoint تمكنك من كبح سير الكود و متابعته خطوة خطوة. الآن أدرج الـ Breakpoint في المواضع المناسبة و عند التوقف المؤقت للكود ضع مؤشر الفأرة فوق المتغيرات (المتغير Range2 مثلاً) لتظهر لك القيم المخزنة فيها. لاحظ كيف أنه يمكنك متابعة الكود ومعرفة التغيرات التي تحدث في البيانات المخزنة داخل هذه المتغيرات.
  19. السلام عليكم ... أنا أميل لعدم استخدام الـ VBA في عملي طالما أن هناك ما يغني عنه من وظائف الاكسل التقليدية :pp:
  20. السلام عليكم ... جرب خيار الاستبدال وذلك من خلال النقر على Ctrl+H. بالتوفيق
  21. السلام عليكم ... أعتقد أن مشكلتك لا تحتاج لكود ، فقط جرب الطريقة الموجودة في الرابط التالي: http://www.officena.net/ib/index.php?showtopic=7162 وإن لم يكن هذا قصدك فنحن جاهزون للتكويييد :d تحياتي
  22. السلام عليكم ... على ما يبدو أن تحديد المجموعات لا يمكن اخفاءه ، و لا مناص وجوده.
  23. السلام عليكم ... جرب الكود التالي: Sub Sort() On Error GoTo NoRange Dim MyRange As Range Dim MyData() As Double Dim i As Long Set MyRange = Application.InputBox(prompt:="أدخل مجال البيانات", Title:="مجال البيانات", Type:=8) If MyRange.Areas.Count > 1 Then MsgBox prompt:="يجب أن يكون المجال مؤلف من كتلة واحدة فقط", Title:="خطأ" ElseIf Application.WorksheetFunction.Count(MyRange) <> Application.WorksheetFunction.CountA(MyRange) Then MsgBox prompt:="يجب أن تكون البيانات عبارة عن أرقام فقط", Title:="خطأ" Else ReDim MyData(Application.WorksheetFunction.Count(MyRange) - 1) For i = 0 To Application.WorksheetFunction.Count(MyRange) - 1 MyData(i) = Application.WorksheetFunction.Small(MyRange, i + 1) Next i MyRange.ClearContents i = 0 For Each MyCell In MyRange.Cells MyCell.Value = MyData(i) i = i + 1 If i > UBound(MyData) Then Exit Sub Next MyCell End If Exit Sub NoRange: If Err = 424 Then Exit Sub ElseIf Err = 9 Then MsgBox prompt:="المجال المحدد لا يحتوي على أرقام", Title:="خطأ" Else MsgBox Err.Description End If End Sub استخدم الكود السابق لفرز أرقام كل فصل على حدى. بالتوفيق Sort_Range.zip
  24. السلام عليكم ... على مايبدو أنك بهذا المثال استطعت ايصال المعلومة بشكل أفضل مني :d أنا أختلف معك يا أخي في هذه النقطة الاكسل يمتلك امكانيات تقليدية كبيرة جدااااااً ، ولكنه مع الاكسل يصبح أقوى و اقوى (y) نحن ننتظره على أحر من الجمر. :pp: تحياتي
  25. السلام عليكم ... مرفق ملف يتضمن ورقة بحث للأخ : أحمد حسين بتال عن كيفية حل نماذج البرمجة الخطية بواسطة الوظيفة الإضافية Solver . (y) أرجو أن تنال إعجابكم. solver_ad.rar
×
×
  • اضف...

Important Information