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.HasMacros antes de tocar em Document.VbaProject para evitar tratamento nulo em documentos que nunca tiveram macros.
  • Trate VbaModule.SourceCode como 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/IsProtected para 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

ProblemaCausaCorreção
Document.VbaProject é nullO documento não possui projeto VBAVerifique Document.HasMacros primeiro antes de acessar os membros de VbaProject
Esperando que as macros sejam executadas após editar SourceCodeAspose.Words não tem motor de execução VBAUse 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 nadaIncompatibilidade 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étodoDescrição
Document.VbaProjectO VbaProject do documento, ou null se ele não possui macros
Document.HasMacrosSe um projeto VBA está presente
VbaProjectName, Modules, References, CodePage, IsSigned, IsProtected
VbaModuleUm módulo: Name, Type (VbaModuleType), gravável SourceCode
VbaModuleCollectionAdd(), indexador por nome, Remove(), Count
VbaReference / VbaReferenceCollectionBibliotecas de tipos referenciadas: Type (VbaReferenceType), LibId
Document.RemoveMacros()Remove o projeto VBA do documento

Ver também

 Português