通过 VBA 在 MS Word 10 中插入构建块时指定“位置”

通过 VBA 在 MS Word 10 中插入构建块时指定“位置”

我正在尝试在 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 方法,我认为该方法仅适用于文本(它用于在示例中插入文本),因为当我尝试将其用于构建块时,它不起作用

PS 我对 VBA 还比较陌生

答案1

为什么你需要使用selection?我对 VBA 可能不太熟悉,但你为什么不问用户在哪里做这件事呢?

对于 Excel,我会 -

sub test
dim rngslct as range
set rngslct = inputbox("Where?","Pick a range","", type := 8)
objBB.Insert rngslct
end sub

现在,我认为在 Word 中,范围的工作方式略有不同,但方法是一样的。请求输入,或者定义输入,然后修改它。

也许可以使用输入框返回表示选择存在位置的文本。然后使用该输入来搜索下一个.paragraph或任何包含该文本的内容?

这是 Word 输入框帮助

word 内置对话框

控件


如果您不想询问用户,为什么不寻找应该选择的内容(与您的按钮相关)?下一步.section.paragraph或然后.style以这种方式找到它。


这是我在 word 中想到的

Sub test()
Dim str As String
str = InputBox("what words")
Dim orng As Range
Set orng = ActiveDocument.Content
  With orng.Find
    .Text = str
  End With
    If orng.Find.Execute Then
        orng.Find.Execute
        orng.Bookmarks.Add ("bookmark1")
        Dim fnd As Range
        Set fnd = ActiveDocument.Bookmarks("bookmark1").Range
    End If
    'do stuff to fnd
End Sub

因此,现在您要查找的选择是范围fnd。用该范围替换任何选择的用法。

相关内容