Zarządzanie projektami VBA w prezentacjach w .NET

Wprowadzenie

Przestrzeń nazw Aspose.Slides.Vba zawiera klasy i interfejsy umożliwiające pracę z makrami i kodem VBA.

Dodaj makra VBA

Aspose.Slides udostępnia klasę VbaProject umożliwiającą tworzenie projektów VBA (i odwołań do projektów) oraz edycję istniejących modułów. Możesz użyć interfejsu IVbaProject do zarządzania VBA osadzonym w prezentacji.

  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ę.

W tym kodzie C# pokazano, jak dodać makro VBA od podstaw do prezentacji:

    // Tworzy instancję klasy prezentacji
using (Presentation presentation = new Presentation())
{
    // Tworzy nowy projekt VBA
    presentation.VbaProject = new VbaProject();

    // Dodaje pusty moduł do projektu VBA
    IVbaModule module = presentation.VbaProject.Modules.AddEmptyModule("Module");
  
    // Ustawia kod źródłowy modułu
    module.SourceCode = @"Sub Test(oShape As Shape) MsgBox ""Test"" End Sub";

    // Tworzy odwołanie do <stdole>
    VbaReferenceOleTypeLib stdoleReference =
        new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");

    // Tworzy odwołanie do Office
    VbaReferenceOleTypeLib officeReference =
        new VbaReferenceOleTypeLib("Office", "*\\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.VbaProject.References.Add(stdoleReference);
    presentation.VbaProject.References.Add(officeReference);

            
    // Zapisuje prezentację
    presentation.Save(dataDir + "AddVBAMacros_out.pptm", SaveFormat.Pptm);
}

Usuń makra VBA

Używając właściwości VbaProject w klasie Presentation, możesz usunąć makro VBA.

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

W tym kodzie C# pokazano, jak usunąć makro VBA:

    // Ładuje prezentację zawierającą makro
using (Presentation presentation = new Presentation(dataDir + "VBA.pptm"))
{
    // Uzyskuje dostęp do modułu Vba i usuwa go 
    presentation.VbaProject.Modules.Remove(presentation.VbaProject.Modules[0]);

    // Zapisuje prezentację
    presentation.Save(dataDir + "RemovedVBAMacros_out.pptm", SaveFormat.Pptm);
}

Wyodrębnij makra VBA

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

W tym kodzie C# pokazano, jak wyodrębnić makra VBA z prezentacji zawierającej makra:

    // Ładuje prezentację zawierającą makro
using (Presentation pres = new Presentation("VBA.pptm"))
{
	if (pres.VbaProject != null) // Sprawdza, czy prezentacja zawiera projekt VBA
	{
		foreach (IVbaModule module in pres.VbaProject.Modules)
		{
			Console.WriteLine(module.Name);
			Console.WriteLine(module.SourceCode);
		}
	}
}

Sprawdź, czy projekt VBA jest chroniony hasłem

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

  1. Utwórz instancję klasy Presentation i wczytaj prezentację, która zawiera 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.
using (Presentation presentation = new Presentation("VBA.pptm"))
{
    if (presentation.VbaProject != null) // Sprawdza, czy prezentacja zawiera projekt VBA.
    {
        if (presentation.VbaProject.IsPasswordProtected)
        {
            Console.WriteLine($"The VBA Project '{presentation.VbaProject.Name}' is protected by password to view project properties.");
        }
    }
}

FAQ

Co się dzieje z makrami, jeśli zapisuję 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, na przykład w celu odświeżenia danych?

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

Czy obsługa kontrolek ActiveX powiązanych z kodem VBA jest wspierana?

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.