2saad قام بنشر السبت at 17:14 قام بنشر السبت at 17:14 اخواني اعضاء المنتدي الكرام بعد سلام الله عليكم ورحمته وبركاته محتاج آلية اختار منها الخط وحجمه وارتفاع الصف كما في الكمبوبكس في النماذج والتقرير بحيث تطبق علي كل النملذج والتقارير بقاعدة البيانات ولكم جزيل الشكر ووافر الاحترام
ابوخليل قام بنشر السبت at 17:32 قام بنشر السبت at 17:32 سألت الذكاء الاصطناعي فاعطاني الاجابة التالية : ... وعذرا لتقدم الكلمات وتأخرها لوجود كلمات انجليزية بين العبارات العربية محتاج آلية vba اختار منها الخط وحجمه وارتفاع الصف بحيث تطبق علي كل النملذج والتقارير بقاعدة البيانات اكسس _____________________________________________________________________________________________________________________________ لتطبيق آلية موحدة لتغيير الخط، حجمه، وارتفاع الصفوف في جميع النماذج والتقارير داخل قاعدة بيانات Microsoft Access، فإن أفضل وأسرع طريقة هي استخدام كود VBA يمر على كافة عناصر قاعدة البيانات (Forms & Reports) ويعدل خصائصها برمجياً دفعة واحدة، بدلاً من تعديلها يدوياً نموذجاً تلو الآخر. إليك الطريقة بالتفصيل مع الكود الجاهز: 1. كود الـ VBA الموحد قم بفتح محرر الـ VBA (بالضغط على Alt + F11)، ثم اختر Insert -> Module وانصخ الكود التالي بداخله. ملاحظة: تم تعيين قيم افتراضية في أعلى الكود (اسم الخط، الحجم، وارتفاع الصف)، يمكنك تغييرها مباشرة من الكود بما يناسبك. VBA Sub ApplyGlobalFormatting() Dim db As DAO.Database Dim doc As DAO.Document Dim frm As Form Dim rpt As Report Dim ctl As Control ' ---- حدد الإعدادات المطلوبة هنا ---- Const MY_FONT As String = "Arial" ' اسم الخط Const MY_SIZE As Integer = 12 ' حجم الخط Const ROW_HEIGHT As Integer = 450 ' ارتفاع الصف (بالتويت Twips: كل 1 سم تقريباً 567 تويت) ' ---------------------------------- Set db = CurrentDb ' أولاً: تطبيق الإعدادات على جميع النماذج (Forms) On Error Resume Next ' لتجنب الأخطاء في حال كان العنصر لا يدعم الخاصية For Each doc In db.Containers("Forms").Documents ' فتح النموذج في وضع التصميم وخفي DoCmd.OpenForm doc.Name, acDesign, , , , acHidden Set frm = Forms(doc.Name) ' المرور على كل العناصر داخل النموذج For Each ctl In frm.Controls ' تعديل الخط والحجم لعناصر النصوص والتسميات If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Or ctl.ControlType = acLabel Then ctl.FontName = MY_FONT ctl.FontSize = MY_SIZE End If ' تعديل ارتفاع الصف في حال كان النموذج يعرض كجدول (Datasheet) frm.DatasheetRowHeight = ROW_HEIGHT Next ctl ' إغلاق وحفظ التعديلات DoCmd.Close acForm, doc.Name, acSaveYes Next doc ' ثانياً: تطبيق الإعدادات على جميع التقارير (Reports) For Each doc In db.Containers("Reports").Documents ' فتح التقرير في وضع التصميم وخفي DoCmd.OpenReport doc.Name, acDesign, , , acHidden Set rpt = Reports(doc.Name) ' المرور على كل العناصر داخل التقرير For Each ctl In rpt.Controls If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acLabel Then ctl.FontName = MY_FONT ctl.FontSize = MY_SIZE End If Next ctl ' إغلاق وحفظ التعديلات DoCmd.Close acReport, doc.Name, acSaveYes Next doc ' تنظيف الذاكرة Set db = Nothing MsgBox "تم تطبيق الخط الجديد، الحجم، وارتفاع الصفوف على جميع النماذج والتقارير بنجاح!", vbInformation, "اكتملت العملية" End Sub 2. طريقة تشغيل الآلية أمامك خياران لتشغيل هذا الكود بناءً على رغبتك: الخيار أ: التشغيل المباشر والسريع (لمرة واحدة) وأنت داخل محرر الـ VBA وضمن الكود أعلاه، ضع مؤشر الماوس في أي مكان داخل الكود. اضغط على زر F5 من لوحة المفاتيح أو اضغط على زر التشغيل الأخضر (Run) في الشريطة العلوية. ستستغرق العملية ثوانٍ معدودة (تعتمد على حجم قاعدة البيانات)، ثم ستظهر لك رسالة النجاح. الخيار ب: ربط الكود بزر أمر (للتحكم المستقبلي) إذا كنت تريد إتاحة هذه الميزة للمستخدم أو لنفسك لتغيير الخطوط مستقبلاً عبر واجهة البرنامج: قم بإنشاء نموذج جديد (Form) وسمِّه مثلاً "لوحة التحكم بالخطوط". أضف زر أمر (Button). في حدث "عند النقر" (On Click) الخاص بالزر، اختر [Event Procedure] واكتب: VBA Call ApplyGlobalFormatting 💡 نصائح هامة جداً قبل التشغيل: خذ نسخة احتياطية: يرجى أخذ نسخة احتياطية من قاعدة البيانات قبل تشغيل الكود، لأن عمليات الـ VBA التي تقوم بحفظ النماذج تلقائياً لا يمكن التراجع عنها (Ctrl + Z). وحدة قياس الارتفاع (Twips): الـ Access يتعامل مع ارتفاع الصفوف بوحدة قياس تُدعى Twip. (الـ 1 بوصة = 1440 تويت، والـ 1 سم = 567 تويت تقريباً). القيمة 450 الموجودة في الكود تعطي ارتفاعاً مناسباً ومريحاً للعين، ويمكنك زيادتها أو نقصها حسب رغبتك. النماذج المفتوحة: تأكد من إغلاق جميع النماذج والتقارير قبل تشغيل الكود حتى لا يحدث تعارض أثناء محاولة الكود فتحها وتعديلها في وضع التصميم. 1
2saad قام بنشر بالامس في 10:01 الكاتب قام بنشر بالامس في 10:01 معذرة علي التأخير في الرد أخي الكريم الكود طبقته وشغال بس المشكلة كلما اريد خط لازم ادخل علي الكود وغيره ثم ارجع للنموذج واشغل الكود أنا محتاج كومبوبكسات تشتمل علي انواع الخطوط في الويندوز وكمبوبكس لارتفاع الصف وكمبوبكس لحجم الخط وانا اختار منهم 1
منتصر الانسي قام بنشر بالامس في 15:48 قام بنشر بالامس في 15:48 4 ساعات مضت, 2saad said: أنا محتاج كومبوبكسات تشتمل علي انواع الخطوط في الويندوز وكمبوبكس لارتفاع الصف وكمبوبكس لحجم الخط وانا اختار منهم قمت بالإستفادة من كود أحد الأمثلة في المنتدى وعدلت الإجراء ليعتمد على المعلمات بدل القيم الثابتة ستجد في المرفق ملف يحتوي على نموذج ووحدة نمطية قم بإسترادهما إلى تطبيقك وفتج النموذج ستجد فيه مربعات لتحديد القيم المطلوبة وبالنقر على زر (تنفيذ الإجراء) يفترض أن يتم تعميم القيم المحددة فيما يخص قيم (حجم الخط و الإرتفاع) قمت بتحديد القيم بالنطاق (من 7 الى 72) لحجم الخط لإن حجم أصغر من 7 أراه غير منطقي لأن النص سيصبح غير مقروء والرقم 72 هو الحد الأقصى لحجم الخط في أكسس ولست متأكداً من أنه يقبل رقم أعلى من 72 نفس الشيئ للإرتفاع فإرتفاع أقل من 4 ملم سيكون صغيرا جداً وإرتفاع أكبر من 1.4 سم سيكون كبيراً جداً ولكن في الأخير لك حرية تعديل القيم بصراحة أنا لم أجرب تنفيذ الأمر لذلك لا أدري إذا كانت ستظهر أي أخطاء فإذا ظهرت أي أخطاء يرجى إعلامنا بها تحياتي Fonts.accdb 1
ابوخليل قام بنشر بالامس في 16:11 قام بنشر بالامس في 16:11 ليس من عاداتك عدم رفع مثال للتطبيق لو ارفقت مثالا يشتمل على جدول به بعض البيانات ... ونموذج مستمر وتقرير مصدرهما الجدول لكان افضل لك قلت مستمر .. لأن الحاجة فيها فعلا وخاصة التقرير من اجل احتواء البيانات
منتصر الانسي قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات 2 ساعات مضت, ابوخليل said: ليس من عاداتك عدم رفع مثال للتطبيق لو ارفقت مثالا يشتمل على جدول به بعض البيانات ... ونموذج مستمر وتقرير مصدرهما الجدول لكان افضل لك قلت مستمر .. لأن الحاجة فيها فعلا وخاصة التقرير من اجل احتواء البيانات عفواً أخي @ابوخليل أنا حبيت أسهل الأمر على الأخ صاحب الموضوع فقد قال أن الكود ناجح ولا يريد إلا هذه الإضافات فوضعتها له في مثال يحتوي الحد الأدنى التعديلات التي سيقوم بتنفيذها على تطبيقه لتجربتها أما موضوع إحتواء البيانات في التقرير فلا أعتقد أن الكود له دخل بهذا الموضوع لانه سيقوم بتعديل حجم الخط بغض النظر عما إذا كان مناسباً أم لا أليس كذلك؟
ابوخليل قام بنشر منذ 21 ساعات قام بنشر منذ 21 ساعات 2 ساعات مضت, منتصر الانسي said: أما موضوع إحتواء البيانات في التقرير فلا أعتقد أن الكود له دخل بهذا الموضوع لانه سيقوم بتعديل حجم الخط بغض النظر عما إذا كان مناسباً أم لا أليس كذلك؟ طلبي منه المثال من اجل اجعل نقل الفكرة الى مشروعه يسيرا اما اذا تسألني عن رأيي فما دام ان الكود نجح عنده .. فأقرب وأسهل طريقة هو استبدال المتغيرات الثابتة في الكود وجعلها متغيرة عامة فقط ومناداتها من الفورم .. اقصد هذه : Const MY_FONT As String = "Arial" ' اسم الخط Const MY_SIZE As Integer = 12 ' حجم الخط Const ROW_HEIGHT As Integer = 450 ' ارتفاع الصف (بالتويت Twips: كل 1 سم تقريباً 567 تويت)
kkhalifa1960 قام بنشر منذ 21 ساعات قام بنشر منذ 21 ساعات (معدل) مشاركة مع اساتذتي تفضل استاذ @2saad محاولتي حسب ما فهمت اليك الشرح والمرفق . ووافني بالرد 2saad_Font, size, and row height.rar تم تعديل منذ 21 ساعات بواسطه kkhalifa1960
منتصر الانسي قام بنشر منذ 3 ساعات قام بنشر منذ 3 ساعات 16 ساعات مضت, ابوخليل said: اما اذا تسألني عن رأيي فما دام ان الكود نجح عنده .. فأقرب وأسهل طريقة هو استبدال المتغيرات الثابتة في الكود وجعلها متغيرة عامة فقط ومناداتها من الفورم .. إسمح لي أخي @ابوخليل أن أوضح هذه النقطة عندما يتم تعريف المتغيرات بالكلمة المفتاحية Const فإننا نقوم بتعريف قيمة ثابتة غير قابلة للتعديل إلا عن طريق الدخول إلى محرر VBE وتعديلها ولن نستطيع التعديل من النموذج سواء كانت متغيرات خاصة أو عامة أما مسألة أني جعلتها معلمات للإجراء نفسه فذلك لجعله مختصراً وأكثر مرونة فلو إفترضنا أن المتغيرات كانت عامة على مستوى النموذج فعند إستدعاء الإجراء سنضطر إلى كتابة أمر الإستدعاء بالشكل التالي MY_FONT = cboFonts MY_SIZE = txtFontSize ROW_HEIGHT = txtRowHeight * 567 Call ApplyGlobalFormatting حيث أنا سنقوم أولاً بتعيين قيمة لكل متغير ثم إستدعاء الإجراء أما عندما جعلنا المتغيرات كمعلمات للإجراء فإن أمر إستدعاء الإجراء أصبح بالشكل التالي Call ApplyGlobalFormatting(cboFonts, txtFontSize, txtRowHeight * 567) وأنا أطبق هذا الأسلوب دائماً لسهولته تخيل أننا نحتاج إلى إستدعاء إجراء أو دالة ما لأكثر من مرة وبمعلمات مختلفة فبدل أن نحتاج إلى 5 او 6 أسطر لكل إستدعاء سنكتفي بسطر واحد في الأخير مهما إختلفت طرق الحل لكنها تؤدي إلى نفس النتيجة وكما يقول المثل كل الطرق تؤدي إلى روما تحياتي
ابوخليل قام بنشر منذ 1 ساعه قام بنشر منذ 1 ساعه 2 ساعات مضت, منتصر الانسي said: Call ApplyGlobalFormatting(cboFonts, txtFontSize, txtRowHeight * 567) نعم استاذي هو ما تفضلت به ولكن باستبعاد استخدام Api ودوشة 32 و 64 حتى لو اردنا عرض جميع خطوط النظام فمكتبة وورد تفي بالغرض هذه الدالة لوحدها تكفي على النحو التالي .. ولكن مسألة ارتفاع الحقل بحاجة الى اعادة نظر حسب تصوري لمراعاة مقطع التفصيل عند التصغير والتكبير يعني اعتقد يجب ان يكون هناك توافق طردي بينهما Sub ApplyGlobalFormatting(ByVal MyFont As String, ByVal MySize As Integer, ByVal RowHeight As Integer) Dim db As DAO.Database Dim doc As DAO.Document Dim frm As Form Dim rpt As Report Dim ctl As Control Set db = CurrentDb On Error Resume Next '---------------------------------------------------- For Each doc In db.Containers("Forms").Documents DoCmd.OpenForm doc.Name, acDesign, , , , acHidden Set frm = Forms(doc.Name) For Each ctl In frm.Controls If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Or ctl.ControlType = acLabel Then ctl.FontName = MyFont ctl.FontSize = MySize End If ctl.Height = RowHeight Next ctl DoCmd.Close acForm, doc.Name, acSaveYes Next doc '------------------------------------------------------- For Each doc In db.Containers("Reports").Documents DoCmd.OpenReport doc.Name, acDesign, , , acHidden Set rpt = Reports(doc.Name) For Each ctl In rpt.Controls If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acLabel Then ctl.FontName = MyFont ctl.FontSize = MySize End If ctl.Height = RowHeight Next ctl DoCmd.Close acReport, doc.Name, acSaveYes Next doc Set db = Nothing End Sub '---------------------------------------------------- Private Sub btnApply_Click() Call ApplyGlobalFormatting(Me.cmbFonts.Value, Me.txtSize.Value, Me.txtHeight.Value * 567) MsgBox "تم تطبيق التنسيقات بنجاح!", vbInformation End Sub
ابوخليل قام بنشر منذ 49 دقائق قام بنشر منذ 49 دقائق 41 دقائق مضت, ابوخليل said: ولكن مسألة ارتفاع الحقل بحاجة الى اعادة نظر حسب تصوري لمراعاة مقطع التفصيل عند التصغير والتكبير يعني اعتقد يجب ان يكون هناك توافق طردي بينهما تم معالجة المسألة بحيلة ارجاع مقطع التفصيل الى = صفر rpt.Section(acDetail).Height = 0 المرفق ادناه تطبيق للكود اعلاه تم ايقاف الاجراء الخاص بالتعديل على النموذج والاكتفاء بما يخص التقارير استخدمت مكتبة وورد من اجل جلب جميع خطوط النظام لذا نلاحظ بطأ قليلا عند فتح الفورم ... وعلاجه هو في عمل دالة خاصة يتم فيها انتقاء خطوط حسب الرغبة وقابلة للاضافة والحذف xsaadx4.rar 1
2saad قام بنشر منذ 10 دقائق الكاتب قام بنشر منذ 10 دقائق شكرا لكم جميعا وبارك الله فيكم وأكثر الله من أمثالكم الخيرين وأنا آسف علي التأخير في الرد لأني كنت مشغولا
الردود الموصى بها
انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد
يجب ان تكون عضوا لدينا لتتمكن من التعليق
انشئ حساب جديد
سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .
سجل حساب جديدتسجيل دخول
هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.
سجل دخولك الان