Especificación de "Dónde" al insertar bloques de construcción en MS word 10 a través de VBA

0

Estoy tratando de agregar un bloque de construcción personalizado con el clic de un botón en MS word 10. A continuación, se encuentra el código adjunto a mi botón 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

Mi problema es que, al invocar este código con el clic de un botón, el botón se convierte en el "Rango de selección" y, por lo tanto, se reemplaza. Busqué por todos lados códigos alternativos que mencionen diferentes especificaciones de "dónde" y no encontré nada.

Solo encontré dos enlaces (no puedo encontrar las URL en mi historial ahora mismo, se actualizará en breve)

  1. Mencionó "Párrafos (1)" en lugar de "Selección.Rango", pero esta es una ubicación absoluta, aunque necesitaría algo relativo (Antes del botón)

  2. Usando el método InsertBefore que supongo que se aplica solo al texto (se usó para insertar texto en el ejemplo) como cuando lo probé para bloques de construcción no funcionó

P.S Soy relativamente nuevo en VBA

TDsouza
fuente

Respuestas:

0

¿Por qué necesita utilizar selection ¿en absoluto? Mi palabra VBA podría estar oxidada, pero ¿por qué no le preguntas al usuario dónde hacerlo?

para sobresalir lo haría -

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

Ahora pienso Los rangos funcionan un poco diferente en palabra , pero el método es el mismo. Solicite una entrada, o defina la entrada, luego modifíquela.

Tal vez use el cuadro de entrada para devolver el texto que representa donde existe la selección. Luego usa esa entrada para buscar el siguiente .paragraph O lo que sea que contenga ese texto?

Aquí está la ayuda de la caja de entrada de Word

cuadros de diálogo incorporados de la palabra

y controles


Si no quiere preguntar al usuario, ¿por qué no buscar la opción que debería ser (en relación con su botón)? siguiente .section o .paragraph o .style y encontrarlo de esa manera.


Esto es lo que se me ocurrió en la palabra

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

Así que ahora la selección que estás buscando es el rango. fnd. Reemplace cualquier uso de la selección con eso.

Raystafarian
fuente