首页 > 解决方案 > 使用 Word VBA 插入构建基块

问题描述

我正在尝试插入一个格式化表格,该表格已保存在名为“DV Table”的单词中,作为使用 VBA 的构建块的一部分。我需要将此表插入到 word 文档的第 13 段。下面是我的代码。前 3 行只是将选择设置为第 12 段,然后创建一个新的段落 (13)。最后一行代码是插入表格。但是当我运行它时,它给出了错误。

编译错误:未定义子或函数

我想这不是定义位置的正确方法。在这方面需要一些帮助。谢谢。

ActiveDocument.Paragraphs(12).Range.Select
Selection.EndKey Unit:=wdLine
Selection.Paragraphs.Add

 ActiveDocument.AttachedTemplate.BuildingBlockEntries("DV Table" _
      ).Insert Where:=Paragraphs(13).Range.Select, RichText:=True

标签: vbams-word

解决方案


Where参数需要一个Range对象。有两个问题Paragraphs(13).Range.Select

  • 它是一个方法——它是一个动作,选择一些东西,而不是返回一个对象
  • Paragraphs(13)不是“完全合格的” - VBA 不知道它是什么/是什么意思。

一种可能性是

ActiveDocument.Paragraphs(13).Range

注意ActiveDocument.前面Paragraphs:这“完全合格” Paragraphs(13)- 它告诉 VBA 它属于什么。而且,因为Where需要一个Range对象,所以Paragraphs(13).Range应该是一个正确的“目标”(我没有测试你的代码)。

通常,最好不要使用Selection,而只使用Range对象。通常不需要使用 VBA实际选择某些内容。问题中代码片段的替代方法可能是

Dim rng As Word.Range

Set rng = ActiveDocument.Paragraphs(13).Range
rng.Collapse wdCollapseEnd    'like pressing right-arrow for a selection
rng.InsertParagraphAfter
rng.Collapse wdCollapseStart  ' like pressing left-arrow for a selection
'rng.Select                   ' for testing / demo purposes
ActiveDocument.AttachedTemplate.BuildingBlockEntries("DV Table" _
               ).Insert Where:=rng, RichText:=True

在这种情况下,文档中的选择不会改变。没有屏幕闪烁;并且代码执行得更快。这种工作方式需要习惯,但是一旦熟悉它,就更容易识别代码应该做什么......Selection对于正在操作的内容相当模糊,特别是如果有很多代码使用它.


推荐阅读