4.4الماكرو وبرمجة VBA
الأساسي في 30 ثانية
- سجّل، ثم أعد القراءة: يحفظ ماكرو سلسلة أفعال بـ VBA — فنعيد بنقرة تشغيل تقرير الأسبوع مُنسَّقاً بالمثل.
- اقرأ المحرّر (Alt+F11) للتقدّم: غيّر نطاقاً أو قيمة أو لوناً في الكود المولَّد — ماكروات قصيرة وموجّهة، تُختبر على نسخة.
- ردّ فعل وسيم: الماكرو لا يُلغى (Ctrl+Z عاطل) وقد يكون خبيثاً — مصنّف بصيغة .xlsm، ومصادر موثوقة فقط.
حالة مصغّرة متسلسلة — وسيم يعيد تنسيق الاثنين بنقرة
وسيم، محاسب في الجزائر، ينسّق التقرير نفسه كل اثنين (تثبيت الألواح، عناوين عريضة، مبالغ بالدينار، مصفاة تلقائية). يسجّل ماكرو «MiseEnFormeRapport»، ويفتح الكود بـ Alt+F11، ويتعرّف على الأسطر ويضبط النطاق. محفوظاً بصيغة .xlsm، نقرة تعيد كل شيء — مُختبراً أولاً على نسخة، لأن الماكرو لا يُلغى. المعلم الرابع للمسار الرئيسي: المتكرّر في الواجهة صار مؤتمتاً، بتحفّظ.
تكملة حالات 4.1-4.3 — يؤتمت وسيم ما لا يفعله Power Query ولا الصيغ: إيماءات الواجهة.
1. تسجيل ماكرو
يحفظ ماكرو سلسلة أفعال لإعادة تشغيلها. المطوّر ▸ تسجيل ماكرو: نؤدّي الإيماءات (تنسيق، تصفية، لصق…)، ثم نوقف التسجيل. فيولّد Excel كود VBA. وإعادة تشغيل الماكرو تُعيد كل شيء فوراً — مثالي لتقرير وسيم الأسبوعي، مُنسَّقاً بالمثل.
نُبقي ماكروات قصيرة وموجّهة: مهمة = ماكرو. الوحوش التي تفعل كل شيء غير مقروءة وتنكسر عند أول تغيير في البنية.
2. قراءة VBA وتعديله
يُفتح الكود في محرّر VBA (Alt+F11). حتى دون أن تكون مطوّراً، يمكنك قراءته وتعديله: تغيير قيمة، نطاق، لون. إنها أفضل طريقة للتعلّم: سجّل، ثم افهم الكود الناتج — ويتعرّف وسيم سريعاً على أسطر التعريض وتنسيق العملة.
يتعامل VBA مع كائنات (مصنّف، ورقة، نطاق) بـخصائص وطرق: Worksheets، Range، Font.Bold، NumberFormat… وفهم هذه المفردات يكفي لتعديل 80 % من الماكروات المسجّلة.
3. الاحتياطات
يُحفظ مصنّف الماكرو بصيغة .xlsm — وفي .xlsx تُفقَد الماكروات. وقد تكون الماكروات ناقلاً لفيروسات: لا تفعّل إلا ما كان من مصادر موثوقة، بعلم بالسبب. وحدّ آخر: الماكرو لا «يُلغى» (Ctrl+Z لا يتجاوز أفعاله) — لذا نختبر على نسخة.
وأخيراً، لتحويل بسيط للبيانات، Power Query غالباً أفضل من VBA: بلا كود، قابل للتحديث، وأأمن. ويبقى VBA مناسباً لأتمتة إيماءات واجهة متنوّعة (تنسيق، مربّعات حوار، تفاعلات بين الأوراق).
🔎 مثال ملموس — 🔎 مثال ملموس — أتمتة تنسيق أسبوعي
كل اثنين، ينسّق وسيم التقرير نفسه؛ فيولّد المسجّل هذا الكود VBA:
Sub MiseEnFormeRapport()
' تثبيت الألواح + عناوين عريضة (وسيم: تقرير أسبوعي)
Range("A2").Select
ActiveWindow.FreezePanes = True
Rows("1:1").Font.Bold = True
' مبالغ بالدينار + مصفاة تلقائية
Columns("C:C").NumberFormat = "#,##0 DZD"
Range("A1").AutoFilter
End Sub
القراءة: يحوّل المسجّل نقرات إلى كود قابل لإعادة الاستخدام ومقروء.
الدرس: نؤتمت المتكرّر والقابل للتكرار؛ ونختبر على نسخة (لا إلغاء).
مفردات القسم
- الماكرو
- سلسلة أفعال مسجّلة لإعادة تشغيلها بنقرة.
مثال بسيط: MiseEnFormeRapport لدى وسيم يعيد تنسيق الاثنين.
ما ليس كذلك: صيغة تُعاد حسابها وحدها.
رد فعل: إيماءة أسبوعية متطابقة: سجّلها بماكرو.
- VBA
- Visual Basic for Applications: لغة ماكروات Excel (كائنات، خصائص، طرق).
مثال بسيط: يقرأ وسيم Range و Font.Bold في كوده المسجّل.
ما ليس كذلك: لغة M في Power Query (تحضير البيانات).
رد فعل: لتعديل ماكرو: تعرّف على الكائنات والخصائص.
- .xlsm
- صيغة مصنّف تدعم الماكروات؛ و.xlsx يُفقدها.
مثال بسيط: يحفظ وسيم تقريره المؤتمت بصيغة .xlsm.
ما ليس كذلك: مصنّف .xlsx يحتفظ بالماكروات.
رد فعل: ماكرو منشأ: احفظه فوراً بصيغة .xlsm.
- أمان الماكرو
- قد تكون الماكروات خبيثة: فعّلها بعلم بالسبب، من مصادر موثوقة.
مثال بسيط: لا يفعّل وسيم إلا ماكرواته وما اعتُمد لدى المكتب.
ما ليس كذلك: كود غير ضارّ بطبعه، يُفعَّل دون تفكير.
رد فعل: ماكرو وارد: تحقّق من المصدر قبل التفعيل.
في التطبيق — عملياً — سجّل ماكرو وأعد قراءته
- فعّل تبويب المطوّر، ثم تسجيل ماكرو.
- نفّذ تنسيقاً بسيطاً، وأوقف التسجيل.
- افتح الكود (Alt+F11) وتعرّف على الأسطر المقابلة.
- غيّر قيمة (مثل لون)، واحفظ بصيغة .xlsm، وأعد التشغيل على نسخة.
سكربت جاهز للقول — أعلن الماكرو للفريق (30 ثانية)
«هذا وسيم: تنسيق تقرير الاثنين مسجّل بماكرو — نقرة تعيد كل شيء: الألواح، التعريض، تنسيق الدينار، المصفاة. المصنّف بصيغة .xlsm، واختبرته على نسخة لأن الماكرو لا يُلغى. لا تفعّلوا إلا ماكرواتنا المعتمدة.»
قُله قبل نشر الملف: ذكّر بـ .xlsm والمصدر الموثوق.
قالب نسخ-لصق — حلقة VBA آمنة على نطاق (مع نسخة اختبار)
Sub NormaliserMontants()
Dim c As Range
Application.ScreenUpdating = False
For Each c In Worksheets("Ventes").Range("C2:C500")
If IsNumeric(c.Value) Then c.Value = Round(c.Value, 2)
Next c
Application.ScreenUpdating = True
MsgBox "تم ضبط المبالغ (مُختبر على نسخة)."
End Sub
تنسيق أسبوعي
كما وسيم: سجّل الألواح، التعريض، تنسيق DZD والمصفاة — نقرة كل اثنين.
عدّل الكود
غيّر النطاق C2:C500 أو التنسيق في المحرّر: يتبع الماكرو البنية الجديدة.
ماكرو ورد بالبريد
مصدر مجهول: لا تفعّل — اطلب اعتماداً، وحلّل بعلم بالسبب.
بيانات للتحويل
فضّل Power Query (بلا كود، قابل للتحديث) بدل ماكرو هشّ.
✓ ممارسات جيدة
- سجّل أولاً، ثم اقرأ الكود للتعلّم.
- ماكروات قصيرة وموجّهة.
- اختبر على نسخة (ماكرو لا يُلغى).
✗ أخطاء شائعة
- تفعيل ماكروات من مصادر مجهولة (فيروسات).
- نسيان الحفظ بصيغة .xlsm (فُقدان الماكروات).
- استخدام VBA حيث يفضُل Power Query (تحويل البيانات).
النقاط الأساسية
- الماكرو يعيد تشغيل سلسلة أفعال؛ وكوده VBA.
- نسجّل، ثم نقرأ/نعدّل في المحرّر (Alt+F11).
- مصنّف بماكروات = .xlsm؛ والماكروات = خطر أمني.
- الماكرو لا يُلغى: اختبر على نسخة.
تحدّي 48 ساعة — طبّقه غداً
على نسخة من تقرير حقيقي: سجّل تنسيقك، أعد قراءة الكود بـ Alt+F11، غيّر قيمة، احفظ بصيغة .xlsm وأعد التشغيل.
- أعرف كيف أسجّل وأعيد تشغيل ماكرو موجّه.
- أعرف كيف أقرأ وأعدّل VBA المولَّد (نطاق، قيمة).
- أعرف الاحتياطات (.xlsm، نسخة اختبار، مصادر موثوقة).
أسئلة شائعة
ماكرو (VBA) أم Power Query؟
لتحويل/توحيد البيانات: Power Query (بلا كود، قابل للتحديث، أأمن). لأتمتة إيماءات واجهة متنوّعة (تنسيق، مربّعات حوار، تفاعلات)، يبقى VBA مناسباً.
هل يجب تعلّم البرمجة لاستخدام الماكروات؟
لا للتسجيل وإعادة التشغيل؛ وقليل لتعديل الكود. بل هو مدخل جيد إلى البرمجة: سجّل إجراءً واقرأ VBA المقابل.
أي احتياط خاص بالماكروات؟