Presentation via VBA

The Aspose.Slides.Vba namespace contains classes and interfaces for working with macros and VBA code.

Add VBA Macros

Aspose.Slides provides the VbaProject class to allow you to create VBA projects (and project references) and edit existing modules. You can use the IVbaProject interface to manage VBA embedded in a presentation.

  1. Create an instance of the Presentation class.
  2. Use the VbaProject constructor to add a new VBA project.
  3. Add a module to the VbaProject.
  4. Set the module source code.
  5. Add references to .
  6. Add references to Microsoft Office.
  7. Associate the references with the VBA project.
  8. Save the presentation.

This C# code shows you how to add a VBA macro from scratch to a presentation:

    // Creates an instance of the presentation class
using (Presentation presentation = new Presentation())
{
    // Creates a new VBA Project
    presentation.VbaProject = new VbaProject();

    // Adds an empty module to the VBA project
    IVbaModule module = presentation.VbaProject.Modules.AddEmptyModule("Module");
  
    // Sets the module source code
    module.SourceCode = @"Sub Test(oShape As Shape) MsgBox ""Test"" End Sub";

    // Creates a reference to <stdole>
    VbaReferenceOleTypeLib stdoleReference =
        new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");

    // Creates a reference to 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");

    // Adds references to the VBA project
    presentation.VbaProject.References.Add(stdoleReference);
    presentation.VbaProject.References.Add(officeReference);

            
    // Saves the Presentation
    presentation.Save(dataDir + "AddVBAMacros_out.pptm", SaveFormat.Pptm);
}

Remove VBA Macros

Using the VbaProject property under the Presentation class, you can remove a VBA macro.

  1. Create an instance of the Presentation class and load the presentation containing the macro.
  2. Access the Macro module and remove it.
  3. Save the modified presentation.

This C# code shows you how to remove a VBA macro:

    // Loads the presentation containing the macro
using (Presentation presentation = new Presentation(dataDir + "VBA.pptm"))
{
    // Accesses the Vba module and removes it 
    presentation.VbaProject.Modules.Remove(presentation.VbaProject.Modules[0]);

    // Saves the Presentation
    presentation.Save(dataDir + "RemovedVBAMacros_out.pptm", SaveFormat.Pptm);
}

Extract VBA Macros

  1. Create an instance of the Presentation class and load the presentation containing the macro.
  2. Check if the presentation contains a VBA Project.
  3. Loop through all the modules contained in the VBA Project to view the macros.

This C# code shows you how to extract VBA macros from a presentation containing macros:

    // Loads the presentation containing the macro
using (Presentation pres = new Presentation("VBA.pptm"))
{
	if (pres.VbaProject != null) // Checks whether the Presentation contains a VBA Project
	{
		foreach (IVbaModule module in pres.VbaProject.Modules)
		{
			Console.WriteLine(module.Name);
			Console.WriteLine(module.SourceCode);
		}
	}
}

Checking whether a VBA Project is Password Protected

Using the IVbaProject.IsPasswordProtected property, you can check whether the project properties are password protected.

  1. Create an instance of the Presentation class and load the presentation containing the macro.
  2. Check if the presentation contains a VBA Project.
  3. Check if the VBA Project is protected by a password to view project properties.

This C# code demonstrates the operation:

using (Presentation pres = new Presentation("VBA.pptm"))
{
    if (pres.VbaProject == null) // Checks whether the Presentation contains a VBA Project
        return;

    if (pres.VbaProject.IsPasswordProtected)
    {
        Console.WriteLine("The VBA Project '" + pres.VbaProject.Name +
                            "' is protected by password to view project properties.");
    }
}