Projets VBA
Projets VBA
Ce guide montre comment inspecter et modifier le projet VBA intégré dans un document macro-activé avec Aspose.Words FOSS pour .NET. Aspose.Words FOSS pour .NET peut inspecter et modifier le projet VBA intégré dans un document macro-activé (.docm) — ses modules, son code source et ses références de bibliothèque — via Document.VbaProject et le modèle d’objet VbaProject/VbaModule. Il s’agit d’inspection et de modification de projet, pas d’exécution de macro: Aspose.Words n’a jamais inclus d’environnement d’exécution VBA, ni dans le produit commercial ni dans cette édition FOSS, de sorte que le code VBA est lu et modifié comme des données, et non exécuté.
Accéder au projet VBA d’un document
Document.VbaProject renvoie un VbaProject, ou null si le document n’a pas de projet VBA. Document.HasMacros indique si un projet VBA est présent sans que vous ayez à accéder à VbaProject d’abord. VbaProject.Name, CodePage, IsSigned et IsProtected décrivent le projet lui–même.
Lire et modifier les modules
VbaProject.Modules renvoie un VbaModuleCollection. Indexez-le par nom pour rechercher un module spécifique (p.ex. modules["ModuleName"]), ou parcourez toute la collection. Chaque VbaModule expose son Name, son Type (un VbaModuleType: DocumentModule, ProceduralModule, ClassModule ou DesignerModule), et — de façon cruciale — son SourceCode en tant que propriété chaîne modifiable, de sorte que le code source du module puisse être lu et réécrit programmatiquement. VbaModuleCollection.Add(vbaModule) et Remove(module) ajoutent ou suppriment des modules du projet.
Références de bibliothèque
VbaProject.References renvoie un VbaReferenceCollection de VbaReference objets — les bibliothèques de types Automation et autres projets VBA dont le code macro dépend. VbaReference.Type signale un VbaReferenceType (Registered, Project, Original ou Control), et LibId identifie la bibliothèque référencée. VbaReferenceCollection.Remove(item) / RemoveAt(index) suppriment les références.
Suppression d’un projet VBA
Document.RemoveMacros() supprime complètement le projet VBA d’un document — utile pour créer une copie sans macro d’un document qui était initialement fourni avec des macros.
Conseils et meilleures pratiques
- Vérifiez
Document.HasMacrosavant de toucher àDocument.VbaProjectafin d’éviter la gestion des valeurs nulles pour les documents qui n’ont jamais eu de macros. - Considérez
VbaModule.SourceCodecomme du texte brut — comme il n’y a pas d’environnement d’exécution VBA, le modifier ne valide pas le code ; le VBA mal formé sera toujours transmis, mais ne s’exécutera pas correctement dans Word tant qu’il ne sera pas corrigé. - Utilisez
VbaProject.IsSigned/IsProtectedpour détecter les projets signés ou protégés avant de tenter de modifier leurs modules. Document.RemoveMacros()est la façon la plus simple de supprimer les macros pour une copie de distribution « clean », plutôt que de nettoyer manuellement chaque module.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
Document.VbaProject est null | Le document n’a pas de projet VBA | Vérifiez d’abord Document.HasMacros avant d’accéder aux membres de VbaProject |
On s’attend à ce que les macros s’exécutent après la modification de SourceCode | Aspose.Words n’a pas de moteur d’exécution VBA | Utilisez ce API pour lire/modifier uniquement le code source et la structure des macros ; exécutez le document résultant dans un environnement disposant d’un runtime VBA, tel que Microsoft Word, pour exécuter le code |
L’indexation de VbaModuleCollection par son nom ne renvoie rien | Nom du module ne correspond pas (casse ou orthographe exacte) | Énumérez VbaProject.Modules pour confirmer le nom exact du module |
FAQ
Le Aspose.Words FOSS pour .NET peut-il exécuter des macros VBA dans un document?
Non. Ni cette édition ni le produit commercial Aspose.Words n’incluent un moteur d’exécution VBA — les projets VBA sont lus et modifiés en tant que données (source du module, références, métadonnées du projet), jamais exécutés.
Comment lire le code source d’une macro?
Obtenez le module en indexant VbaProject.Modules par son nom (par ex. modules["ModuleName"]), puis lisez sa propriété SourceCode.
Puis-je ajouter un tout nouveau module VBA à un document?
Oui — créez un VbaModule et ajoutez-le aux VbaModuleCollection du projet via Add(vbaModule).
Comment vérifier si un document possède même des macros avant de le traiter ?
Lisez Document.HasMacros ; c’est true si le document contient un projet VBA, sans que vous ayez à accéder à Document.VbaProject d’abord.
Comment supprimer toutes les macros d’un document ?
Appelez Document.RemoveMacros().
API Reference Résumé
| Classe / Méthode | Description |
|---|---|
Document.VbaProject | Le VbaProject du document, ou null s’il ne contient aucune macro |
Document.HasMacros | Présence d’un projet VBA |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | Un module : Name, Type (VbaModuleType), modifiable SourceCode |
VbaModuleCollection | Add(), indexeur par nom, Remove(), Count |
VbaReference / VbaReferenceCollection | Bibliothèques de types référencées : Type (VbaReferenceType), LibId |
Document.RemoveMacros() | Supprime le projet VBA du document |