我正在尝试在 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”规范的替代代码,但一无所获。
我只找到两个链接(现在无法在我的历史记录中找到这些网址,很快就会更新)
它提到的是“Paragraphs(1)”而不是“Selection.Range”,但这是一个绝对位置,而我需要一些相对的位置(在按钮之前)
使用 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
或任何包含该文本的内容?
和控件
如果您不想询问用户,为什么不寻找应该选择的内容(与您的按钮相关)?下一步.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
。用该范围替换任何选择的用法。