在单词10中对构建块使用insert方法时,如何指定“where”

时间:2015-03-06 08:44:39

标签: vba ms-word word-vba

我正在尝试通过点击MS word 10中的按钮添加自定义构建块。下面是当前附加到我的activeX按钮的代码。

Private Sub CommandButton1_Click()
   Dim objTemplate As Template
   Dim objBB As BuildingBlock

' Set the template to store the building block
  Set objTemplate = ActiveDocument.AttachedTemplate

' Access the building block through the type and category
  Set objBB = objTemplate.BuildingBlockTypes(wdTypeCustom5) _
 .Categories("General").BuildingBlocks("Experience")

 ' Insert the building block into the document replacing any selected text.
   objBB.Insert Selection.Range
 End Sub

我的问题是,当点击按钮调用此代码时,按钮变为“Selection.Range”,因此被替换。我四处寻找备用代码,提到不同的“where”规范并没有发现任何内容。

我只发现了两个链接(找不到我历史记录中的网址,很快就会更新)

  1. 它提到“Paragraphs(1)”而不是“Selection.Range”,但是这个 是一个绝对的位置,而我需要一些亲戚 (按钮前)

  2. 使用InsertBefore方法,我认为它只适用于文本(它 用于在示例中插入文本)就像我尝试它时一样 它没有用的构建块

  3. P.S我对VBA来说相对较新

2 个答案:

答案 0 :(得分:0)

当处于"创建模式"时,转到"属性"您CommandButton1的工具箱,将属性TakeFocusOnClick True 更改为 False

enter image description here

焦点将保留在您选择的段落上。

如果您想在CommandButton之后使用它,可以在sub的末尾添加以下内容:

    ...
    CommandButton1.Select
    Selection.HomeKey wdLine
    objBB.Insert Selection.Range
End Sub

答案 1 :(得分:0)

好的,我使用以下代码解决了这个问题,并将其发布给其他可能会在将来放弃的人。

Private Sub CommandButton1_Click()
   Dim objTemplate As Template
   Dim objBB As BuildingBlock

   ' Set the template to store the building block
   Set objTemplate = ActiveDocument.AttachedTemplate

   ' Access the building block through the type and category
   Set objBB = objTemplate.BuildingBlockTypes(wdTypeCustom5) _
  .Categories("General").BuildingBlocks("Experience")

  ' Insert the building block into the document replacing any selected text.
   Selection.MoveUp Unit:=wdLine, Count:=1
   objBB.Insert Selection.Range
  End Sub

基本上只是在插入BuildingBlock之前添加了以下行

       Selection.MoveUp Unit:=wdLine, Count:=1

感谢大家的帮助。