إدارة مشاريع VBA في العروض التقديمية باستخدام C++

تحتوي مساحة الأسماء Aspose.Slides.Vba على فئات وواجهات للعمل مع الماكرو وكود VBA.

إضافة ماكرو VBA

يوفر Aspose.Slides الفئة VbaProject لتتيح لك إنشاء مشاريع VBA (ومرجعيات المشروع) وتحرير الوحدات الحالية. يمكنك استخدام الواجهة IVbaProject لإدارة VBA المدمج في عرض تقديمي.

  1. إنشاء كائن جديد من الفئة Presentation.
  2. استخدم مُنشئ VbaProject لإضافة مشروع VBA جديد.
  3. أضف وحدة إلى VbaProject.
  4. حدد شفرة المصدر للوحدة.
  5. أضف مراجع إلى .
  6. أضف مراجع إلى Microsoft Office.
  7. ربط المراجع بمشروع VBA.
  8. احفظ العرض التقديمي.

يظهر لك هذا الكود C++ كيفية إضافة ماكرو VBA من الصفر إلى عرض تقديمي:

// مسار دليل المستندات.
const String outPath = u"../out/AddVBAMacros_out.pptm";

// إنشاء كائن من فئة العرض التقديمي
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// إنشاء مشروع VBA جديد
presentation->set_VbaProject(MakeObject<VbaProject>());

// إضافة وحدة فارغة إلى مشروع VBA
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");

// تعيين شفرة المصدر للوحدة
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");

// إنشاء مرجع إلى <stdole>
SharedPtr<VbaReferenceOleTypeLib> stdoleReference =
	MakeObject<VbaReferenceOleTypeLib>(u"stdole", u"*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");

// إنشاء مرجع إلى Office
SharedPtr<VbaReferenceOleTypeLib> officeReference =
	MakeObject<VbaReferenceOleTypeLib>(u"Office", u"*\\G{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}#2.0#0#C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\MSO.DLL#Microsoft Office 14.0 Object Library");

// إضافة مراجع إلى مشروع VBA
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);

// حفظ العرض التقديمي
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

إزالة ماكرو VBA

باستخدام الخاصية VbaProject ضمن الفئة Presentation، يمكنك إزالة ماكرو VBA.

  1. إنشاء كائن من الفئة Presentation وتحميل العرض التقديمي الذي يحتوي على الماكرو.
  2. الوصول إلى وحدة Macro وإزالتها.
  3. احفظ العرض التقديمي المعدل.

يُظهر لك هذا الكود C++ كيفية إزالة ماكرو VBA:

// مسار دليل المستندات.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";

// يحمل العرض التقديمي الذي يحتوي على الماكرو
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);

// يصل إلى وحدة VBA ويزيلها
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));

// يحفظ العرض التقديمي
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

استخراج ماكرو VBA

  1. إنشاء كائن من الفئة Presentation وتحميل العرض التقديمي الذي يحتوي على الماكرو.
  2. التحقق مما إذا كان العرض التقديمي يحتوي على مشروع VBA.
  3. التجول عبر جميع الوحدات الموجودة في مشروع VBA لعرض الماكرو.

يُظهر لك هذا الكود C++ كيفية استخراج ماكرو VBA من عرض تقديمي يحتوي على ماكرو:

	// مسار دليل المستندات.
	const String templatePath = u"../templates/VBA.pptm";

	// يحمل العرض التقديمي الذي يحتوي على الماكرو
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);


	if (pres->get_VbaProject() != NULL) // يتحقق مما إذا كان العرض التقديمي يحتوي على مشروع VBA
	{
		
		//for (SharedPtr<IVbaModule> module : pres->get_VbaProject()->get_Modules())
		for (int i = 0; i < pres->get_VbaProject()->get_Modules()->get_Count(); i++)
		{
			SharedPtr<IVbaModule> module = pres->get_VbaProject()->get_Modules()->idx_get(i);

			System::Console::WriteLine(module->get_Name());
			System::Console::WriteLine(module->get_SourceCode());
		}
	}

التحقق مما إذا كان مشروع VBA محميًا بكلمة مرور

باستخدام الخاصية IVbaProject::get_IsPasswordProtected، يمكنك تحديد ما إذا كانت خصائص المشروع محمية بكلمة مرور.

  1. إنشاء كائن من الفئة Presentation وتحميل عرض تقديمي يحتوي على ماكرو.
  2. التحقق مما إذا كان العرض التقديمي يحتوي على VBA project.
  3. التحقق مما إذا كان مشروع VBA محميًا بكلمة مرور لعرض خصائصه.
auto presentation = MakeObject<Presentation>(u"VBA.pptm");
    
if (presentation->get_VbaProject() != nullptr) // التحقق مما إذا كان العرض التقديمي يحتوي على مشروع VBA.
{
    if (presentation->get_VbaProject()->get_IsPasswordProtected())
    {
        Console::WriteLine(u"The VBA Project '{0}' is protected by password to view project properties.", presentation->get_VbaProject()->get_Name());
    }
}
    
presentation->Dispose();

FAQ

ماذا يحدث للماكرو إذا حفظت العرض التقديمي كـ PPTX؟ سيتم إزالة الماكرو لأن صيغة PPTX لا تدعم VBA. للحفاظ على الماكرو، اختر PPTM أو PPSM أو POTM.

هل يمكن لـ Aspose.Slides تشغيل الماكرو داخل عرض تقديمي، على سبيل المثال لتحديث البيانات؟ لا. لا تقوم المكتبة بتشغيل كود VBA أبداً؛ التنفيذ ممكن فقط داخل PowerPoint مع إعدادات الأمان المناسبة.

هل يدعم العمل مع عناصر تحكم ActiveX المرتبطة بكود VBA؟ نعم، يمكنك الوصول إلى عناصر تحكم ActiveX controls الموجودة، تعديل خصائصها، وإزالتها. هذا مفيد عندما يتفاعل الماكرو مع ActiveX.