Beheer VBA-projecten in presentaties met C++

Introductie

De Aspose.Slides.Vba namespace bevat klassen en interfaces voor het werken met macro’s en VBA‑code.

VBA-macro’s toevoegen

Aspose.Slides biedt de VbaProject klasse om VBA‑projecten (en projectverwijzingen) te maken en bestaande modules te bewerken. U kunt de IVbaProject interface gebruiken om VBA ingesloten in een presentatie te beheren.

  1. Maak een instantie van de Presentation klasse.
  2. Gebruik de VbaProject constructor om een nieuw VBA‑project toe te voegen.
  3. Voeg een module toe aan het VbaProject.
  4. Stel de broncode van de module in.
  5. Voeg verwijzingen toe naar .
  6. Voeg verwijzingen toe naar Microsoft Office.
  7. Koppel de verwijzingen aan het VBA‑project.
  8. Sla de presentatie op.

Deze C++‑code laat zien hoe u een VBA‑macro vanaf nul aan een presentatie toevoegt:

// Het pad naar de documentenmap.
const String outPath = u"../out/AddVBAMacros_out.pptm";

// Maakt een instantie van de presentatieklasse
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// Maakt een nieuw VBA-project
presentation->set_VbaProject(MakeObject<VbaProject>());

// Voegt een lege module toe aan het VBA-project
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");

// Stelt de broncode van de module in
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");

// Maakt een verwijzing naar <stdole> aan
SharedPtr<VbaReferenceOleTypeLib> stdoleReference =
	MakeObject<VbaReferenceOleTypeLib>(u"stdole", u"*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");

// Maakt een verwijzing naar Office aan
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");

// Voegt verwijzingen toe aan het VBA-project
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);

// Slaat de presentatie op
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

VBA-macro’s verwijderen

Via de VbaProject eigenschap onder de Presentation klasse kunt u een VBA‑macro verwijderen.

  1. Maak een instantie van de Presentation klasse en laad de presentatie die de macro bevat.
  2. Open de macro‑module en verwijder deze.
  3. Sla de gewijzigde presentatie op.

Deze C++‑code laat zien hoe u een VBA‑macro verwijdert:

// Het pad naar de documentenmap.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";

// Laadt de presentatie die de macro bevat
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);

// Toegang tot de Vba-module en verwijdert deze 
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));

// Slaat de presentatie op
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

VBA-macro’s extraheren

  1. Maak een instantie van de Presentation klasse en laad de presentatie die de macro bevat.
  2. Controleer of de presentatie een VBA‑project bevat.
  3. Loop door alle modules in het VBA‑project om de macro’s te bekijken.

Deze C++‑code laat zien hoe u VBA‑macro’s uit een presentatie met macro’s kunt extraheren:


	// Het pad naar de documentenmap.
	const String templatePath = u"../templates/VBA.pptm";

	// Laadt de presentatie die de macro bevat
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);


	if (pres->get_VbaProject() != NULL) // Controleert of de presentatie een VBA-project bevat
	{
		
		//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());
		}
	}

Controleren of een VBA‑project met wachtwoord is beveiligd

Met de IVbaProject::get_IsPasswordProtected eigenschap kunt u bepalen of de eigenschappen van een project met een wachtwoord zijn beveiligd.

  1. Maak een instantie van de Presentation klasse en laad een presentatie die een macro bevat.
  2. Controleer of de presentatie een VBA‑project bevat.
  3. Controleer of het VBA‑project met een wachtwoord is beveiligd om de eigenschappen te bekijken.
auto presentation = MakeObject<Presentation>(u"VBA.pptm");
    
if (presentation->get_VbaProject() != nullptr) // Controleer of de presentatie een VBA-project bevat.
{
    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();

Veelgestelde vragen

Wat gebeurt er met macro’s als ik de presentatie opsla als PPTX?

Macro’s worden verwijderd omdat PPTX geen VBA ondersteunt. Om macro’s te behouden, kiest u PPTM, PPSM of POTM.

Kan Aspose.Slides macro’s in een presentatie uitvoeren, bijvoorbeeld om gegevens te vernieuwen?

Nee. De bibliotheek voert nooit VBA‑code uit; uitvoering is alleen mogelijk in PowerPoint met de juiste beveiligingsinstellingen.

Wordt werken met ActiveX‑besturingselementen die gekoppeld zijn aan VBA‑code ondersteund?

Ja, u kunt bestaande ActiveX controls benaderen, hun eigenschappen wijzigen en ze verwijderen. Dit is handig wanneer macro’s communiceren met ActiveX.