كيفية تعيين حجم الخط باستخدام VBA (مع مثال)

دليل أكاديمي وتطبيقي شامل يوضح كيفية استخدام خاصية Font.Size في لغة VBA للتحكم في حجم خط الخلايا في Excel واسترجاعه بدقة واحترافية.

Mohammed looti أكاديمي وباحث متخصص في علم النفس
تاريخ النشر
تمت المراجعة العلمية · د. مروة عبد العظيم · 22 أكتوبر، 2026
مراجعة وتدقيق علمي معتمد تاريخ التدقيق: 22 أكتوبر، 2026
د. مروة عبد العظيم دكتوراه في علم النفس
عضو هيئة التدريس • جامعة كربلاء
معايير التدقيق والاعتماد السريري

يخضع هذا المحتوى لمعايير ضبط الجودة والتدقيق العلمي والأكاديمي الصارمة في شبكة علم النفس العربي، لضمان صحة المعلومات ودقتها السريرية ومطابقتها لأحدث الأدلة والبراهين الصادرة عن الجمعيات النفسية والطبية المعتمدة (APA / WHO).

تمثل أتمتة العمليات التنسيقية في بيئة مايكروسوفت إكسل (Microsoft Excel) باستخدام لغة فيجوال بيزك للتطبيقات (Visual Basic for Applications – VBA) نقلة نوعية في منهجيات إدارة البيانات الضخمة والتقارير المالية والإحصائية المعقدة. إن الانتقال من النمط التشغيلي اليدوي، الذي يستهلك وقتاً طويلاً ويفتح الباب واسعاً للأخطاء البشرية، إلى النمط البرمجي الخوارزمي يتيح للمؤسسات والأفراد ضبط جودة المخرجات الرقمية بدقة متناهية. لا تقتصر أهمية التنسيق الآلي على مجرد إضفاء طابع جمالي على جداول البيانات، بل تتعداه لتشكل عاملاً حاسماً في تعزيز المقروئية، وتوجيه الانتباه الإدراكي لصناع القرار نحو المؤشرات الحيوية، وتوحيد المعايير البصرية عبر آلاف السجلات والخلايا في أجزاء من الثانية.

تستند هذه الأتمتة إلى فهم دقيق للنموذج الكائني (Object Model) لبرنامج إكسل، حيث تحتل خصائص النصوص والطباعة، وعلى رأسها كائن الخط (Font Object)، مكانة مركزية في تحديد كيفية تفاعل المستخدمين والمحللين مع المعلومات المعروضة. وتعتبر خاصية حجم الخط (Font.Size) إحدى الركائز البرمجية الأساسية التي يعتمد عليها المطورون لتأسيس تسلسل هرمي بصري واضح، يميز بين العناوين التأسيسية، والنصوص الوصفية، والبيانات الرقمية التجميعية، وهو ما يقلل من الجهد الذهني المبذول في استيعاب التراكيب المعقدة للجداول الممتدة.

يهدف هذا المقال الأكاديمي الشامل إلى تقديم تفكيك نظري وتطبيقي معمق لآلية تعيين وقراءة حجم الخط باستخدام لغة VBA. سنتناول البنية الهيكلية لكائن الخط وخصائصه الفيزيائية والحسابية، مروراً باستعراض الشفرات البرمجية الأساسية والمتقدمة، وتحليل الأداء الحاسوبي عند التعامل مع مصفوفات البيانات الكبيرة، وصولاً إلى معالجة الأخطاء الاستثنائية وضوابط الحماية المؤسسية. كما سنستعرض أمثلة واقعية وموثقة تتيح للمبرمج ومحلل النظم السيطرة الكاملة على البيئة التنسيقية داخل مصنفات العمل بكفاءة واقتدار.

1. المقدمة التأسيسية: أتمتة معالجة النصوص وتنسيقها في بيئة Excel VBA

1.1 مفهوم الأتمتة التنسيقية ودورها في إدارة البيانات الضخمة

تشير الأتمتة التنسيقية في بيئات معالجة البيانات إلى استبدال التدخل البشري اليدوي الروتيني بمجموعات من التعليمات المنطقية المنفذة آلياً، والتي تهدف إلى صياغة السمات المرئية للمعلومات المعروضة. عند التعامل مع مستودعات البيانات الضخمة (Big Data Repositories) التي تحتوي على مئات الآلاف من الصفوف والأعمدة، يصبح تنسيق كل خلية على حدة ضرباً من المستحيل عملياً، ومصدراً مؤكداً للتفاوت والتباين غير المقصود. تتيح لغة فيجوال بيزك للتطبيقات إمكانية التدخل المباشر على مستوى النواة البرمجية للمصنف، مما يسمح بتطبيق معايير تنسيقية محددة سلفاً في زمن قياسي يضمن عدم هدر الوقت والموارد البشرية.

إن تحقيق الاتساق البصري عبر أوراق العمل المتعددة والمصنفات التابعة للمؤسسة يعد متطلباً تشغيلياً بالغ الأهمية؛ حيث تتطلب حوكمة البيانات المؤسسية إخراج التقارير الدورية، مثل الميزانيات الختامية وتقارير تدقيق الامتثال، وفقاً لنماذج قياسية ثابتة (Style Guides). يضمن الماكرو المكتوب بلغة VBA تطبيق القواعد ذاتها دون أي انحراف، بغض النظر عن حجم البيانات المستوردة أو خبرة الموظف القائم على تشغيل الملف. يتجاوز هذا النهج مجرد الترتيب البصري ليخدم سلامة التدفق المعلوماتي، مسرعاً من وتيرة اتخاذ القرارات من خلال تقديم لوحات معلومات (Dashboards) تمتاز بأعلى درجات الوضوح والتجانس الهيكلي.

1.2 بنية كائن الخط (Font Object) في النموذج الكائني لبرنامج إكسل

يندرج كائن الخط (Font Object) ضمن النموذج الكائني الهرمي لبرنامج إكسل بوصفه كائناً تابعاً مباشراً لكائن النطاق (Range Object)، وكائن الخلية (Cell)، أو حتى لبعض العناصر الرسومية ومربعات النصوص. يمثل كائن النطاق الوعاء الحاوي للبيانات وقيمها ومواقعها المكانية، بينما يتكفل كائن الخط بحمل كافة الخصائص الجمالية والمطبعية للنص الموجود داخل ذلك الوعاء. لا يعمل هذا الكائن بمعزل عن السياق العام لورقة العمل، بل يرتبط ارتباطاً وثيقاً ببيئة التطبيق التي تدير عملية الرسم وتصيير الحروف (Text Rendering) على شاشة المستخدم.

تتكامل داخل كائن الخط مجموعة من الخصائص المترابطة التي تعمل معاً لصياغة المظهر النهائي للنص؛ فإلى جانب خاصية الحجم (Font.Size)، نجد خصائص الاسم (Font.Name)، واللون (Font.Color أو Font.ColorIndex)، والنمط العريض (Font.Bold)، والنمط المائل (Font.Italic)، والتسطير (Font.Underline). إن تعديل أي من هذه الخصائص يستوجب من المحرك الداخلي للبرنامج إعادة حساب أبعاد الخلية والتأثير البصري المترتب عليها، مما يجعل فهم المسار الهرمي للوصول إلى كائن الخط، بدءاً من كائن التطبيق (Application) وصولاً إلى الخلية الفردية، أمراً ضرورياً لكتابة شفرات برمجية دقيقة وخالية من التضارب المعماري.

1.3 أهمية التعديل البرمجي لأحجام الخطوط في تحسين القراءة والتركيز

تؤكد الدراسات المعنية بمعالجة النصوص والتحليل الإدراكي أن طريقة عرض البيانات لا تقل أهمية عن دقة الأرقام ذاتها. يسهم التعديل البرمجي الدقيق لأحجام الخطوط في تأسيس تسلسل هرمي بصري (Visual Hierarchy) يوجه مسار العين التلقائي عبر الصفحة؛ حيث تحظى العناوين ذات الأحجام الكبيرة بأولوية المعالجة الذهنية، تليها العناوين الفرعية، ثم البيانات التفصيلية. يساعد هذا الترتيب الباحثين والمحللين الماليين على فرز البيانات الضخمة بسرعة فائقة، واستخلاص الأنماط والاتجاهات العامة دون الغرق في تفاصيل الأرقام المتناهية في الصغر.

علاوة على ذلك، يلعب التحكم في حجم الخط دوراً محورياً في تقليل الإجهاد المعرفي والبصري الناجم عن تدقيق الجداول الرقمية المعقدة لساعات طويلة. عند استخدام أحجام خطوط غير متناسبة، يضطر الدماغ لبذل جهد مضاعف لفك شفرة الأرقام المتراصة، مما يزيد من احتمالية الوقوع في أخطاء التحليل والمقارنة. وقد بحثت العديد من الدراسات النفسية والعصبية تأثير تمايز المحفزات المكتوبة وطرق تنظيمها الإدراكي على كفاءة الأداء الذهني وحل المشكلات (Rawlins, 2021). ومن هذا المنطلق، تبرز الحاجة إلى ضبط حجم الخط عبر خوارزميات برمجية تضمن توفير الراحة البصرية وتدعم استيعاب المعاني الإحصائية بكفاءة متناهية.

2. التوصيف النظري لخاصية Font.Size في مكتبة VBA

2.1 تعريف خاصية Font.Size ونوع البيانات المرتبط بها

تُعرَّف خاصية Font.Size في مكتبة لغة VBA بأنها خاصية قراءة وكتابة (Read/Write Property) تابعة لكائن الخط، وتعمل كأداة تحكم في الارتفاع العمودي للمحارف والرموز المطبوعة داخل الخلية المستهدفة. نظراً لأن الخاصية تقبل القراءة والكتابة، فإنها تتيح للمبرمج الاستعلام عن الحجم الحالي المطبق على نطاق معين لاستخدامه كمدخل في العمليات المنطقية، أو إسناد قيمة رقمية جديدة تغير مظهر النص بصورة فورية على الشاشة وفي مخرجات الطباعة المادية.

ترتبط هذه الخاصية من الناحية البرمجية بنوع بيانات مرن يقبل القيم الرقمية، وغالباً ما يُتعامل معها كقيمة من نوع (Single) للأرقام ذات الفواصل العشرية أو (Variant) عند استرداد القيم من نطاقات متعددة غير متجانسة. تُقاس القيم المسندة إلى هذه الخاصية بوحدة “النقاط المطبعية” (Points)، حيث تمثل النقطة الواحدة معياراً فيزيائياً دولياً يعادل تقريباً 1/72 من البوصة (حوالي 0.353 مليمتر). وبالتالي، فإن إسناد القيمة 12 يعني توجيه محرك التنسيق في إكسل لضبط ارتفاع مربع المحارف الافتراضي على مسافة تعادل 12 نقطة طباعية على شاشات العرض والمطبوعات.

2.2 حدود القيم الرياضية المقبولة لنطاق حجم الخط في إكسل

يفرض برنامج إكسل قيوداً هندسية ورياضية صارمة على القيم المسموح بإسنادها إلى خاصية Font.Size لضمان استقرار العرض ومنع انهيار واجهة المستخدم الرسومية. يبدأ الحد الأدنى المطلق لحجم الخط المسموح به برمجياً من نقطة واحدة (1 Point)، حيث يتعذر على النظام رسم محارف بحجم أصغر من ذلك رياضياً. وفي المقابل، يصل الحد الأقصى النظري والعملي لارتفاع الخط إلى 409 نقاط (409 Points)، وهو الحد الأقصى أيضاً لارتفاع الصف المفرد في شبكة أوراق عمل إكسل.

يدعم نظام إكسل أيضاً استخدام الكسور العشرية المحدودة لأحجام الخطوط، مثل استخدام نصف النقطة (كأن يتم إسناد القيمة 10.5 أو 11.5)، وهو أمر حيوي في التصميمات الدقيقة لنماذج الطباعة الرسمية والمستندات التي تخضع لقياسات مساحية صارمة. إذا حاول المطور إسناد قيمة عددية تقع خارج هذا النطاق المغلق [1, 409]، فإن بيئة التشغيل ترفض الإسناد مباشرة وتولد خطأ استثنائياً في زمن التشغيل (Run-time Error 1004)، مما يستوجب وضع قيود تحقق برمجية تضمن بقاء المدخلات ضمن الحدود المسموح بها.

2.3 القيمة المرجعية الافتراضية للخطوط وسلوك النظام عند التأسيس

عند إنشاء مصنف عمل جديد في الإصدارات الحديثة من حزمة برامج مايكروسوفت أوفيس، يعتمد البرنامج حجماً مرجعياً افتراضياً للنص العادي يبلغ 11 نقطة، مقترناً غالباً بخطوط مثل Calibri أو Aptos. تستند هذه القيمة المرجعية إلى دراسات بيئة العمل الحاسوبية التي تقيس التوازن الأمثل بين استيعاب كمية بيانات كافية في الشاشة الواحدة وسهولة القراءة عبر شاشات العرض ذات الكثافة النقطية المتنوعة (Pixel Density).

تخضع هذه القيمة الافتراضية لتأثير نمط الخلية العام المسمى “Normal”، والذي يحدد الأساس التنسيقي لكافة الخلايا غير المعدلة يدوياً. إذا قام المبرمج بتغيير حجم الخط للنمط الأساسي، فإن كافة الخلايا التي لم يسبق تخصيص أحجام خطوطها ستتبع هذا التغيير تلقائياً. أما في حال التدخل المباشر عبر الشفرات البرمجية، فإن قيمة Font.Size التي يحددها الماكرو تتفوق على أي إعدادات نمطية مسبقة، وتكتسب الخلية سمة التخصيص الفردي التي تحافظ على قيمتها الجديدة بغض النظر عن المتغيرات البيئية المحيطة بها في المصنف.

3. استرداد وقراءة حجم الخط الحالي برمجيًا باستخدام دالة MsgBox

3.1 آلية استخراج حجم الخط لخلية فردية محددة

تتطلب عملية استخراج حجم الخط لخلية معينة صياغة استعلام برمجي مباشر يمر عبر التسلسل الهرمي للكائنات وصولاً إلى خاصية Font.Size للخلية المقصودة. يتم ذلك من خلال الإشارة الصريحة إلى النطاق الجغرافي للخلية في ورقة العمل الحالية، ثم استدعاء الخاصية لإرجاع قيمتها العددية المخزنة في الذاكرة. يُعتبر هذا الاستعلام خطوة تحضيرية جوهرية في بناء الخوارزميات الديناميكية، حيث يتعين على النظام في كثير من الأحيان التحقق من التنسيق القائم قبل اتخاذ قرار بتعديله أو تثبيته.

يمكن للمطور تخزين هذه القيمة المستردة في متغير رقمي مخصص من نوع بيانات ملائم، مثل Single أو Double، لإجراء حسابات مقارنة أو عمليات رياضية لاحقة. كما يمكن تمرير القيمة المسترجعة مباشرة إلى دوال العرض والإخراج دون الحاجة إلى وسيط تخزيني، إذا كان الهدف النهائي هو مجرد الإبلاغ أو التوثيق اللحظي للمستخدم، شريطة التأكد من صحة مسار الخلية وكونها تشير إلى موقع فعلي داخل نطاق الورقة النشطة لضمان دقة القراءة وتجنب الأخطاء المنطقية.

3.2 تحليل الكود البرمجي لمثال قراءة الحجم: Sub GetFontSize

لتوضيح الآلية التطبيقية لاستخراج حجم الخط، نورد أدناه الهيكل البرمجي المعياري لإجراء فرعي يقوم بقراءة حجم خط الخلية الأولى (A1) وعرضه في نافذة تنبيه للمستخدم:

Sub GetFontSize()
    MsgBox Range(“A1”).Font.Size
End Sub

يبدأ الكود بالإعلان عن الإجراء الفرعي باستخدام الكلمة المفتاحية Sub متبوعة باسم الإجراء المعبر عن وظيفته. يمثل السطر التنفيذي جوهر العملية، حيث يتم استخدام دالة الإخراج التفاعلية MsgBox لعرض نافذة حوارية منبثقة. يتم تمرير التعبير Range("A1").Font.Size كمعامل وحيد للدالة؛ حيث يقوم محرك VBA أولاً بتقييم كائن النطاق المحدد بالرمز “A1″، ثم ينفذ استدعاءً داخلياً لكائن الخط التابع له، ويسترجع القيمة الرقمية لخاصية الحجم. تقوم الدالة تلقائياً بتحويل هذه القيمة الرقمية إلى سلسلة نصية صالحة للعرض داخل صندوق الرسالة، ليظهر للمستخدم رقم دقيق يمثل الارتفاع النقطي للخط في تلك الخلية، وينتهي الإجراء بصورة طبيعية عند العبارة End Sub.

3.3 حالة النطاقات متعددة الخلايا والتحدي البرمجي للقيم الخالية

تنشأ معضلة برمجية بارزة عند محاولة استرداد خاصية Font.Size لنطاق يضم مجموعة من الخلايا بدلاً من خلية واحدة، كأن نطلب قراءة Range("A1:A5").Font.Size. فإذا كانت جميع الخلايا داخل النطاق المستهدف متطابقة تماماً في حجم الخط (كأن تكون جميعها بحجم 12 نقطة)، فإن الخاصية ستعيد القيمة 12 بنجاح ودون أي عوائق. غير أن التحدي الحقيقي يظهر عندما يحتوي النطاق على أحجام خطوط متباينة (كأن تكون الخلية A1 بحجم 10 والخلية A2 بحجم 14)؛ في هذه الحالة بالذات، يعجز المحرك عن إرجاع قيمة رقمية موحدة، ويقوم بدلاً من ذلك بإرجاع القيمة الخاصة Null.

تتسبب القيمة Null في إيقاف تنفيذ البرنامج وانهيار الماكرو إذا حاول المبرمج تخزينها في متغير رقمي قياسي مثل Integer أو Single، لأن هذه الأنواع لا تدعم استيعاب القيم الخالية. للتغلب على هذه المشكلة، يجب دائماً تخزين نتيجة قراءة النطاقات المركبة في متغير من نوع Variant، واستخدام الدالة التحققية IsNull() لمعالجة النتيجة منطقياً، وتحديد ما إذا كان النطاق متجانساً في الحجم أو يتطلب تدخلاً برمجياً إضافياً لتوحيد قياساته قبل الاستمرار في بقية العمليات.

4. تعيين حجم الخط لخلية مفردة: التحليل التطبيقي للكود الأساسي

4.1 صياغة الماكرو البرمجي لتعيين حجم الخلية A1

يمثل التعيين البرمجي لحجم الخط العملية العكسية لعملية القراءة؛ فبدلاً من استرداد الخاصية، يقوم المبرمج بعملية إسناد رياضي تستبدل القيمة الحالية بالقيمة المطلوبة. تستخدم لغة VBA علامة المساواة (=) كعامل إسناد تنفيذي ينقل القيمة الواقعة في الطرف الأيمن إلى الخاصية المستهدفة في الطرف الأيسر. فيما يلي الصياغة المعيارية لإجراء فرعي يقوم بضبط حجم خط الخلية A1 على 20 نقطة طباعية:

Sub SetFontSize()
    Range(“A1”).Font.Size = 20
End Sub

في هذا الإجراء، يتم توجيه أمر مباشر وصريح إلى الخلية المحددة بإحداثياتها الجغرافية (“A1”) في ورقة العمل النشطة. بمجرد تنفيذ سطر الإسناد، يتولى محرك الرسم الداخلي للبرنامج تطبيق الحجم 20 نقطة على محتويات الخلية، سواء كانت نصوصاً أبجدية أو قيماً عددية أو تواريخ، مما يؤدي إلى تغيير فوري في مظهر المحارف يجعلها تبرز بوضوح مقارنة بالحجم الافتراضي القياسي. يعتمد هذا الإجراء على مبدأ الإسناد المباشر الذي يتميز بالسرعة الفائقة وانعدام الحمل الإضافي على الذاكرة.

4.2 خطوات إدراج وتنفيذ الماكرو داخل محرر Visual Basic (VBE)

لكي يتحول هذا الكود من مجرد نص نظري إلى إجراء وظيفي فاعل، يتعين إدراجه بدقة داخل بيئة التطوير المتكاملة الخاصة بالتطبيقات. تبدأ العملية بفتح ملف إكسل المطلوب، ثم الضغط على مفتاحي الاختصار Alt + F11 في لوحة المفاتيح للولوج الفوري إلى محرر لغة فيجوال بيزك (Visual Basic Editor – VBE). بعد فتح المحرر، يتوجه المستخدم إلى شريط القوائم العلوي، ويختار قائمة “إدراج” (Insert)، ثم ينقر على خيار “وحدة نمطية” (Module) لإنشاء مساحة عمل مستقلة مخصصة لكتابة الأكواد العامة.

يتم لصق الشفرة البرمجية المذكورة في النافذة البيضاء الخاصة بالوحدة النمطية الجديدة. لتشغيل الماكرو، يمكن للمطور الضغط مباشرة على المفتاح F5 أثناء وضع المؤشر داخل متن الإجراء، أو استخدام القائمة العلوية والضغط على زر التشغيل الأخضر. كما يمكن العودة إلى واجهة إكسل العادية وربط الماكرو بزر تحكم رسومي (Form Control Button) أو شكل هندسي، مما يتيح للمستخدمين النهائيين تشغيل كود تعديل الحجم بنقرة زر واحدة ودون الحاجة للدخول إلى كواليس البرمجة مطلقا.

4.3 مراقبة التغير التنسيقي المباشر على خلية ورقة العمل

بمجرد اكتمال تشغيل الماكرو بنجاح، تظهر التعديلات التنسيقية بصورة فورية على الخلية المستهدفة في ورقة العمل. ومن الظواهر التقنية المرافقة لزيادة حجم الخط أن برنامج إكسل يقوم تلقائياً بزيادة ارتفاع الصف (Row Height) المحتوي على تلك الخلية إذا كان الصف مضبوطاً على وضعية الارتفاع التلقائي (AutoFit)، وذلك لمنع قص الأطراف العلوية أو السفلية للمحارف التي تضخم حجمها إلى 20 نقطة.

تتجلى أهمية التوثيق التقني في إدراك أثر تنفيذ الأكواد على سجل العمليات؛ إذ يجب الانتباه إلى أن العمليات المنفذة بواسطة ماكرو VBA تقوم بمسح كامل وغير قابل للاسترداد لسجل التراجع التقليدي (Undo Stack) في واجهة برنامج إكسل. وبناءً على ذلك، لا يمكن استخدام الاختصار الشهير Ctrl + Z للعودة إلى حجم الخط السابق بعد تنفيذ الكود، مما يبرز أهمية الحذر والتحقق من صحة الشفرات البرمجية قبل تطبيقها على ملفات العمل الحيوية.

5. تطبيق حجم الخط على نطاقات الخلايا المتصلة (Continuous Ranges)

5.1 توسيع نطاق الاستهداف الأفقي: دراسة النطاق Range(“A1:C1”)

في التطبيقات الواقعية، نادراً ما ينحصر العمل في تنسيق خلية معزولة؛ إذ تقتضي معظم المهام تعديل مجموعة خلايا مصفوفة جنباً إلى جنب كالعناوين الأفقية للجداول. يتيح كائن النطاق صياغة تركيبية مرنة تسمح باستهداف خلايا متعددة متصلة أفقياً باستخدام المعامل النصي للنقطتين الرأسيتين (:). على سبيل المثال، يتيح السطر البرمجي التالي تغيير حجم خلايا الصف الأول الممتدة من العمود A إلى العمود C بتعليمة واحدة:

Sub SetHorizontalRangeFontSize()
    Range(“A1:C1”).Font.Size = 14
End Sub

تتمثل الكفاءة الهندسية لهذا الأسلوب في قيام محرك VBA بتطبيق الحجم الجديد (14 نقطة) على الخلايا A1 و B1 و C1 في دورة معالجة متزامنة وموحدة. هذا الإسناد المجمع يعفي المبرمج من تكرار الأسطر البرمجية لكل خلية على حدة، مما يضمن اتساقاً مطلقاً في مظهر عناوين الأعمدة التي تؤسس لإطار التقرير الإحصائي أو المالي المعني، ويعزز من سرعة واستقرار الواجهة البصرية.

5.2 التعامل مع المصفوفات المكانية ثنائية الأبعاد (2D Ranges)

يمتد مبدأ التعيين المجمع ليشمل المصفوفات ثنائية الأبعاد التي تمثل كتل الجداول الكاملة بما تحتويه من صفوف وأعمدة متقاطعة. بتحديد إحداثيات الزاوية العلوية اليسرى والزاوية السفلية اليمنى للكتلة المستهدفة، مثل Range("A1:D10")، يمكن إعادة ضبط وتوحيد أحجام الخطوط لكامل البيانات الرقمية والوصفية المدرجة داخل النطاق، كما يوضح الكود التالي:

Sub SetTableFontSize()
    Range(“A1:D10”).Font.Size = 12
End Sub

يعد هذا التوحيد التنسيقي للكتل الممتدة خطوة بالغة الحرج في ضبط سلامة التخطيط العام للصفحات المعدة للطباعة أو التصدير بصيغة PDF؛ حيث يضمن تساوي الأوزان البصرية للخلايا، ويمنع ظهور تشوهات ناتجة عن التفاوت غير المبرر لأحجام الخطوط بين الأعمدة المتجاورة، مما يسهم في خلق بيئة قراءة مريحة للمدققين الذين يتتبعون سلاسل البيانات عبر أبعاد أفقية وعمودية متشابكة.

5.3 مقارنة الأداء البرمجي بين الإسناد المباشر للنطاق والحلقات التكرارية

عند الحاجة لتنسيق مساحات واسعة من الخلايا، يبرز تساؤل برمجي حول المفاضلة بين أسلوبين تقنيين: الإسناد المباشر لكامل النطاق دفعة واحدة، أو اللجوء إلى حلقات التكرار (Loops) للمرور على كل خلية وتعديل حجمها منفرداً. تثبت القياسات الحسابية لدورات المعالجة (CPU Cycles) أن الإسناد المباشر عبر Range("A1:Z1000").Font.Size = 10 يتفوق بمراحل هائلة في السرعة واستهلاك موارد الذاكرة مقارنة بالمرور الحلقي عبر 26,000 خلية.

يعود السبب الهندسي وراء هذا الفارق إلى أن الإسناد المباشر يرسل طلباً واحداً إلى واجهة برمجة التطبيقات المسؤولة عن الرسم في نظام إكسل، والتي تقوم بتعديل الواصفات في الذاكرة دفعة واحدة، بينما تفرض الحلقات التكرارية إرسال آلاف الطلبات الفردية المتتالية، مما يثقل كاهل خادم الكائنات التابع لبرنامج إكسل. وبناءً على ذلك، تقتضي القواعد الهندسية الراسخة تفضيل الإسناد المباشر للنطاقات الثابتة، وحصر استخدام الحلقات التكرارية في الحالات التي تتطلب تقييماً منطقياً شرطياً لمحتوى كل خلية قبل اتخاذ قرار تغيير حجم خطها.

6. تقنيات التعيين المتقدمة: النطاقات المنفصلة والأعمدة والصفوف الكاملة

6.1 تطبيق الحجم على نطاقات جغرافية منفصلة (Non-contiguous Ranges)

تتضمن النماذج التطبيقية في كثير من الأحيان ضرورة تعديل أحجام خطوط خلايا متفرقة في ورقة العمل دون المساس بالخلايا الفاصلة بينها؛ كأن نرغب في تنسيق عمودين متباعدين يحويان ملخصات المبيعات وعوائد الأرباح. توفر لغة VBA حلاً أنيقاً لهذه المسألة من خلال دعم استخدام الفاصلة اللاتينية (,) داخل المعامل النصي لكائن النطاق للفصل بين المناطق المكانية المتباعدة:

Sub SetNonContiguousFontSize()
    Range(“A1:A5, C1:C5”).Font.Size = 11
End Sub

يقوم هذا الكود بالتعامل مع مجموعة المناطق المستقلة كبنية واحدة متكاملة ضمن ما يعرف بمجموعة المناطق (Areas Collection). يطبق البرنامج الحجم المحدد (11 نقطة) على نطاق الخلايا الأولى ونطاق الخلايا الثانية بالتزامن، مع الإبقاء على العمود B بكامل خصائصه السابقة دون أي تعديل. يجنب هذا الأسلوب المبرمجين كتابة تعليمات متعددة، ولكنه يتطلب حذراً كبيراً في كتابة أسماء النطاقات لتفادي تجاوز الحد المسموح به لطول النص الاستدلالي لمعامل النطاق.

6.2 تغيير حجم خط صفوف كاملة باستخدام كائن EntireRow

عند الرغبة في إبراز صفوف كاملة بأحجام خطوط مميزة، كصفوف العناوين الرئيسية للمصنف أو صفوف المجاميع الختامية التي تمتد عبر عرض الورقة بأكمله، يوفر النموذج الكائني لإكسل أدوات مخصصة لهذا الغرض. يمكن للمطور استخدام كائن الصفوف المباشر أو استدعاء الخاصية EntireRow المنبثقة عن أي خلية أو نطاق، كما يتضح من النموذجين التاليين:

Sub SetEntireRowFontSize()
    Range(“1:1”).Font.Size = 16
    Range(“A5”).EntireRow.Font.Size = 12
End Sub

يقوم السطر الأول بتعيين حجم الخط لكافة خلايا الصف الأول الممتدة من العمود A وحتى العمود الأخير في الورقة (XFD) ليكون 16 نقطة، وهو تنسيق ملائم للعناوين الإدارية الكبرى. أما السطر الثاني، فيوفر مرونة برمجية فائقة؛ حيث يستهدف الصف الخامس انطلاقاً من الإشارة إلى الخلية A5 فقط. يؤدي هذا التعديل إلى إعادة الضبط التلقائي لارتفاع الصف بكامله، مما يضمن عرض النصوص بكامل حجمها دون أي تداخل مع الخطوط الفاصلة لشبكة الورقة.

6.3 تعديل أحجام الخطوط لأعمدة كاملة باستخدام كائن EntireColumn

على غرار التعامل مع الصفوف، تبرز الحاجة لتخصيص خطوط أعمدة بيانات كاملة، مثل الأعمدة المخصصة للملاحظات النصية الطويلة أو المعرفات الرقمية الضخمة التي تتطلب خطوطاً أدق حجماً لتفادي التمدد المفرط لعرض العمود. يمكن تحقيق ذلك باستهداف مجموعة الأعمدة مباشرة أو استخدام الخاصية EntireColumn:

Sub SetEntireColumnFontSize()
    Columns(“B”).Font.Size = 10
    Range(“D1”).EntireColumn.Font.Size = 9
End Sub

تتجلى قوة هذه التقنية في تأثيرها التراكمي المستقبلي؛ فتعيين حجم الخط للعمود B بأكمله يعني أن أي قيمة نصية أو رقمية سيتم إدخالها لاحقاً في أي خلية جديدة ضمن هذا العمود ستكتسب الحجم المحدد مسبقاً (10 نقاط) بصورة آلية. يسهم ذلك في الحفاظ على النمط الجمالي المتفق عليه للجداول حتى مع التوسع المستمر للبيانات عبر الزمن، ويضمن تناسق التقارير التشغيلية المحدثة دورياً دون تدخل برمجي جديد.

7. التحكم الشرطي والديناميكي في أحجام الخطوط عبر الحلقات المنطقية

7.1 دمج الشروط المنطقية If…Then لتغيير الحجم استناداً للقيمة

يرتقي التنسيق البرمجي إلى مستويات فائقة من الذكاء التشغيلي عندما يقترن بالقواعد المنطقية الشرطية (Conditional Logic). تتيح هياكل الشروط، مثل If…Then…Else، إمكانية ربط أبعاد وحجم الخط بالقيمة الحقيقية المخزنة داخل الخلية، مما يحول حجم الخط إلى مؤشر بصري استثنائي يرسل إشارات فورية للمستخدم حول حالة البيانات، كما يظهر في الكود التالي:

Sub ConditionalFontSize()
    Dim targetCell As Range
    Set targetCell = Range(“B2”)
    If targetCell.Value > 1000000 Then
        targetCell.Font.Size = 16
    Else
        targetCell.Font.Size = 11
    End If
End Sub

يقوم هذا الإجراء باختبار القيمة المالية في الخلية B2؛ فإذا تجاوزت القيمة حاجز المليون، يتم تكبير الخط تلقائياً إلى 16 نقطة لإبراز هذا الإنجاز أو المؤشر الحرج، وفيما عدا ذلك يبقى الحجم عند مستواه القياسي البالغ 11 نقطة. يخدم هذا التمييز البرمجي الوضوح الإدراكي ويضمن لفت الانتباه نحو الاستثناءات الإحصائية والأرقام الشاذة بسرعة تفوق قراءة الأرقام المجردة.

7.2 حلقات التكرار التكبيرية والتصغيرية النسبية للنصوص

في العديد من سيناريوهات بناء لوحات التحكم المتقدمة، يحتاج المطور إلى تضخيم أو تصغير حجم النصوص بنسب معيارية أو خطوات محددة بدلاً من إسناد أرقام ثابتة مطلقة. تتيح لغة VBA استخدام الخاصية ذاتها في طرفي معادلة الإسناد، مما يسمح بإجراء تعديلات نسبية متدرجة، كزيادة حجم الخط الحالي بمقدار نقطتين:

Sub IncreaseFontSizeRelatively()
    Dim c As Range
    For Each c In Range(“A1:A10”)
        If c.Font.Size <= 407 Then
            c.Font.Size = c.Font.Size + 2
        End If
    Next c
End Sub

يبرز في هذه الشفرة استخدام شرط الحماية If c.Font.Size <= 407؛ حيث يعد هذا التحقق الرياضي بالغ الأهمية لمنع تجاوز الحد الأقصى المطلق لبرنامج إكسل (409 نقاط). فإذا كان حجم الخط الحالي 408 وزدنا عليه نقطتين سيولد النظام خطأً فادحاً، مما يوضح ضرورة اقتران التعديلات النسبية دائماً بدوال الأسقف والحماية الرياضية لضمان سلامة التنفيذ واستقرار الماكرو.

7.3 المرور الحلقي الفعال عبر كائنات النطاق بواسطة For Each…Next

تمثل حلقة For Each…Next الأداة الأكثر أناقة وكفاءة في لغة VBA للتنقل عبر مجموعات الكائنات داخل إكسل. تتيح هذه الحلقة فحص كل خلية على حدة ضمن النطاق المخصص، وتطبيق التعديلات الحجمية بناءً على اعتبارات نوع البيانات (نص، رقم، تاريخ) أو السمات المكانية، دون الحاجة للتعامل مع مؤشرات المصفوفات العددية المعقدة:

Sub LoopUsedRangeFontSize()
    Dim currentCell As Range
    For Each currentCell In ActiveSheet.UsedRange
        If IsNumeric(currentCell.Value) And currentCell.Value < 0 Then
            currentCell.Font.Size = 13
        End If
    Next currentCell
End Sub

تتجلى الكفاءة العالية لهذا الكود في استخدام كائن النطاق المستخدم ActiveSheet.UsedRange؛ فبدلاً من فحص ملايين الخلايا الفارغة في ورقة العمل، يتم حصر الحلقة التكرارية داخل الحدود الجغرافية الحقيقية التي تحتوي على بيانات ومحتوى، مما يقلل زمن التنفيذ إلى أجزاء ضئيلة من الثانية ويوفر حلاً استثنائياً لفرز وتنسيق الأرقام السالبة لتنبيه المراجع المالي فور تشغيل الإجراء.

8. تعظيم كفاءة الشفرة البرمجية باستخدام هيكلية With…End With

8.1 الفوائد الهيكلية والأكاديمية لكتلة With في تسريع التنفيذ

تحظى كتلة With…End With بمكانة رفيعة في هندسة البرمجيات باستخدام VBA؛ حيث صُممت خصيصاً لتحسين جودة الشفرات البرمجية وتسريع تنفيذها عند تكرار استدعاء الخصائص والأساليب التابعة لكائن واحد محدد. في السياق التقليدي، عندما يقوم المبرمج بكتابة عدة أسطر تشير إلى الخصائص المختلفة لكائن الخط، يضطر المحرك البرمجي في كل سطر إلى حل المسار المرجعي الهرمي للكائن انطلاقاً من واجهة التطبيق، مروراً بالمصنف والورقة والنطاق، وصولاً إلى كائن الخط، وهو ما يستهلك زمناً إضافياً.

عند تأطير العمليات داخل كتلة With، يقوم المحرك بإنشاء رابط مباشر ومؤقت للكائن المستهدف لمرة واحدة فقط في الذاكرة، ثم ينفذ كافة التعليمات المنسوبة إليه مباشرة عبر النقطة المرجعية (Dot Operator). يؤدي ذلك إلى تقليص عدد استدعاءات خادم الكائنات بشكل ملحوظ، مما يسهم في رفع سرعة التنفيذ عند التعامل مع نطاقات كبيرة، فضلاً عن تحسين مقروئية الشفرة البرمجية وجعلها أكثر نظافة وأسهل في المراجعة والتدقيق والصيانة المؤسسية اللاحقة.

8.2 دمج تعيين حجم الخط مع السمات التنسيقية الموازية

نادراً ما يقتصر العمل التنسيقي على تغيير الحجم بمفرده؛ إذ تقتضي المعايير الطباعية الاحترافية دمج الحجم مع حزمة متكاملة من السمات التنسيقية الموازية لإبراز النصوص على نحو متناسق. تشمل هذه السمات تحديد الاسم المكتبي للخط المستخدم لضمان التوافق مع الهوية البصرية، وتطبيق السمة العريضة (Bold) لتقوية الحروف، وضبط الألوان بما يتوافق مع معايير الراحة البصرية والوضوح اللوني.

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

8.3 مثال تطبيقي عملي لدمج التنسيقات باستخدام With Range(“A1:C1”).Font

لتطبيق هذه المفاهيم الهيكلية بصورة عملية وشاملة، يقدم المثال التالي نموذجاً احترافياً لكيفية دمج ضبط حجم الخط مع مجموعة من الخصائص التنسيقية المحورية لنطاق يمثل ترويسة جدول رئيسي:

Sub FormatHeaderRange()
    With Range(“A1:C1”).Font
        .Name = “Arial”
        .Size = 14
        .Bold = True
        .Color = RGB(0, 51, 102)
    End With
End Sub

يبدأ هذا الإجراء بفتح الكتلة وتوجيهها مباشرة إلى كائن الخط للنطاق A1:C1. يتم داخل الكتلة تنفيذ أربع عمليات متتالية: ضبط المحارف على خط “Arial”، ورفع الارتفاع إلى 14 نقطة، وتفعيل النمط العريض، وتلوين النصوص بالأزرق الداكن باستخدام دالة التكوين اللوني RGB. تنتهي الكتلة بالعبارة End With، مما يحرر المرجع الكائني بأمان. يظهر هذا الكود نموذجاً مثالياً للأناقة البرمجية والسرعة التنفيذية التي تحافظ على استقرار موارد النظام.

9. معالجة الأخطاء الاستثنائية والقيود التشغيلية أثناء ضبط حجم الخط

9.1 التعامل مع المدخلات غير العددية والقيم السالبة الممنوعة

تتعرض البرامج لأخطاء تشغيلية مفاجئة عندما تعتمد العمليات التنسيقية على مدخلات تفاعلية من المستخدم عبر دوال مثل InputBox، أو عندما تقرأ أحجام الخطوط من خلايا جداول أخرى تحتوي على نصوص أو قيم حسابية غير صحيحة. فإذا حاول الماكرو إسناد قيمة نصية مثل “كبير” أو رقماً سالباً مثل (-5) لخاصية Font.Size، سيتوقف البرنامج فوراً وتظهر رسالة خطأ بعدم تطابق الأنواع (Type Mismatch – Error 13) أو خطأ في تطبيق الطريقة (Run-time error 1004).

لتجنب هذا الانهيار، يجب بناء صمامات أمان برمجية مسبقة تعتمد على دوال التحقق الرقمي، مثل دالة IsNumeric()، مع فحص الحدود المنطقية للمدخلات قبل محاولة إسنادها لكائن الخط. يوضح الكود التالي هذا المفهوم الوقائي:

Sub SafeSetFontSize()
    Dim userInput As Variant
    userInput = InputBox(“أدخل حجم الخط المطلوب بين 1 و 409:”)
    If IsNumeric(userInput) Then
        If CSng(userInput) >= 1 And CSng(userInput) <= 409 Then
            Range(“A1”).Font.Size = CSng(userInput)
        Else
            MsgBox “القيمة خارج النطاق المسموح به (1 إلى 409).”
        End If
    Else
        MsgBox “الرجاء إدخال قيمة عددية صالحة.”
    End If
End Sub

9.2 إدارة حماية أوراق العمل (Worksheet Protection) وتعارض التنسيق

تشكل حماية أوراق العمل حجر عثرة شائع أمام تنفيذ أكواد التنسيق التلقائي في البيئات المؤسسية؛ حيث تقوم حماية الورقة (Sheet Protection) بقفل الخلايا لمنع العبث بالصيغ والمعادلات. إذا حاول ماكرو VBA تعديل خاصية Font.Size لخلية مقفلة داخل ورقة محمية دون وجود تصريح مسبق، سيتوقف التنفيذ مباشرة مصحوباً بالخطأ الشهير 1004 الذي يفيد بتعذر تعديل خصائص الخلايا المحمية.

تتمثل الممارسة البرمجية القياسية لمعالجة هذا التعارض في فك الحماية برمجياً بصورة مؤقتة قبل تطبيق التعديل التنسيقي، ثم إعادة تفعيل الحماية فور الانتهاء من العمليات المطلوبة، كما هو موضح أدناه:

Sub FormatProtectedSheetRange()
    On Error GoTo ResetProtection
    ActiveSheet.Unprotect Password:=”SecurePass123″
    Range(“A1:B10”).Font.Size = 12
ResetProtection:
    ActiveSheet.Protect Password:=”SecurePass123″
End Sub

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

9.3 بناء دروع الحماية البرمجية عبر معالجات الأخطاء On Error

تقتضي هندسة الأكواد الاحترافية تحصين البرامج ضد المفاجآت غير المتوقعة أثناء التنفيذ من خلال تضمين معالجات أخطاء مهيكلة ومحكمة. إن الاعتماد الأعمى على عبارة On Error Resume Next لتجاهل كافة الأخطاء يعد ممارسة برمجية غير آمنة؛ لأنها تخفي المشكلات الجذرية وتسمح باستمرار تنفيذ الشفرة في حالات غير مستقرة قد تؤدي إلى تشويه البيانات أو تلف التنسيقات العامة للمصنف.

بدلاً من ذلك، يُفضل بناء كتلة تصيد منظمة باستخدام تعليمة القفز الموجه On Error GoTo ErrorHandler. تتيح هذه الكتلة التقاط رمز الخطأ ورسالته التوضيحية بدقة، وتوثيقه في سجل النظام، ومن ثم اتخاذ تدابير علاجية أو إنهاء الإجراء بصورة آمنة مع إعادة ضبط إعدادات بيئة العمل لتفادي ترك المصنف في حالة تجميد أو عدم استجابة.

10. أفضل الممارسات البرمجية والمعايير المؤسسية لتنسيق الخطوط عبر VBA

10.1 تحسين الأداء السريع عبر تعطيل تحديث الشاشة والأحداث

عند تنفيذ عمليات تنسيقية واسعة النطاق تتضمن تعديل أحجام الخطوط لآلاف الخلايا أو عبر عدة أوراق عمل، يستهلك تحديث واجهة المستخدم الرسومية قدراً هائلاً من موارد المعالج؛ حيث يحاول إكسل إعادة رسم كل خلية وكل صف على الشاشة فور كل تعديل طفيف. يؤدي هذا السلوك إلى وميض مزعج للشاشة وبطء ملحوظ في سرعة المعالجة العامة.

ولتحقيق أقصى سرعة تشغيلية ممكنة، يتعين على المطور تعطيل تحديث الشاشة وتعطيل استجابة الأحداث التلقائية والحساب التلقائي قبل بدء الإجراءات التنسيقية، ثم إعادة تفعيلها فور الانتهاء كما يوضح الهيكل التالي:

Sub HighPerformanceFormatting()
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

    Range(“A1:Z5000”).Font.Size = 10

    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

يختصر هذا الإجراء زمن التنفيذ بنسب تتجاوز أحياناً 90%، حيث تتم كافة المعالجات الحسابية والتنسيقية في الذاكرة الخفية الصامتة، ولا تظهر النتائج للمستخدم إلا بعد اكتمال التنسيق بصورة نهائية وكاملة، مما يمنح التطبيق طابعاً برمجياً احترافياً فائق السرعة والسلاسة.

10.2 فصل منطق البيانات الحسابية عن منطق العرض التنسيقي

تعتبر قاعدة “فصل الاهتمامات” (Separation of Concerns) من أهم المبادئ الهندسية الراسخة في تطوير البرمجيات المؤسسية. تقتضي هذه القاعدة عدم دمج العمليات الحسابية المعقدة ومعالجة البيانات مع شفرات التنسيق البصري وتعديل الخطوط داخل إجراء فرعي واحد؛ إذ يؤدي هذا التداخل إلى صعوبة بالغة في تنقيح الأكواد (Debugging) وتتبع مكامن الخلل البرمجي.

بدلاً من ذلك، يُنصح بتصميم إجراءات فرعية مستقلة ومخصصة فقط للعمليات المنطقية والحسابية، والتي تقوم عند استقرار نتائجها باستدعاء إجراءات فرعية أخرى متخصصة حصراً في تنسيق المظهر وضبط أحجام الخطوط. يسهل هذا الفصل من عمليات التعديل والتطوير المستقبلية؛ فإذا قررت المؤسسة تعديل نمط تقاريرها أو تغيير أحجام خطوط عناوينها، فلن يحتاج المبرمج إلا لتعديل وحدة التنسيق النمطية دون المساس بنواة المعادلات الحسابية الحساسة للبيانات.

10.3 التوثيق المعياري للأكواد ومرونة الصيانة طويلة الأمد

تضمن الصيانة طويلة الأمد للبرمجيات المؤسسية قدرة فرق العمل المختلفة على فهم وتعديل الشفرات دون الحاجة إلى الرجوع للمطور الأصلي. يتحقق ذلك من خلال الاستغناء عن “الأرقام السحرية” (Magic Numbers) المبهمة المكتوبة مباشرة داخل نصوص الأكواد، واستبدالها بثوابت عامة واضحة وموثقة في أعلى الوحدة النمطية، مثل:

Public Const TITLE_FONT_SIZE As Single = 16
Public Const BODY_FONT_SIZE As Single = 11
Public Const FOOTER_FONT_SIZE As Single = 9

وعند تطبيق هذه الثوابت في الإجراءات، مثل Range("A1").Font.Size = TITLE_FONT_SIZE، تصبح الشفرة واضحة المعالم وذاتية التوثيق. كما يسهم إدراج التعليقات التفسيرية (Comments) في توضيح السياق الوظيفي لكل تعديل حجمي وأثره على سهولة القراءة وتكامل التصميم، مما يرفع من جودة المشروع ويسهل نقله وإعادة استخدامه عبر مختلف المصنفات والمشاريع التقنية المستقبلية بنجاح واقتدار.

خاتمة

استعرض هذا المقال دراسة شاملة وتفصيلية لآليات تعيين وقراءة حجم الخط باستخدام لغة VBA في بيئة مايكروسوفت إكسل. انطلاقاً من المبادئ التأسيسية للأتمتة التنسيقية ودورها في تعزيز المقروئية والاتساق البصري، تم تفكيك النموذج الكائني لكائن الخط وتحديد الخصائص الفيزيائية لوحدة النقاط المطبعية، مع توضيح الحدود الرياضية المسموح بها برمجياً لتفادي أخطاء زمن التشغيل.

كما تم تسليط الضوء على الحلول التطبيقية المبتكرة للتعامل مع النطاقات المتصلة والمنفصلة والصفوف والأعمدة الكاملة، والتحكم الديناميكي المشروط في أحجام النصوص. إن الالتزام بأفضل الممارسات الهندسية، المتمثلة في استخدام كتل With...End With المنظمة، وتطبيق دروع الحماية ومعالجة الأخطاء، وإدارة تحديث الشاشة بكفاءة، يشكل الأساس المتين لبناء تطبيقات ومصنفات ذكية تدعم صناعة القرار المؤسسي وتواكب متطلبات إدارة البيانات الحديثة بأعلى معايير الدقة والاحترافية.

المراجع

  • Alfaifi, A. Y. G. (2015). Building the Arabic Learner Corpus and a system for Arabic error annotation. White Rose eTheses Online (University of Leeds, The University of Sheffield, University of York). https://doi.org/10.13140/rg.2.2.32081.53608
  • Rawlins, K. (2021). Effects of dyslexia on problem solving – Strategies and interventions for syllogistic reasoning. Lancaster EPrints (Lancaster University). https://doi.org/10.17635/lancaster/thesis/1256
★

تقييم هذا المحتوى

5.0 / 5 • 7 تقييمات

اقتباس هذا المقال

looti, M. (2026, أكتوبر 22). كيفية تعيين حجم الخط باستخدام VBA (مع مثال). عرب سايكلوجي. https://arabpsychology.com/statistics/kayfiyat-taeen-hajm-alkhat-bi-istikhdam-vba-maa-mithal/
looti, Mohammed. “كيفية تعيين حجم الخط باستخدام VBA (مع مثال).” عرب سايكلوجي, 22 أكتوبر 2026, https://arabpsychology.com/statistics/kayfiyat-taeen-hajm-alkhat-bi-istikhdam-vba-maa-mithal/.
looti, Mohammed. “كيفية تعيين حجم الخط باستخدام VBA (مع مثال).” عرب سايكلوجي. أكتوبر 22, 2026. https://arabpsychology.com/statistics/kayfiyat-taeen-hajm-alkhat-bi-istikhdam-vba-maa-mithal/.