Presentación mediante VBA

Agregar macros VBA

Aspose.Slides proporciona la clase VbaProject para permitirte crear proyectos VBA (y referencias de proyecto) y editar módulos existentes. Puedes usar la clase VbaProject para administrar VBA incrustado en una presentación.

  1. Crea una instancia de la clase Presentation.
  2. Usa el constructor VbaProject para añadir un nuevo proyecto 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 VBA.
  8. Guarda la presentación.

Este código JavaScript muestra cómo añadir una macro VBA desde cero a una presentación:

// Crea una instancia de la clase Presentation
let pres = new aspose.slides.Presentation();
try {
    // Crea un nuevo proyecto VBA
    pres.setVbaProject(new aspose.slides.VbaProject());
    // Añade un módulo vacío al proyecto VBA
    let module = pres.getVbaProject().getModules().addEmptyModule("Module");
    // Establece el código fuente del módulo
    module.setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
    // Crea una referencia a <stdole>
    let stdoleReference = new aspose.slides.VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
    // Crea una referencia a Office
    let officeReference = new aspose.slides.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 VBA
    pres.getVbaProject().getReferences().add(stdoleReference);
    pres.getVbaProject().getReferences().add(officeReference);
    // Guarda la presentación
    pres.save("test.pptm", aspose.slides.SaveFormat.Pptm);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Eliminar macros VBA

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

  1. Crea una instancia de la clase 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 JavaScript muestra cómo eliminar una macro VBA:

// Carga la presentación que contiene la macro
let pres = new aspose.slides.Presentation("VBA.pptm");
try {
    // Accede al módulo Vba y lo elimina
    pres.getVbaProject().getModules().remove(pres.getVbaProject().getModules().get_Item(0));
    // Guarda la presentación
    pres.save("test.pptm", aspose.slides.SaveFormat.Pptm);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Extraer macros VBA

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

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

// Carga la presentación que contiene la macro
let pres = new aspose.slides.Presentation("VBA.pptm");
try {
    // Comprueba si la presentación contiene un proyecto VBA
    if (pres.getVbaProject() != null) {
        for (let i = 0; i < pres.getVbaProject().getModules().size(); i++) {
            let module = pres.getVbaProject().getModules().get_Item(i);
            console.log(module.getName());
            console.log(module.getSourceCode());
        }
    }
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Comprobar si un proyecto VBA está protegido con contraseña

Usando el método VbaProject.isPasswordProtected, puedes determinar si las propiedades de un proyecto están protegidas con contraseña.

  1. Crea una instancia de la clase Presentation y carga una presentación que contiene una macro.
  2. Verifica si la presentación contiene un VBA project.
  3. Comprueba si el proyecto VBA está protegido con contraseña para ver sus propiedades.
let presentation = new aspose.slides.Presentation("VBA.pptm");
try {
    if (presentation.getVbaProject() != null) { // Comprueba si la presentación contiene un proyecto VBA.
        if (presentation.getVbaProject().isPasswordProtected()) {
            console.log("The VBA Project '%s' is protected by password to view project properties.", 
                    presentation.getVbaProject().getName());
        }
    }
} finally {
    presentation.dispose();
}

FAQ

¿Qué pasa con las macros si guardo la presentación como PPTX?

Las macros se eliminarán porque PPTX no admite VBA. Para mantener las macros, elige PPTM, PPSM o POTM.

¿Puede Aspose.Slides ejecutar macros dentro de una presentación, por ejemplo, para actualizar datos?

No. La biblioteca nunca ejecuta código VBA; la ejecución solo es posible dentro de PowerPoint con la configuración de seguridad adecuada.

¿Se admite trabajar con controles ActiveX vinculados a código VBA?

Sí, puedes acceder a los ActiveX controls, modificar sus propiedades y eliminarlos. Esto es útil cuando las macros interactúan con ActiveX.