Progetti VBA

Progetti VBA

Questa guida mostra come ispezionare e modificare il progetto VBA incorporato in un documento abilitato alle macro con Aspose.Words FOSS per .NET. Aspose.Words FOSS per .NET può ispezionare e modificare il progetto VBA incorporato in un documento abilitato alle macro (.docm) — i suoi moduli, il codice sorgente e i riferimenti alle librerie — tramite Document.VbaProject e il modello object VbaProject/VbaModule. Questa è un’ispezione e modifica del progetto, non l’esecuzione di macro: Aspose.Words non ha mai incluso un runtime VBA, né nel prodotto commerciale né in questa edizione FOSS, quindi il codice VBA viene letto e modificato come dati, non eseguito.


Accedere al progetto VBA di un documento

Document.VbaProject restituisce un VbaProject, o null se il documento non ha un progetto VBA. Document.HasMacros segnala se è presente un progetto VBA senza dover accedere prima a VbaProject. VbaProject.Name, CodePage, IsSigned e IsProtected descrivono il progetto stesso.


Lettura e modifica dei moduli

VbaProject.Modules restituisce un VbaModuleCollection. Indicizzalo per nome per cercare un modulo specifico (ad es. modules["ModuleName"]), o elenca l’intera collezione. Ogni VbaModule espone il suo Name, Type (un VbaModuleType: DocumentModule, ProceduralModule, ClassModule o DesignerModule), e — in modo cruciale — il suo SourceCode come proprietà stringa scrivibile, così il codice sorgente del modulo può essere letto e riscritto programmaticamente. VbaModuleCollection.Add(vbaModule) e Remove(module) aggiungono o rimuovono moduli dal progetto.


Riferimenti di libreria

VbaProject.References restituisce un VbaReferenceCollection di oggetti VbaReference — le librerie di tipo Automation e altri progetti VBA da cui dipende il codice macro. VbaReference.Type segnala un VbaReferenceType (Registered, Project, Original o Control), e LibId identifica la libreria di riferimento. VbaReferenceCollection.Remove(item) / RemoveAt(index) rimuovono i riferimenti.


Rimuovere un progetto VBA

Document.RemoveMacros() rimuove completamente il progetto VBA da un documento — utile per produrre una copia priva di macro di un documento che originariamente conteneva macro.


Suggerimenti e migliori pratiche

  • Verifica Document.HasMacros prima di intervenire su Document.VbaProject per evitare la gestione di null per i documenti che non hanno mai avuto macro.
  • Considera VbaModule.SourceCode come testo semplice — poiché non esiste un runtime VBA, modificarlo non convalida il codice; il VBA malformato verrà comunque trasferito, ma non verrà eseguito correttamente in Word finché non sarà corretto.
  • Usa VbaProject.IsSigned/IsProtected per rilevare progetti firmati o protetti prima di tentare di modificare i loro moduli.
  • Document.RemoveMacros() è il modo più semplice per rimuovere le macro per una copia di distribuzione “pulita”, anziché cancellare manualmente ogni modulo.

Problemi comuni

ProblemaCausaCorrezione
Document.VbaProject è nullIl documento non ha alcun progetto VBAControlla Document.HasMacros prima di accedere ai membri di VbaProject
Ci si aspetta che le macro vengano eseguite dopo la modifica di SourceCodeAspose.Words non ha alcun motore di esecuzione VBAUsa questo API per leggere/modificare solo il codice sorgente e la struttura delle macro; esegui il documento risultante in un ambiente con un runtime VBA, come Microsoft Word, per eseguire il codice
Indicizzare VbaModuleCollection per nome non restituisce nullaMancata corrispondenza del nome del modulo (maiuscole/minuscole o ortografia esatta)Enumera VbaProject.Modules per confermare il nome esatto del modulo

FAQ

Può Aspose.Words FOSS per .NET eseguire macro VBA in un documento?

No. Né questa edizione né il prodotto commerciale Aspose.Words includono un motore di esecuzione VBA — i progetti VBA vengono letti e modificati come dati (sorgente del modulo, riferimenti, metadati del progetto), mai eseguiti.

Come leggere il codice sorgente di una macro?

Ottieni il modulo indicizzando VbaProject.Modules per nome (ad esempio modules["ModuleName"]), quindi leggi la sua proprietà SourceCode.

Posso aggiungere un modulo VBA completamente nuovo a un documento?

Sì — costruisci un VbaModule e aggiungilo al VbaModuleCollection del progetto tramite Add(vbaModule).

Come posso verificare se un documento ha macro prima di elaborarlo?

Leggi Document.HasMacros; è true se il documento contiene un progetto VBA, senza dover accedere prima a Document.VbaProject.

Come posso rimuovere tutte le macro da un documento?

Chiama Document.RemoveMacros().


Riepilogo API Reference

Classe / MetodoDescrizione
Document.VbaProjectIl VbaProject del documento, o null se non contiene macro
Document.HasMacrosSe è presente un progetto VBA
VbaProjectName, Modules, References, CodePage, IsSigned, IsProtected
VbaModuleUn modulo: Name, Type (VbaModuleType), scrivibile SourceCode
VbaModuleCollectionAdd(), indicizzatore per nome, Remove(), Count
VbaReference / VbaReferenceCollectionLibrerie di tipo di riferimento: Type (VbaReferenceType), LibId
Document.RemoveMacros()Rimuove il progetto VBA dal documento

Vedi anche

 Italiano