【问题标题】:Insert Building Blocks using Word VBA使用 Word VBA 插入构建基块
【发布时间】:2019-11-14 08:30:03
【问题描述】:

我正在尝试插入一个格式化表格,该表格已保存在名为“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

【问题讨论】:

  • 我建议你学习如何使用 F1。将光标放在关键字上,然后按 F1。这将打开该关键字的 MS 帮助页面。然后阅读帮助,特别注意返回类型(如果有)。
  • 你能帮上support microsoft的例子
  • 您还在为此苦苦挣扎吗?

标签: vba ms-word


【解决方案1】:

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 实际选择 东西。问题中代码 sn-p 的替代方法可能是

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 对于正在被操纵的内容相当模糊,特别是如果有很多使用它的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多