Presentación a través de VBA

El espacio de nombres Aspose.Slides.Vba contiene clases e interfaces para trabajar con macros y código VBA.

Añadir Macros VBA

Aspose.Slides proporciona la clase VbaProject para permitirte crear proyectos de VBA (y referencias de proyectos) y editar módulos existentes. Puedes usar la interfaz IVbaProject para gestionar el VBA embebido en una presentación.

  1. Crea una instancia de la clase Presentation.
  2. Usa el constructor de VbaProject para añadir un nuevo proyecto de VBA.
  3. Añade un módulo al VbaProject.
  4. Establece el código fuente del módulo.
  5. Añade referencias a .
  6. Añade referencias a Microsoft Office.
  7. Asocia las referencias con el proyecto de VBA.
  8. Guarda la presentación.

Este código C# te muestra cómo añadir una macro de VBA desde cero a una presentación:

    // Crea una instancia de la clase de presentación
using (Presentation presentation = new Presentation())
{
    // Crea un nuevo proyecto de VBA
    presentation.VbaProject = new VbaProject();

    // Añade un módulo vacío al proyecto de VBA
    IVbaModule module = presentation.VbaProject.Modules.AddEmptyModule("Módulo");
  
    // Establece el código fuente del módulo
    module.SourceCode = @"Sub Test(oShape As Shape) MsgBox ""Test"" End Sub";

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

    // Crea una referencia a 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");

    // Añade referencias al proyecto de VBA
    presentation.VbaProject.References.Add(stdoleReference);
    presentation.VbaProject.References.Add(officeReference);

            
    // Guarda la presentación
    presentation.Save(dataDir + "AddVBAMacros_out.pptm", SaveFormat.Pptm);
}

Eliminar Macros VBA

Usando la propiedad VbaProject bajo la clase Presentation, puedes eliminar una macro de VBA.

  1. Crea una instancia de la Presentation y carga la presentación que contiene la macro.
  2. Accede al módulo de la macro y elimínalo.
  3. Guarda la presentación modificada.

Este código C# te muestra cómo eliminar una macro de VBA:

    // Carga la presentación que contiene la macro
using (Presentation presentation = new Presentation(dataDir + "VBA.pptm"))
{
    // Accede al módulo de Vba y lo elimina 
    presentation.VbaProject.Modules.Remove(presentation.VbaProject.Modules[0]);

    // Guarda la presentación
    presentation.Save(dataDir + "RemovedVBAMacros_out.pptm", SaveFormat.Pptm);
}

Extraer Macros VBA

  1. Crea una instancia de la Presentation y carga la presentación que contiene la macro.
  2. Verifica si la presentación contiene un proyecto de VBA.
  3. Recorre todos los módulos contenidos en el proyecto de VBA para ver las macros.

Este código C# te muestra cómo extraer macros VBA de una presentación que contiene macros:

    // Carga la presentación que contiene la macro
using (Presentation pres = new Presentation("VBA.pptm"))
{
	if (pres.VbaProject != null) // Verifica si la presentación contiene un proyecto de VBA
	{
		foreach (IVbaModule module in pres.VbaProject.Modules)
		{
			Console.WriteLine(module.Name);
			Console.WriteLine(module.SourceCode);
		}
	}
}

Verificar si un Proyecto de VBA está Protegido con Contraseña

Usando la propiedad IVbaProject.IsPasswordProtected, puedes verificar si las propiedades del proyecto están protegidas por contraseña.

  1. Crea una instancia de la Presentation y carga la presentación que contiene la macro.
  2. Verifica si la presentación contiene un Proyecto de VBA.
  3. Verifica si el Proyecto de VBA está protegido con una contraseña para ver las propiedades del proyecto.

Este código C# demuestra la operación:

using (Presentation pres = new Presentation("VBA.pptm"))
{
    if (pres.VbaProject == null) // Verifica si la presentación contiene un proyecto de VBA
        return;

    if (pres.VbaProject.IsPasswordProtected)
    {
        Console.WriteLine("El Proyecto de VBA '" + pres.VbaProject.Name +
                            "' está protegido por contraseña para ver las propiedades del proyecto.");
    }
}