Beheer VBA-projecten in presentaties met Python
Inleiding
Aspose.Slides biedt klassen en interfaces voor het werken met macro’s en VBA‑code.
Waarschuwing
Wanneer u een presentatie met macro’s converteert naar een ander bestandsformaat (PDF, HTML, enz.), negeert Aspose.Slides alle macro’s (macro’s worden niet meegenomen in het resulterende bestand).
Wanneer u macro’s toevoegt aan een presentatie of een presentatie met macro’s opnieuw opslaat, schrijft Aspose.Slides simpelweg de bytes voor de macro’s.
Aspose.Slides draait nooit de macro’s in een presentatie.
VBA‑macro’s toevoegen
Aspose.Slides levert de VbaProject‑klasse waarmee u VBA‑projecten (en projectreferenties) kunt maken en bestaande modules kunt bewerken. U kunt de VbaProject‑klasse gebruiken om VBA in een presentatie te beheren.
- Maak een instantie van de Presentation‑klasse.
- Gebruik de VbaProject‑constructor om een nieuw VBA‑project toe te voegen.
- Voeg een module toe aan het VBA‑project.
- Stel de broncode van de module in.
- Voeg referenties toe aan
stdole. - Voeg referenties toe aan Microsoft Office.
- Koppel de referenties aan het VBA‑project.
- Sla de presentatie op.
Deze Python‑code laat zien hoe u vanaf nul een VBA‑macro aan een presentatie toevoegt:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, VbaProject, VbaReferenceOleTypeLib
presentation = Presentation()
try:
# Maak een nieuw VBA-project.
vba_project = VbaProject()
presentation.setVbaProject(vba_project)
# Voeg een lege module toe en stel de broncode in.
module = vba_project.getModules().addEmptyModule("Module")
module.setSourceCode('Sub Test(oShape As Shape)\n MsgBox "Test"\nEnd Sub')
# Maak referenties aan naar stdole en Microsoft Office.
stdole_reference = VbaReferenceOleTypeLib("stdole", r"*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\Windows\system32\stdole2.tlb#OLE Automation")
office_reference = VbaReferenceOleTypeLib("Office", r"*\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")
# Voeg referenties toe aan het VBA-project.
vba_project.getReferences().add(stdole_reference)
vba_project.getReferences().add(office_reference)
# Sla de presentatie op.
presentation.save("test.pptm", SaveFormat.Pptm)
finally:
presentation.dispose()
Opmerking
U kunt ook eens kijken naar Aspose Macro Remover, een gratis webapplicatie om macro’s uit PowerPoint‑, Excel‑ en Word‑documenten te verwijderen.VBA‑macro’s verwijderen
Met de getVbaProject‑methode van de Presentation‑klasse kunt u een VBA‑macro verwijderen.
- Maak een instantie van de Presentation‑klasse en laad de presentatie die de macro bevat.
- Open de macro‑module en verwijder deze.
- Sla de aangepaste presentatie op.
Deze Python‑code laat zien hoe u een VBA‑macro verwijdert:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
# Laad de presentatie met de macro.
presentation = Presentation("VBA.pptm")
try:
# Open de VBA-module en verwijder deze.
vba_project = presentation.getVbaProject()
if vba_project is not None and len(list(vba_project.getModules())) > 0:
module = vba_project.getModules().get_Item(0)
vba_project.getModules().remove(module)
# Sla de presentatie op.
presentation.save("test.pptm", SaveFormat.Pptm)
finally:
presentation.dispose()
VBA‑macro’s extraheren
- Maak een instantie van de Presentation‑klasse en laad de presentatie die de macro bevat.
- Controleer of de presentatie een VBA‑project bevat.
- Loop door alle modules in het VBA‑project om de macro’s te bekijken.
Deze Python‑code laat zien hoe u VBA‑macro’s uit een presentatie met macro’s kunt extraheren:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
# Laad de presentatie met de macro.
presentation = Presentation("VBA.pptm")
try:
# Controleer of de presentatie een VBA‑project bevat.
vba_project = presentation.getVbaProject()
if vba_project is not None:
for module in vba_project.getModules():
print(module.getName())
print(module.getSourceCode())
finally:
presentation.dispose()
Controleren of een VBA‑project is beveiligd met een wachtwoord
Met de VbaProject.isPasswordProtected‑methode kunt u bepalen of de eigenschappen van een project met een wachtwoord zijn beveiligd.
- Maak een instantie van de Presentation‑klasse en laad een presentatie die een macro bevat.
- Controleer of de presentatie een VBA‑project bevat.
- Controleer of het VBA‑project met een wachtwoord is beveiligd om de eigenschappen te bekijken.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("VBA.pptm")
try:
# Controleer of de presentatie een VBA-project bevat.
vba_project = presentation.getVbaProject()
if vba_project is not None:
if vba_project.isPasswordProtected():
print(f"The VBA project '{vba_project.getName()}' is password-protected for viewing its properties.")
finally:
presentation.dispose()
FAQ
Wat gebeurt er met macro’s als ik de presentatie opsla als PPTX?
Macro’s worden verwijderd omdat PPTX geen VBA ondersteunt. Om macro’s te behouden, kiest u PPTM, PPSM of POTM.
Kan Aspose.Slides macro’s in een presentatie uitvoeren, bijvoorbeeld om gegevens te vernieuwen?
Nee. De bibliotheek voert nooit VBA‑code uit; uitvoering is alleen mogelijk binnen PowerPoint met de juiste beveiligingsinstellingen.
Wordt er gewerkt met ActiveX‑besturingselementen gekoppeld aan VBA‑code?
Ja, u kunt bestaande ActiveX‑besturingselementen benaderen, hun eigenschappen wijzigen en ze verwijderen. Dit is handig wanneer macro’s communiceren met ActiveX.