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.HasMacrosprima di intervenire suDocument.VbaProjectper evitare la gestione di null per i documenti che non hanno mai avuto macro. - Considera
VbaModule.SourceCodecome 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/IsProtectedper 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
| Problema | Causa | Correzione |
|---|---|---|
Document.VbaProject è null | Il documento non ha alcun progetto VBA | Controlla Document.HasMacros prima di accedere ai membri di VbaProject |
Ci si aspetta che le macro vengano eseguite dopo la modifica di SourceCode | Aspose.Words non ha alcun motore di esecuzione VBA | Usa 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 nulla | Mancata 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 / Metodo | Descrizione |
|---|---|
Document.VbaProject | Il VbaProject del documento, o null se non contiene macro |
Document.HasMacros | Se è presente un progetto VBA |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | Un modulo: Name, Type (VbaModuleType), scrivibile SourceCode |
VbaModuleCollection | Add(), indicizzatore per nome, Remove(), Count |
VbaReference / VbaReferenceCollection | Librerie di tipo di riferimento: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | Rimuove il progetto VBA dal documento |