Präsentation über VBA

Der Aspose.Slides.Vba Namensraum enthält Klassen und Schnittstellen für die Arbeit mit Makros und VBA-Code.

VBA-Makros hinzufügen

Aspose.Slides bietet die VbaProject Klasse, die es Ihnen ermöglicht, VBA-Projekte (und Projektverweise) zu erstellen und vorhandene Module zu bearbeiten. Sie können die IVbaProject Schnittstelle verwenden, um VBA, das in einer Präsentation eingebettet ist, zu verwalten.

  1. Erstellen Sie eine Instanz der Presentation Klasse.
  2. Verwenden Sie den VbaProject Konstruktor, um ein neues VBA-Projekt hinzuzufügen.
  3. Fügen Sie ein Modul zum VbaProject hinzu.
  4. Setzen Sie den Quellcode des Moduls.
  5. Fügen Sie Verweise auf hinzu.
  6. Fügen Sie Verweise auf Microsoft Office hinzu.
  7. Verknüpfen Sie die Verweise mit dem VBA-Projekt.
  8. Speichern Sie die Präsentation.

Dieser C++-Code zeigt Ihnen, wie Sie ein VBA-Makro von Grund auf zu einer Präsentation hinzufügen:


// Der Pfad zum Dokumentenverzeichnis.
const String outPath = u"../out/AddVBAMacros_out.pptm";

// Erstellt eine Instanz der Präsentationsklasse
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// Erstellt ein neues VBA-Projekt
presentation->set_VbaProject(MakeObject<VbaProject>());

// Fügt dem VBA-Projekt ein leeres Modul hinzu
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");

// Setzt den Quellcode des Moduls
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");

// Erstellt einen Verweis auf <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");

// Erstellt einen Verweis auf 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 Objektbibliothek");

// Fügt Verweise zum VBA-Projekt hinzu
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);

// Speichert die Präsentation
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

VBA-Makros entfernen

Mit der VbaProject Eigenschaft der Presentation Klasse können Sie ein VBA-Makro entfernen.

  1. Erstellen Sie eine Instanz der Presentation Klasse und laden Sie die Präsentation, die das Makro enthält.
  2. Greifen Sie auf das Makro-Modul zu und entfernen Sie es.
  3. Speichern Sie die modifizierte Präsentation.

Dieser C++-Code zeigt Ihnen, wie Sie ein VBA-Makro entfernen:


// Der Pfad zum Dokumentenverzeichnis.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";

// Lädt die Präsentation, die das Makro enthält
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);

// Greift auf das Vba-Modul zu und entfernt es 
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));

// Speichert die Präsentation
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

VBA-Makros extrahieren

  1. Erstellen Sie eine Instanz der Presentation Klasse und laden Sie die Präsentation, die das Makro enthält.
  2. Überprüfen Sie, ob die Präsentation ein VBA-Projekt enthält.
  3. Durchlaufen Sie alle Module, die im VBA-Projekt enthalten sind, um die Makros anzuzeigen.

Dieser C++-Code zeigt Ihnen, wie Sie VBA-Makros aus einer Präsentation extrahieren, die Makros enthält:


	// Der Pfad zum Dokumentenverzeichnis.
	const String templatePath = u"../templates/VBA.pptm";

	// Lädt die Präsentation, die das Makro enthält
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);


	if (pres->get_VbaProject() != NULL) // Überprüft, ob die Präsentation ein VBA-Projekt enthält
	{
		
		//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());
		}
	}