我在文档中使用了一些形状,最近从即时创建这些形状(速度很慢!)切换到使用构建块。我通过 VBA 代码从表单插入这些块。
构建块位于单独的文件中。
这一切都正常,但不知何故,当我加载文档或任何新文档时,构建块不存在。我收到错误 5941“集合成员不存在”。
VBA 代码明确引用了存在的构建块文件。
Const blockpath = "C:\Users\XXX\AppData\Roaming\Microsoft\Document Building Blocks\1030\16\Building Blocks.dotx"
Dim r As Range
Set r = Application.Templates(blockpath).BuildingBlockEntries("XYZ").Insert(Selection.Range, True) ' range containing inserted block
当我从功能区单击构建块一次时,VBA 代码就可以运行,并且元素可用。
问题我可以在代码中做什么来检查这一点,并使这些块从一开始就可用?
编辑:
- 当我使用宏记录器插入构建块时,VBA 中没有添加任何“附加模板”或类似内容。
- 在单击构建块按钮之前,VBA 项目不包含构建块。单击之后,它包含构建块。
答案1
Word 的行为是,除非调用某个构建块,否则不会加载该构建块。
您可以使用以下命令强制加载:
application.Templates.LoadBuildingBlocks
如果它们已经加载,这虽然是多余的,但不会影响任何东西。
您还可以将积木支架作为插件加载。
可以通过将其放置在您的Word 启动文件夹或通过 vba。
当包含 BB 的模板作为插件加载时,它立即可供 vba 使用。我经常将自定义构建块添加到模板插件中,而不是添加到通用 Building Blocks.dotx 中。这样,如果我在插件中有引用它们的代码,它们就会一直存在。如果我将其添加到文档模板中,情况也是如此。
这是我的文章可以(并且应该)存储 Building Block 的位置。
这是我写的代码用于插入构建块. 使用的代码取决于存储位置。