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

الردود الموصى بها

قام بنشر

طبعا انا اعديت برنامج لادخال درجات الطلاب لكن واجهتني مشكلة وهيه ان لو اراد احد اخر استخدام نفس البرنامج في مدرسة اخرى لا يمكنه اذا كانت المدرسة عددها اكبر او اصغر من المدرسة المخصصة لها

لذالك يجب في كل مرة اعادة تنسيق البرنامج ليتناسب مع عدد الطلاب

لذالك ارجو المساعدة والاجابة على سؤالي

كيف

يتعرف البرنامج تلقائيا على أعداد الطلاب بحيث يقفل الكشوف :) ولا يتعامل مع الخانات غير

المدخل بياناتها اذا اعطيته عدد خانات كثيرة؟؟؟؟؟؟؟؟؟.

مع العلم قد صادفني برنامج ينفذ هذا الخاصية(فلا تقولو غير ممكن)...لكن لم اتمكن من معرفة الكود او الطريقة التي استخدمة فيه لانه محمي بصورة جيدة.......

شاكرا لكم.....

قام بنشر

طبعا بفصل الشرح على البرنامج(لو كان مسموح ارفاق ملف لكنت ارفقة مثال)

قمة بعمل عدة اروراق وتركت الورقة الاولى هي لادخال الاسماء الطلاب وارقام الجلوس وارقام السرية

لكن العملية حددتها 100 طالب وفي الورقة الثانية قمة باظهار ارقام السرية مع ترك خانات لادخال الدرجات للمواد وبنفس الطريقة لـ 100 طالب

وثم عملة عدة اوراق منها كِشوف للدرجات وتظهر لـ 100 طالب المهم

....... الفكرة التي ابحث عنها اريد عندما ادخل في الصفحة الاولى اسماء الطلاب يقوم البرنامج في الصفحة الثانية بفتح نفس عدد الطلاب الذي تم ادخالهم

يعني لو كان عندي 50 طالب يمكني البرنامج في الورقة الثانية ادخال فقط 50 طالب

والاهم....... انه يقوم بعمل كشوفات النهائية لي في الورقة الثالثة كذالك لنفس العدد يعني ما يعطيني كشف فيه 50 طالب والخمسين الاخيرة فارغة اريده يعطيني

الكشف الاخير لـ خمسين طالب بس بدون الجزاء الفارغ

قام بنشر (معدل)

السلام عليكم ...

يمكنك ذلك عن طريق التنسيق الشرطي بأن تجعل السطر الزائد يختفي و في هذه الحالة يجب أن يكون التوسيع في حدود الجدول القديم (وهنا عدنا لنفس المشكلة) ، ولحل هذه المشكلة تستطيع استخدام كود الـ VBA

انظر المرفق :

ExtendRang.zip

تم تعديل بواسطه محمد حجازي
قام بنشر (معدل)

السلام عليكم ...

هذا شرح سريع :

الكود هو التالي:

Sub mah()
Application.ScreenUpdating = False
  Worksheets("VBA").Range("A2:D65536").Clear
  Worksheets("VBA").Range("A2").Value = "=البيانات!A2"
  Worksheets("VBA").Range("B2").Value = "=البيانات!B2"
  Worksheets("VBA").Range("C2").Value = "=H$4*B2"
  Worksheets("VBA").Range("D2").Value = "=B2+C2"
  EndRow = Worksheets("VBA").Range("H2").Value + 1
  If EndRow <= 2 Then
   GoTo 1
  Else
   For NumberColumn = 1 To 4
     Worksheets("VBA").Range(Cells(2, NumberColumn), Cells(EndRow, NumberColumn)).FillDown
    Next NumberColumn
  End If
1 Worksheets("VBA").Range("H2").Copy
  Worksheets("VBA").Range(Cells(2, 1), Cells(EndRow, 4)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
  Worksheets("VBA").Range("H2").Select
Application.ScreenUpdating = True
End Sub
لنترك أول سطرين إلا مابعد ونبدأ بباقي الأسطر:
Worksheets("VBA").Range("A2").Value = "=البيانات!A2"
  Worksheets("VBA").Range("B2").Value = "=البيانات!B2"
  Worksheets("VBA").Range("C2").Value = "=H$4*B2"
  Worksheets("VBA").Range("D2").Value = "=B2+C2"
في الأسطر السابقة قمنا بإدراج الصيغ المناسبة في الخلايا
EndRow = Worksheets("VBA").Range("H2").Value + 1
في السطر السابق قمنا بإسناد عدد الاسطر الظاهرة (القيمة H2+1) إلى المتغير EndRow
If EndRow <= 2 Then
   GoTo 1
  Else
في الكود السابق شرط ، وهو إذا كان قيمة المتغير إقل أو تساوي 2 فننتقل للسطر 1 وإلا فنتابع الكود
For NumberColumn = 1 To 4
     Worksheets("VBA").Range(Cells(2, NumberColumn), Cells(EndRow, NumberColumn)).FillDown
   Next NumberColumn
هذه حلقة تكرارية تنفذ الكود الموجود بداخلها أربع مرات ، وفي كل دورة تسند قيمة مختلفة (من1 إلى 4 بزيادة 1 في كل دورة) إلى المتغير NumberColumn و الهدف منها هو عدم تكرار الكود ، ونلاحظ أنها تنتهي بـ4 لأنه عدد الأعمدة في الجدول
Worksheets("VBA").Range(Cells(2, NumberColumn), Cells(EndRow, NumberColumn)).FillDown
في السطر السابق تناغم جميل بين تعليمتي Range و Cells وهو يعني أنه يتم تعبئة المجال المحدد بالإعتماد على خلية الرأس فيه (و الموجود بداخلها الصيغة) ، والمجال محصور بين خليتين : الأولى تقع في السطر الثاني و العامود NumberColumn و الثانية تقع في السطر EndRow و العامود NumberColumn
Worksheets("VBA").Range("H2").Copy
  Worksheets("VBA").Range(Cells(2, 1), Cells(EndRow, 4)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
الكود السابق ينسخ التنسيق من الخلية H2 ويلصقه في الجدول
Worksheets("VBA").Range("H2").Select
وهنا نقوم بتحديد الخلية H2 في نهاية العمل و الآن لنشرح أول سطرين في الكود :
Worksheets("VBA").Range("A2:D65536").Clear
في السطر السابق قمنا بمسح الخلايا الموجودة تحت السطر الأول ، والهدف من ذلك هو تفادي وجود خلايا زائدة عندما نريد تضيق الجدول
Application.ScreenUpdating = False

Application.ScreenUpdating = True

السطرين السابقين هما أكثر شيئ أستعمله في أكوادي ، و الهدف من تعليمة ScreenUpdating هو إغلاق وفتح شاشة تحديث التطبيق Application

فعندما نكتب أكواداً تسبب تغيراً في المظهر الخارجي للبرنامج و عندما يكون عدد الأهداف المراد تغييرها كبيراً فإن ذلك سيسبب بطئ في الجهاز ، هذا فضلاً عن أن مظهر التغيرات قد يكون غير محبذ ، ولذلك نقوم بإغلاق تحديث الشاشة بالقيمة المنطقية False , وفتح تحديث الشاشة بعد إنتهاء العمل بالقيمة المنطقية True

جرب هذه التعليمة ولاحظ النتائج المبهرة لها (في السرعة و المظهر)

أرجو أن أكون قد وفقت في الشرح :pp:

تم تعديل بواسطه محمد حجازي
زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information