Я пытаюсь добавить пользовательский строительный блок одним нажатием кнопки в 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

Моя проблема в том, что, поскольку этот код вызывается нажатием кнопки, кнопка становится "Выбор".Диапазон "и, таким образом, заменяется. Я искал все вокруг для альтернативных кодов, которые упоминают различные спецификации "где" и ничего не нашел.

Я нашел только две ссылки (не могу найти URL в моей истории прямо сейчас, скоро обновлю)

  1. В нем упоминается «Пункты (1)» вместо «Выбор.Range », но это абсолютное местоположение, а мне нужно что-то относительное (перед кнопкой)

  2. Использование метода InsertBefore, который, я полагаю, применяется только к тексту (он использовался для вставки текста в примере), так как когда я пробовал его для строительных блоков, он не работал

PS Я относительно новичок в VBA

1 ответ1

0

Почему вам нужно использовать selection вообще? Мое слово VBA может быть ржавым, но почему бы вам не спросить пользователя, где это сделать?

для Excel я бы -

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

Теперь я думаю, что диапазоны в слове работают немного по-другому, но метод тот же. Запросите ввод или определите ввод, затем измените его.

Может быть, использовать поле ввода для возврата текста, который представляет, где существует выбор. Затем использовать этот ввод для поиска следующего .paragraph или что-то, что содержит этот текст?

вот справка по вводу слов

встроенные диалоговые окна

и контролирует


Если вы не хотите спрашивать пользователя, почему бы не посмотреть, какой выбор должен быть (по отношению к вашей кнопке)? следующий .section или .paragraph или .style и найдите его таким образом.


Вот что я придумал в слове

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 . Замените любое использование выбора этим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .