Hantera VBA‑projekt i presentationer med C++

Introduktion

Namnutrymmet Aspose.Slides.Vba innehåller klasser och gränssnitt för att arbeta med makron och VBA‑kod.

Lägg till VBA‑makron

Aspose.Slides tillhandahåller klassen VbaProject så att du kan skapa VBA‑projekt (och projektreferenser) och redigera befintliga moduler. Du kan använda gränssnittet IVbaProject för att hantera VBA som är inbäddad i en presentation.

  1. Skapa en instans av klassen Presentation.
  2. Använd konstruktorn för VbaProject för att lägga till ett nytt VBA‑projekt.
  3. Lägg till en modul i VbaProject.
  4. Ange modulens källkod.
  5. Lägg till referenser till .
  6. Lägg till referenser till Microsoft Office.
  7. Koppla referenserna till VBA‑projektet.
  8. Spara presentationen.

Den här C++‑koden visar hur du lägger till ett VBA‑makro från början i en presentation:

// Sökvägen till dokumentkatalogen.
const String outPath = u"../out/AddVBAMacros_out.pptm";

// Skapar en instans av presentationsklassen
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// Skapar ett nytt VBA‑projekt
presentation->set_VbaProject(MakeObject<VbaProject>());

// Lägger till en tom modul i VBA‑projektet
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");

// Anger modulens källkod
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");

// Skapar en referens till <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");

// Skapar en referens till 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");

// Lägger till referenser i VBA‑projektet
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);

// Sparar presentationen
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

Ta bort VBA‑makron

Genom att använda egenskapen VbaProject i klassen Presentation kan du ta bort ett VBA‑makro.

  1. Skapa en instans av klassen Presentation och läs in presentationen som innehåller makrot.
  2. Öppna makro‑modulen och ta bort den.
  3. Spara den modifierade presentationen.

Den här C++‑koden visar hur du tar bort ett VBA‑makro:

// Sökvägen till dokumentkatalogen.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";

// Laddar presentationen som innehåller makrot
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);

// Kommer åt Vba-modulen och tar bort den 
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));

// Sparar presentationen
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

Extrahera VBA‑makron

  1. Skapa en instans av klassen Presentation och läs in presentationen som innehåller makrot.
  2. Kontrollera om presentationen innehåller ett VBA‑projekt.
  3. Loopa igenom alla moduler som finns i VBA‑projektet för att visa makron.

Den här C++‑koden visar hur du extraherar VBA‑makron från en presentation som innehåller makron:


	// Sökvägen till dokumentkatalogen.
	const String templatePath = u"../templates/VBA.pptm";

	// Laddar presentationen som innehåller makrot
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);


	if (pres->get_VbaProject() != NULL) // Kontrollerar om presentationen innehåller ett VBA‑projekt
	{
		
		//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());
		}
	}

Kontrollera om ett VBA‑projekt är lösenordsskyddat

Genom att använda egenskapen IVbaProject::get_IsPasswordProtected kan du avgöra om ett projekts egenskaper är lösenordsskyddade.

  1. Skapa en instans av klassen Presentation och läs in en presentation som innehåller ett makro.
  2. Kontrollera om presentationen innehåller ett VBA‑projekt.
  3. Kontrollera om VBA‑projektet är lösenordsskyddat för att visa dess egenskaper.
auto presentation = MakeObject<Presentation>(u"VBA.pptm");
    
if (presentation->get_VbaProject() != nullptr) // Kontrollera om presentationen innehåller ett VBA‑projekt.
{
    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

Vad händer med makron om jag sparar presentationen som PPTX?

Makron kommer att tas bort eftersom PPTX inte stödjer VBA. För att behålla makron, välj PPTM, PPSM eller POTM.

Kan Aspose.Slides köra makron i en presentation för att till exempel uppdatera data?

Nej. Biblioteket kör aldrig VBA‑kod; körning är endast möjlig i PowerPoint med rätt säkerhetsinställningar.

Stöds arbete med ActiveX‑kontroller kopplade till VBA‑kod?

Ja, du kan komma åt befintliga ActiveX‑kontroller, ändra deras egenskaper och ta bort dem. Detta är användbart när makron interagerar med ActiveX.