我在文档中使用了一些形状,最近从动态创建这些(慢!)切换到使用构建块。我通过 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
当我从功能区单击构建块上的 ONCE 时,VBA 代码工作,并且元素可用。
问题我可以在代码中做些什么来检查这一点,并使这些块从一开始就可用?
编辑:
- 当我使用宏记录器插入构建块时,没有向 VBA 添加“附加模板”或类似内容。
- 在单击构建块按钮之前,VBA 项目不包含构建块。之后,确实如此。
Word 的行为是在调用构建块之前不加载构建块。
您可以使用以下命令强制加载:
如果它们已经加载,这是多余的,但它不会伤害任何东西。
您还可以将构建基块支架加载为加载项。
这可以通过将它放在Word 启动文件夹中或通过 vba 来完成。
当包含 BB 的模板作为加载项加载时,vba 可以立即使用它。我经常将我的自定义构建块添加到我的模板加载项中,而不是在通用的 Building Blocks.dotx 中。这样,如果我有代码在加载项中引用它们,它们总是在那里。如果我将它添加到文档模板中也是如此。
这是我关于可以(并且应该)存储构建块的位置的文章。
这是我编写的插入构建块的代码。要使用的代码取决于存储位置。