VBA 项目

VBA 项目

本指南展示了如何使用 Aspose.Words FOSS for .NET 检查和修改嵌入在宏启用文档中的 VBA 项目。Aspose.Words FOSS for .NET 可以通过 Document.VbaProject 和 VbaProject/VbaModule 对象模型检查和修改嵌入在宏启用文档(.docm)中的 VBA 项目——其模块、源代码和库引用。此为项目检查和编辑,而非宏执行:Aspose.Words 在商业产品或此 FOSS 版中从未包含 VBA 运行时,因此 VBA 代码被作为数据读取和修改,而不是运行。


访问文档的 VBA 项目

Document.VbaProject 返回一个 VbaProject,如果文档没有 VBA 项目则返回 null。Document.HasMacros 报告是否存在 VBA 项目,无需先访问 VbaProject。VbaProject.Name、CodePage、IsSigned 和 IsProtected 描述项目本身。


读取和编辑模块

VbaProject.Modules 返回一个 VbaModuleCollection。可以通过名称索引它以查找特定模块(例如 modules["ModuleName"]),或枚举整个集合。每个 VbaModule 都公开其 Name、Type(一个 VbaModuleType:DocumentModule、ProceduralModule、ClassModule 或 DesignerModule),以及——关键的是——其 SourceCode 作为可写的字符串属性,从而可以以编程方式读取和重写模块源代码。VbaModuleCollection.Add(vbaModule) 和 Remove(module) 用于向项目中添加或删除模块。


库引用

VbaProject.References 返回一个 VbaReferenceCollection,其中包含 VbaReference 对象——即宏代码所依赖的 Automation 类型库和其他 VBA 项目。VbaReference.Type 报告一个 VbaReferenceType(Registered、Project、Original 或 Control),并且 LibId 标识所引用的库。VbaReferenceCollection.Remove(item) / RemoveAt(index) 删除引用。


删除 VBA 项目

Document.RemoveMacros() 完全从文档中剥除 VBA 项目——对于生成最初随宏一起发布的文档的无宏副本非常有用。


技巧与最佳实践

  • 在操作 Document.VbaProject 之前检查 Document.HasMacros,以避免对从未包含宏的文档进行空值处理。
  • 将 VbaModule.SourceCode 视为纯文本——由于没有 VBA 运行时,编辑它不会对代码进行验证;即使 VBA 代码格式错误,它仍会往返传输,但在 Word 中仍无法正确运行,除非先修正。
  • 在尝试修改其模块之前,使用 VbaProject.IsSigned/IsProtected 检测已签名或受保护的项目。
  • Document.RemoveMacros() 是剥除宏以获得“干净”发行副本的最简方法,无需手动清除每个模块。

常见问题

问题原因修复
Document.VbaProject 是 null文档没有 VBA 项目在访问 VbaProject 成员之前,请先检查 Document.HasMacros
期望在编辑 SourceCode 后运行宏Aspose.Words 没有 VBA 执行引擎仅使用此 API 读取/修改宏源代码和结构;在具有 VBA 运行时的环境中(例如 Microsoft Word)运行生成的文档以执行代码
按名称索引 VbaModuleCollection 不会返回任何内容模块名称不匹配(大小写或拼写不完全相同)枚举 VbaProject.Modules 以确认精确的模块名称

FAQ

Aspose.Words 对 .NET 的 FOSS 能在文档中运行 VBA 宏吗?

不。此版本以及商业版 Aspose.Words 产品均不包含 VBA 执行引擎——VBA 项目仅作为数据读取和修改(模块源码、引用、项目元数据),从不执行。

我该如何读取宏的源代码?

通过按名称(例如 modules["ModuleName"])索引 VbaProject.Modules 获取模块,然后读取其 SourceCode 属性。

我可以向文档中添加全新的 VBA 模块吗?

可以——构建一个 VbaModule 并通过 Add(vbaModule) 将其添加到项目的 VbaModuleCollection 中。

我该如何在处理文档之前检查文档是否包含宏?

读取 Document.HasMacros;如果文档携带 VBA 项目,它就是 true,而无需先访问 Document.VbaProject。

我该如何去除文档中的所有宏?

调用 Document.RemoveMacros()。


API Reference 摘要

类 / 方法描述
Document.VbaProject文档的 VbaProject,如果没有宏则为 null
Document.HasMacros是否存在 VBA 项目
VbaProjectName, Modules, References, CodePage, IsSigned, IsProtected
VbaModule一个模块:Name, Type (VbaModuleType), 可写 SourceCode
VbaModuleCollectionAdd(), 按名称索引器, Remove(), Count
VbaReference / VbaReferenceCollection引用的类型库:Type(VbaReferenceType),LibId
Document.RemoveMacros()从文档中剥离 VBA 项目

另请参阅

 中文