الفشل2004 قام بنشر يناير 4, 2005 قام بنشر يناير 4, 2005 طبعا انا اعديت برنامج لادخال درجات الطلاب لكن واجهتني مشكلة وهيه ان لو اراد احد اخر استخدام نفس البرنامج في مدرسة اخرى لا يمكنه اذا كانت المدرسة عددها اكبر او اصغر من المدرسة المخصصة لها لذالك يجب في كل مرة اعادة تنسيق البرنامج ليتناسب مع عدد الطلاب لذالك ارجو المساعدة والاجابة على سؤالي كيف يتعرف البرنامج تلقائيا على أعداد الطلاب بحيث يقفل الكشوف :) ولا يتعامل مع الخانات غير المدخل بياناتها اذا اعطيته عدد خانات كثيرة؟؟؟؟؟؟؟؟؟. مع العلم قد صادفني برنامج ينفذ هذا الخاصية(فلا تقولو غير ممكن)...لكن لم اتمكن من معرفة الكود او الطريقة التي استخدمة فيه لانه محمي بصورة جيدة....... شاكرا لكم.....
الفشل2004 قام بنشر يناير 5, 2005 الكاتب قام بنشر يناير 5, 2005 طبعا بفصل الشرح على البرنامج(لو كان مسموح ارفاق ملف لكنت ارفقة مثال) قمة بعمل عدة اروراق وتركت الورقة الاولى هي لادخال الاسماء الطلاب وارقام الجلوس وارقام السرية لكن العملية حددتها 100 طالب وفي الورقة الثانية قمة باظهار ارقام السرية مع ترك خانات لادخال الدرجات للمواد وبنفس الطريقة لـ 100 طالب وثم عملة عدة اوراق منها كِشوف للدرجات وتظهر لـ 100 طالب المهم ....... الفكرة التي ابحث عنها اريد عندما ادخل في الصفحة الاولى اسماء الطلاب يقوم البرنامج في الصفحة الثانية بفتح نفس عدد الطلاب الذي تم ادخالهم يعني لو كان عندي 50 طالب يمكني البرنامج في الورقة الثانية ادخال فقط 50 طالب والاهم....... انه يقوم بعمل كشوفات النهائية لي في الورقة الثالثة كذالك لنفس العدد يعني ما يعطيني كشف فيه 50 طالب والخمسين الاخيرة فارغة اريده يعطيني الكشف الاخير لـ خمسين طالب بس بدون الجزاء الفارغ
محمد حجازي قام بنشر يناير 6, 2005 قام بنشر يناير 6, 2005 (معدل) السلام عليكم ... يمكنك ذلك عن طريق التنسيق الشرطي بأن تجعل السطر الزائد يختفي و في هذه الحالة يجب أن يكون التوسيع في حدود الجدول القديم (وهنا عدنا لنفس المشكلة) ، ولحل هذه المشكلة تستطيع استخدام كود الـ VBA انظر المرفق : ExtendRang.zip تم تعديل يناير 7, 2005 بواسطه محمد حجازي
محمد حجازي قام بنشر يناير 7, 2005 قام بنشر يناير 7, 2005 (معدل) السلام عليكم ... هذا شرح سريع : الكود هو التالي: 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: تم تعديل يناير 7, 2005 بواسطه محمد حجازي
الردود الموصى بها