Zarządzanie projektami VBA w prezentacjach przy użyciu C++

Wprowadzenie

Przestrzeń nazw Aspose.Slides.Vba zawiera klasy i interfejsy do pracy z makrami i kodem VBA.

Dodawanie makr VBA

Aspose.Slides udostępnia klasę VbaProject, która pozwala tworzyć projekty VBA (i odwołania do projektów) oraz edytować istniejące moduły. Do zarządzania kodem VBA osadzonym w prezentacji możesz użyć interfejsu IVbaProject .

  1. Utwórz instancję klasy Presentation.
  2. Użyj konstruktora VbaProject, aby dodać nowy projekt VBA.
  3. Dodaj moduł do VbaProject.
  4. Ustaw kod źródłowy modułu.
  5. Dodaj odwołania do .
  6. Dodaj odwołania do Microsoft Office.
  7. Powiąż odwołania z projektem VBA.
  8. Zapisz prezentację.

Ten kod C++ pokazuje, jak od podstaw dodać makro VBA do prezentacji:

// Ścieżka do katalogu z dokumentami.
const String outPath = u"../out/AddVBAMacros_out.pptm";

// Tworzy instancję klasy prezentacji
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// Tworzy nowy projekt VBA
presentation->set_VbaProject(MakeObject<VbaProject>());

// Dodaje pusty moduł do projektu VBA
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");

// Ustawia kod źródłowy modułu
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");

// Tworzy odwołanie do <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");

// Tworzy odwołanie do 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");

// Dodaje odwołania do projektu VBA
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);

// Zapisuje prezentację
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

Usuwanie makr VBA

Korzystając z właściwości VbaProject dostępnej w klasie Presentation, możesz usunąć makro VBA.

  1. Utwórz instancję klasy Presentation i załaduj prezentację zawierającą makro.
  2. Uzyskaj dostęp do modułu makra i usuń go.
  3. Zapisz zmodyfikowaną prezentację.

Ten kod C++ pokazuje, jak usunąć makro VBA:

// Ścieżka do katalogu z dokumentami.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";

// Ładuje prezentację zawierającą makro
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);

// Uzyskuje dostęp do modułu Vba i usuwa go 
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));

// Zapisuje prezentację
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

Wyodrębnianie makr VBA

  1. Utwórz instancję klasy Presentation i załaduj prezentację zawierającą makro.
  2. Sprawdź, czy prezentacja zawiera projekt VBA.
  3. Przejdź przez wszystkie moduły znajdujące się w projekcie VBA, aby wyświetlić makra.

Ten kod C++ pokazuje, jak wyodrębnić makra VBA z prezentacji zawierającej makra:


	// Ścieżka do katalogu z dokumentami.
	const String templatePath = u"../templates/VBA.pptm";

	// Ładuje prezentację zawierającą makro
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);


	if (pres->get_VbaProject() != NULL) // Sprawdza, czy prezentacja zawiera projekt 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());
		}
	}

Sprawdzanie, czy projekt VBA jest chroniony hasłem

Używając właściwości IVbaProject::get_IsPasswordProtected, możesz określić, czy właściwości projektu są chronione hasłem.

  1. Utwórz instancję klasy Presentation i załaduj prezentację zawierającą makro.
  2. Sprawdź, czy prezentacja zawiera projekt VBA.
  3. Sprawdź, czy projekt VBA jest chroniony hasłem, aby wyświetlić jego właściwości.
auto presentation = MakeObject<Presentation>(u"VBA.pptm");
    
if (presentation->get_VbaProject() != nullptr) // Sprawdza, czy prezentacja zawiera projekt 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

Co się stanie z makrami, jeśli zapiszę prezentację jako PPTX?

Makra zostaną usunięte, ponieważ format PPTX nie obsługuje VBA. Aby zachować makra, wybierz PPTM, PPSM lub POTM.

Czy Aspose.Slides może uruchamiać makra w prezentacji, np. odświeżać dane?

Nie. Biblioteka nigdy nie wykonuje kodu VBA; wykonywanie jest możliwe jedynie w PowerPoint przy odpowiednich ustawieniach zabezpieczeń.

Czy obsługiwane jest korzystanie z kontrolek ActiveX powiązanych z kodem VBA?

Tak, możesz uzyskać dostęp do istniejących kontrolek ActiveX, modyfikować ich właściwości i usuwać je. Jest to przydatne, gdy makra współdziałają z ActiveX.