Projetos VBA
Projetos VBA
Este guia mostra como inspecionar e modificar o projeto VBA incorporado em um documento habilitado para macros com Aspose.Words FOSS para .NET. Aspose.Words FOSS para .NET pode inspecionar e modificar o projeto VBA incorporado em um documento habilitado para macros (.docm) — seus módulos, código-fonte e referências de biblioteca — através de Document.VbaProject e do modelo de objeto VbaProject/VbaModule. Isso é inspeção e edição de projeto, não execução de macro: Aspose.Words nunca incluiu um runtime VBA, no produto comercial ou nesta edição FOSS, portanto o código VBA é lido e modificado como dados, não executado.
Acessando o Projeto VBA de um Documento
Document.VbaProject retorna um VbaProject, ou null se o documento não possui um projeto VBA. Document.HasMacros informa se há um projeto VBA presente sem que você precise acessar VbaProject primeiro. VbaProject.Name, CodePage, IsSigned e IsProtected descrevem o próprio projeto.
Lendo e Editando Módulos
VbaProject.Modules retorna um VbaModuleCollection. Indexe nele por nome para localizar um módulo específico (por exemplo, modules["ModuleName"]), ou enumere a coleção inteira. Cada VbaModule expõe seu Name, Type (um VbaModuleType: DocumentModule, ProceduralModule, ClassModule ou DesignerModule), e — criticamente — seu SourceCode como uma propriedade de string gravável, de modo que o código-fonte do módulo possa ser lido e reescrito programaticamente. VbaModuleCollection.Add(vbaModule) e Remove(module) adicionam ou removem módulos do projeto.
Referências de Biblioteca
VbaProject.References retorna um VbaReferenceCollection de objetos VbaReference — as bibliotecas de tipos Automation e outros projetos VBA dos quais o código da macro depende. VbaReference.Type relata um VbaReferenceType (Registered, Project, Original ou Control), e LibId identifica a biblioteca referenciada. VbaReferenceCollection.Remove(item) / RemoveAt(index) removem as referências.
Removendo um Projeto VBA
Document.RemoveMacros() remove completamente o projeto VBA de um documento — útil para produzir uma cópia sem macros de um documento que originalmente foi distribuído com macros.
Dicas e Melhores Práticas
- Verifique
Document.HasMacrosantes de tocar emDocument.VbaProjectpara evitar tratamento nulo em documentos que nunca tiveram macros. - Trate
VbaModule.SourceCodecomo texto simples — como não há runtime VBA, editá-lo não valida o código; VBA malformado ainda será mantido, mas não será executado corretamente no Word até ser corrigido. - Use
VbaProject.IsSigned/IsProtectedpara detectar projetos assinados ou protegidos antes de tentar modificar seus módulos. Document.RemoveMacros()é a maneira mais simples de remover macros para uma cópia de distribuição “limpa”, ao invés de limpar manualmente cada módulo.
Problemas comuns
| Problema | Causa | Correção |
|---|---|---|
Document.VbaProject é null | O documento não possui projeto VBA | Verifique Document.HasMacros primeiro antes de acessar os membros de VbaProject |
Esperando que as macros sejam executadas após editar SourceCode | Aspose.Words não tem motor de execução VBA | Use este API apenas para ler/modificar a fonte da macro e sua estrutura; execute o documento resultante em um ambiente com tempo de execução VBA, como o Microsoft Word, para executar o código |
Indexar VbaModuleCollection por nome não retorna nada | Incompatibilidade no nome do módulo (maiúsculas/minúsculas ou ortografia exata) | Enumere VbaProject.Modules para confirmar o nome exato do módulo |
FAQ
O Aspose.Words FOSS para .NET pode executar macros VBA em um documento?
Não. Nem esta edição nem o produto comercial Aspose.Words inclui um mecanismo de execução VBA — projetos VBA são lidos e modificados como dados (código-fonte do módulo, referências, metadados do projeto), nunca executados.
Como leio o código-fonte de uma macro?
Obtenha o módulo indexando VbaProject.Modules por nome (por exemplo, modules["ModuleName"]), então leia sua propriedade SourceCode.
Posso adicionar um módulo VBA totalmente novo a um documento?
Sim — construa um VbaModule e adicione-o ao VbaModuleCollection do projeto via Add(vbaModule).
Como verifico se um documento tem macros antes de processá-lo?
Leia Document.HasMacros; é true se o documento contiver um projeto VBA, sem que você precise acessar Document.VbaProject primeiro.
Como remover todas as macros de um documento?
Chame Document.RemoveMacros().
API Reference Resumo
| Classe / Método | Descrição |
|---|---|
Document.VbaProject | O VbaProject do documento, ou null se ele não possui macros |
Document.HasMacros | Se um projeto VBA está presente |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | Um módulo: Name, Type (VbaModuleType), gravável SourceCode |
VbaModuleCollection | Add(), indexador por nome, Remove(), Count |
VbaReference / VbaReferenceCollection | Bibliotecas de tipos referenciadas: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | Remove o projeto VBA do documento |