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.HasMacros antes de tocar Document.VbaProject para evitar el manejo de nulos en documentos que nunca tuvieron macros.
  • Trate VbaModule.SourceCode como 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/IsProtected para 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

ProblemaCausaCorrección
Document.VbaProject es nullEl documento no tiene proyecto VBACompruebe Document.HasMacros primero antes de acceder a los miembros de VbaProject
Se espera que las macros se ejecuten después de editar SourceCodeAspose.Words no tiene motor de ejecución VBAUtiliza 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 nadaDesajuste 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étodoDescripción
Document.VbaProjectEl VbaProject del documento, o null si no tiene macros
Document.HasMacrosSi hay un proyecto VBA presente
VbaProjectName, Modules, References, CodePage, IsSigned, IsProtected
VbaModuleUn módulo: Name, Type (VbaModuleType), escribible SourceCode
VbaModuleCollectionAdd(), indexador por nombre, Remove(), Count
VbaReference / VbaReferenceCollectionBibliotecas de tipos referenciadas: Type (VbaReferenceType), LibId
Document.RemoveMacros()Elimina el proyecto VBA del documento

Ver también

 Español