مشاريع VBA
مشروعات VBA
هذا الدليل يوضح كيفية فحص وتعديل مشروع VBA المدمج في مستند ممكّن للماكرو باستخدام Aspose.Words FOSS لـ .NET. يمكن لـ Aspose.Words FOSS لـ .NET فحص وتعديل مشروع VBA المدمج في مستند ممكّن للماكرو (.docm) — وحداته، شفرة المصدر، وإشارات المكتبة — عبر Document.VbaProject ونموذج كائن VbaProject/VbaModule. هذا هو فحص المشروع وتحريره، وليس تنفيذ الماكرو: لم يتضمن Aspose.Words أبداً بيئة تشغيل VBA، في المنتج التجاري أو نسخة FOSS هذه، لذا يتم قراءة شفرة VBA وتعديلها كبيانات، وليس تشغيلها.
الوصول إلى مشروع VBA الخاص بالمستند
Document.VbaProject يُرجِع VbaProject، أو null إذا لم يكن للمستند مشروع VBA. Document.HasMacros يُبلغ عما إذا كان مشروع VBA موجودًا دون الحاجة إلى الوصول إلى VbaProject أولاً. VbaProject.Name و CodePage و IsSigned و IsProtected يصفون المشروع نفسه.
قراءة وتعديل الوحدات
VbaProject.Modules يُرجِع VbaModuleCollection. يمكن الفهرسة فيه بالاسم للبحث عن وحدة معينة (مثال: modules["ModuleName"])، أو تعداد المجموعة بأكملها. كل VbaModule يكشف عن Name، Type (وهو VbaModuleType: DocumentModule، ProceduralModule، ClassModule أو DesignerModule)، و— بشكل حاسم — عن SourceCode كخاصية سلسلة قابلة للكتابة، بحيث يمكن قراءة شفرة الوحدة وإعادة كتابتها برمجيًا. VbaModuleCollection.Add(vbaModule) و Remove(module) يضيفان أو يزيلان الوحدات من المشروع.
إشارات المكتبة
يُعيد VbaProject.References VbaReferenceCollection من كائنات VbaReference — مكتبات النوع Automation ومشاريع VBA الأخرى التي يعتمد عليها كود الماكرو. يُبلغ VbaReference.Type عن VbaReferenceType (Registered, Project, Original أو Control)، وLibId يحدد المكتبة المشار إليها. VbaReferenceCollection.Remove(item) / RemoveAt(index) يزيلان المراجع.
إزالة مشروع VBA
يقوم Document.RemoveMacros() بإزالة مشروع VBA من المستند بالكامل — مفيد لإنشاء نسخة خالية من الماكرو من مستند تم شحنه أصلاً مع ماكروهات.
نصائح وأفضل الممارسات
- تحقق من
Document.HasMacrosقبل تعديلDocument.VbaProjectلتجنب معالجة القيم الفارغة في المستندات التي لم تحتوي على ماكروهات أبداً. - عامل
VbaModule.SourceCodeكنص عادي — لأنه لا يوجد بيئة تشغيل VBA، فإن تحريره لا يتحقق من صحة الكود؛ سيظل VBA غير المُصاغ يمر عبر العملية، لكنه لن يعمل بشكل صحيح في Word حتى يتم تصحيحها. - استخدم
VbaProject.IsSigned/IsProtectedلاكتشاف المشاريع الموقعة أو المحمية قبل محاولة تعديل وحداتها. Document.RemoveMacros()هي أبسط طريقة لإزالة الماكروهات من نسخة توزيع “نظيفة”، بدلاً من مسح كل وحدة يدوياً.
مشكلات شائعة
| المشكلة | السبب | الإصلاح |
|---|---|---|
Document.VbaProject هو null | المستند لا يحتوي على مشروع VBA | تحقق من Document.HasMacros أولاً قبل الوصول إلى أعضاء VbaProject |
توقع تشغيل الماكرو بعد تحرير SourceCode | Aspose.Words لا يحتوي على محرك تنفيذ VBA | استخدم هذا API لقراءة/تعديل مصدر الماكرو والبنية فقط؛ شغِّل المستند الناتج في بيئة تحتوي على وقت تشغيل VBA، مثل Microsoft Word، لتنفيذ الشيفرة |
فهرسة VbaModuleCollection بالاسم لا تُعيد أي شيء | عدم تطابق اسم الوحدة (الحالة أو التهجئة الدقيقة) | عدّ VbaProject.Modules لتأكيد اسم الوحدة الدقيق |
FAQ
هل يمكن لـ Aspose.Words FOSS لـ .NET تشغيل ماكروات VBA في مستند؟
لا. لا يحتوي هذا الإصدار ولا المنتج التجاري Aspose.Words على محرك تنفيذ VBA — يتم قراءة مشاريع VBA وتعديلها كبيانات (مصدر الوحدة، المراجع، بيانات تعريف المشروع)، ولا يتم تنفيذها أبداً.
كيف أقرأ شفرة المصدر للماكرو؟
احصل على الوحدة عن طريق فهرسة VbaProject.Modules بالاسم (مثال: modules["ModuleName"])، ثم اقرأ خاصية SourceCode الخاصة بها.
هل يمكنني إضافة وحدة VBA جديدة تماماً إلى مستند؟
نعم — أنشئ VbaModule وأضفه إلى VbaModuleCollection الخاص بالمشروع عبر Add(vbaModule).
كيف أتحقق مما إذا كان المستند يحتوي على ماكرو قبل معالجته؟
اقرأ Document.HasMacros; إنه true إذا كان المستند يحمل مشروع VBA، دون الحاجة للوصول إلى Document.VbaProject أولاً.
كيف أزيل جميع الماكرو من المستند؟
استدعِ Document.RemoveMacros().
API Reference ملخص
| فئة / طريقة | وصف |
|---|---|
Document.VbaProject | الـVbaProject الخاص بالمستند، أو null إذا لم يكن به ماكرو |
Document.HasMacros | ما إذا كان مشروع VBA موجودًا |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | وحدة واحدة: Name, Type (VbaModuleType), قابل للكتابة SourceCode |
VbaModuleCollection | Add(), مفهرس بالاسم, Remove(), Count |
VbaReference / VbaReferenceCollection | مكتبات الأنواع المرجعية: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | يزيل مشروع VBA من المستند |