Správa projektů VBA v prezentacích v .NET
Úvod
The Aspose.Slides.Vba namespace contains classes and interfaces for working with macros and VBA code.
Note
When you convert a presentation containing macros to a different file format (PDF, HTML, etc.), Aspose.Slides ignores all macros (macros are not carried into the resulting file).
When you add macros to a presentation or resave a presentation containing macros, Aspose.Slides simply writes the bytes for the macros.
Aspose.Slides never runs the macros in a presentation.
Přidání VBA maker
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.
- Create an instance of the Presentation class.
- Use the VbaProject constructor to add a new VBA project.
- Add a module to the VbaProject.
- Set the module source code.
- Add references to
. - Add references to Microsoft Office.
- Associate the references with the VBA project.
- Save the presentation.
This C# code shows you how to add a VBA macro from scratch to a presentation:
// Vytvoří instanci třídy Presentation
using (Presentation presentation = new Presentation())
{
// Vytvoří nový projekt VBA
presentation.VbaProject = new VbaProject();
// Přidá prázdný modul do projektu VBA
IVbaModule module = presentation.VbaProject.Modules.AddEmptyModule("Module");
// Nastaví zdrojový kód modulu
module.SourceCode = @"Sub Test(oShape As Shape) MsgBox ""Test"" End Sub";
// Vytvoří odkaz na <stdole>
VbaReferenceOleTypeLib stdoleReference =
new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
// Vytvoří odkaz na 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");
// Přidá odkazy do projektu VBA
presentation.VbaProject.References.Add(stdoleReference);
presentation.VbaProject.References.Add(officeReference);
// Uloží prezentaci
presentation.Save(dataDir + "AddVBAMacros_out.pptm", SaveFormat.Pptm);
}
Odstranění VBA maker
Using the VbaProject property under the Presentation class, you can remove a VBA macro.
- Create an instance of the Presentation class and load the presentation containing the macro.
- Access the Macro module and remove it.
- Save the modified presentation.
This C# code shows you how to remove a VBA macro:
// Načte prezentaci obsahující makro
using (Presentation presentation = new Presentation(dataDir + "VBA.pptm"))
{
// Přistoupí k modulu VBA a odstraní jej
presentation.VbaProject.Modules.Remove(presentation.VbaProject.Modules[0]);
// Uloží prezentaci
presentation.Save(dataDir + "RemovedVBAMacros_out.pptm", SaveFormat.Pptm);
}
Extrahování VBA maker
- Create an instance of the Presentation class and load the presentation containing the macro.
- Check if the presentation contains a VBA Project.
- 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:
// Načte prezentaci obsahující makro
using (Presentation pres = new Presentation("VBA.pptm"))
{
if (pres.VbaProject != null) // Zkontroluje, zda prezentace obsahuje projekt VBA
{
foreach (IVbaModule module in pres.VbaProject.Modules)
{
Console.WriteLine(module.Name);
Console.WriteLine(module.SourceCode);
}
}
}
Zjištění, zda je VBA projekt chráněn heslem
Using the IVbaProject.IsPasswordProtected property, you can determine whether a project’s properties are password-protected.
- Create an instance of the Presentation class and load a presentation that contains a macro.
- Check whether the presentation contains a VBA project.
- Check whether the VBA project is password-protected to view its properties.
using (Presentation presentation = new Presentation("VBA.pptm"))
{
if (presentation.VbaProject != null) // Zkontrolujte, zda prezentace obsahuje projekt VBA.
{
if (presentation.VbaProject.IsPasswordProtected)
{
Console.WriteLine($"The VBA Project '{presentation.VbaProject.Name}' is protected by password to view project properties.");
}
}
}
FAQ
Co se stane s makry, pokud uložíme prezentaci jako PPTX?
Makra budou odstraněna, protože PPTX nepodporuje VBA. Pro zachování maker vyberte PPTM, PPSM nebo POTM.
Může Aspose.Slides spouštět makra v prezentaci, například pro načtení dat?
Ne. Knihovna nikdy nespouští VBA kód; provádění je možné pouze v PowerPointu s odpovídajícím nastavením zabezpečení.
Je podporována práce s ActiveX ovládacími prvky napojenými na VBA kód?
Ano, můžete přistupovat k existujícím ActiveX controls, měnit jejich vlastnosti a odstraňovat je. To je užitečné, když makra interagují s ActiveX.