प्रस्तुतीकरण में VBA प्रोजेक्ट्स को C++ के माध्यम से प्रबंधित करें

परिचय

Aspose.Slides.Vba नामस्थान में मैक्रो और VBA कोड के साथ काम करने के लिए क्लासेज़ और इंटरफेसेज़ होते हैं।

VBA मैक्रो जोड़ें

Aspose.Slides VbaProject क्लास प्रदान करता है जिससे आप VBA प्रोजेक्ट्स (और प्रोजेक्ट रेफ़रेंस) बना सकते हैं और मौजूदा मॉड्यूल्स को संपादित कर सकते हैं। आप प्रस्तुति में एम्बेडेड VBA को प्रबंधित करने के लिए IVbaProject इंटरफ़ेस का उपयोग कर सकते हैं।

  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 मैक्रो हटाएँ

Presentation क्लास के तहत VbaProject प्रॉपर्टी का उपयोग करके आप VBA मैक्रो हटा सकते हैं।

  1. Presentation क्लास का एक इंस्टेंस बनाएं और मैक्रो वाले प्रेजेंटेशन को लोड करें।
  2. Macro मॉड्यूल तक पहुंचें और उसे हटाएं।
  3. संशोधित प्रेजेंटेशन को सेव करें।
// दस्तावेज़ डायरेक्टरी का पथ।
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 में उपयुक्त सुरक्षा सेटिंग के साथ ही संभव है।

क्या VBA कोड से जुड़े ActiveX कंट्रोल्स के साथ काम करना समर्थित है?
हाँ, आप मौजूदा ActiveX controls तक पहुँच सकते हैं, उनकी प्रॉपर्टीज़ बदल सकते हैं, और उन्हें हटा सकते हैं। यह तब उपयोगी है जब मैक्रो ActiveX के साथ इंटरैक्ट करते हैं।