Proyectos VBA
Proyectos VBA
Esta guía muestra cómo inspeccionar y modificar el proyecto VBA incrustado en un documento con macros habilitadas con Aspose.Words FOSS para .NET. Aspose.Words FOSS para .NET puede inspeccionar y modificar el proyecto VBA incrustado en un documento con macros habilitadas (.docm) — sus módulos, código fuente y referencias de biblioteca — a través de Document.VbaProject y el modelo de objetos VbaProject/VbaModule. Esto es inspección y edición de proyectos, no ejecución de macros: Aspose.Words nunca ha incluido un tiempo de ejecución VBA, ni en el producto comercial ni en esta edición FOSS, por lo que el código VBA se lee y modifica como datos, no se ejecuta.
Accediendo al proyecto VBA de un documento
Document.VbaProject devuelve un VbaProject, o null si el documento no tiene proyecto VBA. Document.HasMacros informa si hay un proyecto VBA presente sin que tengas que acceder a VbaProject primero. VbaProject.Name, CodePage, IsSigned y IsProtected describen el propio proyecto.
Lectura y edición de módulos
VbaProject.Modules devuelve un VbaModuleCollection. Indexa en él por nombre para buscar un módulo específico (p. ej., modules["ModuleName"]), o enumerar toda la colección. Cada VbaModule expone su Name, Type (un VbaModuleType: DocumentModule, ProceduralModule, ClassModule o DesignerModule), y — de manera crucial — su SourceCode como una propiedad de cadena escribible, de modo que el código fuente del módulo pueda leerse y reescribirse programáticamente. VbaModuleCollection.Add(vbaModule) y Remove(module) añaden o eliminan módulos del proyecto.
Referencias de biblioteca
VbaProject.References devuelve un VbaReferenceCollection de objetos VbaReference — las bibliotecas de tipos Automation y otros proyectos VBA de los que depende el código de macros. VbaReference.Type informa un VbaReferenceType (Registered, Project, Original o Control), y LibId identifica la biblioteca referenciada. VbaReferenceCollection.Remove(item) / RemoveAt(index) eliminan referencias.
Eliminar un proyecto VBA
Document.RemoveMacros() elimina el proyecto VBA de un documento por completo — útil para crear una copia sin macros de un documento que originalmente se entregó con macros.
Consejos y mejores prácticas
- Verifique
Document.HasMacrosantes de tocarDocument.VbaProjectpara evitar el manejo de nulos en documentos que nunca tuvieron macros. - Trate
VbaModule.SourceCodecomo texto plano — dado que no hay tiempo de ejecución VBA, editarlo no valida el código; el VBA malformado seguirá pasando de ida y vuelta, pero no se ejecutará correctamente en Word hasta que se corrija. - Utilice
VbaProject.IsSigned/IsProtectedpara detectar proyectos firmados o protegidos antes de intentar modificar sus módulos. Document.RemoveMacros()es la forma más sencilla de eliminar macros para una copia de distribución “limpia”, en lugar de borrar manualmente cada módulo.
Problemas comunes
| Problema | Causa | Corrección |
|---|---|---|
Document.VbaProject es null | El documento no tiene proyecto VBA | Compruebe Document.HasMacros primero antes de acceder a los miembros de VbaProject |
Se espera que las macros se ejecuten después de editar SourceCode | Aspose.Words no tiene motor de ejecución VBA | Utiliza este API solo para leer/modificar el código fuente y la estructura de la macro; ejecuta el documento resultante en un entorno con un tiempo de ejecución VBA, como Microsoft Word, para ejecutar el código |
Indexar VbaModuleCollection por nombre no devuelve nada | Desajuste del nombre del módulo (mayúsculas/minúsculas o ortografía exacta) | Enumera VbaProject.Modules para confirmar el nombre exacto del módulo |
FAQ
¿Puede Aspose.Words FOSS para .NET ejecutar macros VBA en un documento?
No. Ni esta edición ni el producto comercial Aspose.Words incluyen un motor de ejecución de VBA — los proyectos VBA se leen y modifican como datos (código fuente del módulo, referencias, metadatos del proyecto), nunca se ejecutan.
¿Cómo leo el código fuente de una macro?
Obtenga el módulo indexando VbaProject.Modules por nombre (p.ej., modules["ModuleName"]), y luego lea su propiedad SourceCode.
¿Puedo añadir un módulo VBA completamente nuevo a un documento?
Sí — construya un VbaModule y añádalo al VbaModuleCollection del proyecto mediante Add(vbaModule).
¿Cómo puedo verificar si un documento tiene macros antes de procesarlo?
Lea Document.HasMacros; es true si el documento contiene un proyecto VBA, sin que tenga que acceder a Document.VbaProject primero.
¿Cómo elimino todas las macros de un documento?
Llame a Document.RemoveMacros().
API Reference Resumen
| Clase / Método | Descripción |
|---|---|
Document.VbaProject | El VbaProject del documento, o null si no tiene macros |
Document.HasMacros | Si hay un proyecto VBA presente |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | Un módulo: Name, Type (VbaModuleType), escribible SourceCode |
VbaModuleCollection | Add(), indexador por nombre, Remove(), Count |
VbaReference / VbaReferenceCollection | Bibliotecas de tipos referenciadas: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | Elimina el proyecto VBA del documento |