VBA-projecten
VBA-projecten
Deze gids laat zien hoe je het VBA-project dat in een macro-ingeschakeld document is ingebed, kunt inspecteren en aanpassen met Aspose.Words FOSS voor .NET. Aspose.Words FOSS voor .NET kan dat project — de modules, broncode en bibliotheekreferenties — via Document.VbaProject en het VbaProject/VbaModule objectmodel bewerken. Dit betreft projectinspectie en -bewerking, niet macro-uitvoering: Aspose.Words heeft nooit een VBA-runtime meegeleverd, noch in het commerciële product noch in deze FOSS-editie, dus VBA-code wordt gelezen en aangepast als data, niet uitgevoerd.
Toegang krijgen tot het VBA-project van een document
Document.VbaProject retourneert een VbaProject, of null als het document geen VBA-project bevat. Document.HasMacros meldt of een VBA-project aanwezig is zonder dat je eerst VbaProject hoeft te benaderen. VbaProject.Name, CodePage, IsSigned en IsProtected beschrijven het project zelf.
Modules lezen en bewerken
VbaProject.Modules retourneert een VbaModuleCollection. Indexeer ernaar op naam om een specifieke module op te zoeken (bijv. modules["ModuleName"]), of doorloop de volledige collectie. Elke VbaModule geeft haar Name, Type (een VbaModuleType: DocumentModule, ProceduralModule, ClassModule of DesignerModule) en — cruciaal — haar SourceCode als een schrijfbare string-eigenschap weer, zodat de bron van de module programmatisch kan worden gelezen en herschreven. VbaModuleCollection.Add(vbaModule) en Remove(module) voegen modules toe aan of verwijderen ze uit het project.
Bibliotheekreferenties
VbaProject.References retourneert een VbaReferenceCollection van VbaReference objecten — de Automation-typebibliotheken en andere VBA-projecten waarvan de macrocode afhankelijk is. VbaReference.Type geeft een VbaReferenceType (Registered, Project, Original of Control) weer, en LibId identificeert de betreffende bibliotheek. VbaReferenceCollection.Remove(item) / RemoveAt(index) verwijderen referenties.
Een VBA-project verwijderen
Document.RemoveMacros() verwijdert het VBA-project volledig uit een document — handig om een macro-vrije kopie van een document te maken dat oorspronkelijk met macro’s werd geleverd.
Tips en best practices
- Controleer
Document.HasMacrosvoordat uDocument.VbaProjectaanraakt om null-afhandeling te vermijden voor documenten die nooit macro’s hadden. - Behandel
VbaModule.SourceCodeals platte tekst — omdat er geen VBA-runtime is, valideert bewerken de code niet; misvormde VBA blijft wel door de keten gaan, maar zal niet correct uitvoeren in Word totdat deze is gecorrigeerd. - Gebruik
VbaProject.IsSigned/IsProtectedom ondertekende of beveiligde projecten te detecteren voordat u probeert hun modules te wijzigen. Document.RemoveMacros()is de eenvoudigste manier om macro’s te verwijderen voor een “schone” distributiekopie, in plaats van handmatig elke module te wissen.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
Document.VbaProject is null | Het document bevat geen VBA-project | Controleer eerst Document.HasMacros voordat u de leden van VbaProject benadert |
Verwacht dat macro’s worden uitgevoerd na het bewerken van SourceCode | Aspose.Words heeft geen VBA-uitvoeringsengine | Gebruik deze API om alleen de macro-bron en -structuur te lezen/wijzigen; voer het resulterende document uit in een omgeving met een VBA-runtime, zoals Microsoft Word, om de code uit te voeren |
Indexeren van VbaModuleCollection op naam levert niets op | Module-naam komt niet overeen (hoofdlettergebruik of exacte spelling) | Enumereer VbaProject.Modules om de exacte modulenaam te bevestigen |
FAQ
Kan Aspose.Words FOSS voor .NET VBA-macro’s uitvoeren in een document?
Nee. Noch deze editie, noch het commerciële Aspose.Words-product bevat een VBA-uitvoeringsengine — VBA-projecten worden gelezen en aangepast als gegevens (module-bron, referenties, project-metadata), nooit uitgevoerd.
Hoe lees ik de broncode van een macro?
Haal de module op door VbaProject.Modules te indexeren op naam (bijv. modules["ModuleName"]), en lees vervolgens de eigenschap SourceCode.
Kan ik een gloednieuwe VBA-module aan een document toevoegen?
Ja — maak een VbaModule aan en voeg deze toe aan de VbaModuleCollection van het project via Add(vbaModule).
Hoe controleer ik of een document macro’s bevat voordat ik het verwerk?
Lees Document.HasMacros; het is true als het document een VBA-project bevat, zonder dat je eerst Document.VbaProject hoeft te benaderen.
Hoe verwijder ik alle macro’s uit een document?
Roep Document.RemoveMacros() aan.
API Reference Samenvatting
| Klasse / Methode | Beschrijving |
|---|---|
Document.VbaProject | De VbaProject van het document, of null als het geen macro’s bevat |
Document.HasMacros | Of er een VBA-project aanwezig is |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | Eén module: Name, Type (VbaModuleType), schrijfbaar SourceCode |
VbaModuleCollection | Add(), indexering op naam, Remove(), Count |
VbaReference / VbaReferenceCollection | Gerefereerde typebibliotheken: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | Verwijdert de VBA-code uit het document |