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.

Agregar Macros VBA

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

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

Este código C++ te muestra cómo agregar una macro VBA desde cero a una presentación:


// La ruta al directorio de documentos.
const String outPath = u"../out/AddVBAMacros_out.pptm";

// Crea una instancia de la clase de presentación
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// Crea un nuevo Proyecto VBA
presentation->set_VbaProject(MakeObject<VbaProject>());

// Agrega un módulo vacío al proyecto VBA
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");

// Establece el código fuente del módulo
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");

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

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

// Agrega referencias al proyecto VBA
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);

// Guarda la Presentación
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

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 Macro y elimínalo.
  3. Guarda la presentación modificada.

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


// La ruta al directorio de documentos.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";

// Carga la presentación que contiene la macro
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);

// Accede al módulo Vba y elimínalo 
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));

// Guarda la Presentación
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

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 C++ te muestra cómo extraer macros VBA de una presentación que contiene macros:


	// La ruta al directorio de documentos.
	const String templatePath = u"../templates/VBA.pptm";

	// Carga la presentación que contiene la macro
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);


	if (pres->get_VbaProject() != NULL) // Verifica si la Presentación contiene un Proyecto 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());
		}
	}