VBA projekty
VBA projekty
Tento průvodce ukazuje, jak prohlížet a upravovat VBA projekt vložený do dokumentu s povolenými makry pomocí Aspose.Words FOSS pro .NET. Aspose.Words FOSS pro .NET může prohlížet a upravovat VBA projekt vložený do dokumentu s povolenými makry (.docm) — jeho moduly, zdrojový kód a knihovní odkazy — prostřednictvím Document.VbaProject a objektového modelu VbaProject/VbaModule. Jedná se o prohlížení a úpravu projektu, nikoli o provádění maker: Aspose.Words nikdy neobsahoval VBA runtime, ani v komerčním produktu, ani v této FOSS edici, takže VBA kód je čten a upravován jako data, nikoli spouštěn.
Přístup k VBA projektu dokumentu
Document.VbaProject vrací VbaProject, nebo null, pokud dokument neobsahuje VBA projekt. Document.HasMacros hlásí, zda je VBA projekt přítomen, aniž byste museli nejprve přistupovat k VbaProject. VbaProject.Name, CodePage, IsSigned a IsProtected popisují samotný projekt.
Čtení a úprava modulů
VbaProject.Modules vrací VbaModuleCollection. Indexujte jej podle názvu, abyste našli konkrétní modul (např. modules["ModuleName"]), nebo vypište celou kolekci. Každý VbaModule odhaluje své Name, Type (a VbaModuleType: DocumentModule, ProceduralModule, ClassModule nebo DesignerModule), a — co je klíčové — své SourceCode jako zapisovatelnou řetězcovou vlastnost, takže zdroj modulů lze programově číst a přepisovat. VbaModuleCollection.Add(vbaModule) a Remove(module) přidávají nebo odstraňují moduly z projektu.
Knihovní odkazy
VbaProject.References vrací VbaReferenceCollection VbaReference objektů — knihovny typů Automation a další VBA projekty, na nichž makro kód závisí. VbaReference.Type hlásí VbaReferenceType (Registered, Project, Original nebo Control) a LibId identifikuje odkazovanou knihovnu. VbaReferenceCollection.Remove(item) / RemoveAt(index) odstraňují odkazy.
Odstranění VBA projektu
Document.RemoveMacros() kompletně odstraňuje VBA projekt z dokumentu — užitečné pro vytvoření kopie dokumentu bez maker, která byla původně distribuována s makry.
Tipy a osvědčené postupy
- Zkontrolujte
Document.HasMacrospřed úpravouDocument.VbaProject, abyste se vyhnuli zpracování null u dokumentů, které nikdy neobsahovaly makra. - Považujte
VbaModule.SourceCodeza prostý text — protože neexistuje runtime VBA, úprava neověřuje kód; poškozené VBA projde stále průchodem, ale ve Wordu se nespustí správně, dokud nebude opraveno. - Použijte
VbaProject.IsSigned/IsProtectedk detekci podepsaných nebo chráněných projektů před pokusem o úpravu jejich modulů. Document.RemoveMacros()je nejjednodušší způsob, jak odstranit makra pro „čistou“ distribuční kopii, místo ručního čištění každého modulu.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
Document.VbaProject je null | Dokument nemá žádný projekt VBA | Nejprve zkontrolujte Document.HasMacros před přístupem k členům VbaProject |
Očekává se, že makra budou spuštěna po úpravě SourceCode | Aspose.Words nemá žádný engine pro vykonávání VBA | Použijte tento API pouze k načtení/úpravě zdrojového kódu a struktury makra; spusťte výsledný dokument v prostředí s VBA runtime, například Microsoft Word, pro provedení kódu |
Indexování VbaModuleCollection podle názvu nevrací nic | Neshoda názvu modulu (velikost písmen nebo přesné pravopis) | Vyjmenujte VbaProject.Modules k potvrzení přesného názvu modulu |
FAQ
Může Aspose.Words FOSS pro .NET spouštět VBA makra v dokumentu?
Ne. Ani tato edice, ani komerční produkt Aspose.Words neobsahuje spouštěcí engine pro VBA — projekty VBA jsou čteny a upravovány jako data (zdroj modulu, reference, metadata projektu), nikdy nejsou spouštěny.
Jak si přečtu zdrojový kód makra?
Získejte modul indexováním VbaProject.Modules podle názvu (např. modules["ModuleName"]), poté přečtěte jeho vlastnost SourceCode.
Mohu do dokumentu přidat zcela nový VBA modul?
Ano — vytvořte VbaModule a přidejte jej do VbaModuleCollection projektu pomocí Add(vbaModule).
Jak mohu zjistit, zda dokument vůbec obsahuje makra, ještě před jeho zpracováním?
Přečtěte Document.HasMacros; je to true, pokud dokument obsahuje projekt VBA, aniž byste museli nejprve přistupovat k Document.VbaProject.
Jak mohu odstranit všechna makra z dokumentu?
Zavolejte Document.RemoveMacros().
API Reference Shrnutí
| Třída / Metoda | Popis: |
|---|---|
Document.VbaProject | VbaProject dokumentu, nebo null, pokud neobsahuje žádná makra |
Document.HasMacros | Zda je přítomen projekt VBA |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | Jeden modul: Name, Type (VbaModuleType), zapisovatelný SourceCode |
VbaModuleCollection | Add(), indexer podle názvu, Remove(), Count |
VbaReference / VbaReferenceCollection | Odkazované knihovny typů: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | Odstraňuje VBA projekt z dokumentu |