Spécification de “Où” lors de l'insertion de blocs de construction dans MS Word 10 via VBA

0

J'essaie d'ajouter un bloc de construction personnalisé en cliquant sur un bouton dans MS Word 10. Vous trouverez ci-dessous le code associé à mon bouton 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

Mon problème est que, comme ce code est appelé en un clic, le bouton devient "Selection.Range" et est donc remplacé. J'ai cherché partout des codes alternatifs qui mentionnaient des spécifications "où" différentes et je n'ai rien trouvé.

Je n'ai trouvé que deux liens (je ne trouve pas les URL dans mon historique, mettre à jour sous peu)

  1. Il mentionnait "Paragraphs (1)" au lieu de "Selection.Range", mais il s’agit d’un emplacement absolu alors que j’aurais besoin de quelque chose de relatif (Avant le bouton)

  2. Utilisation de la méthode InsertBefore qui, je suppose, s'applique uniquement au texte (il a été utilisé pour insérer du texte dans l'exemple), car lorsque je l'ai essayé pour créer des blocs, cela n'a pas fonctionné.

PS je suis relativement nouveau à VBA

TDsouza
la source

Réponses:

0

Pourquoi avez-vous besoin d'utiliser selectiondu tout? Mon mot VBA est peut-être rouillé, mais pourquoi ne demandez-vous pas à l'utilisateur où le faire?

pour Excel je voudrais -

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

Maintenant, je pense que les gammes fonctionnent un peu différemment en mot , mais la méthode est la même. Demandez une entrée ou définissez-la, puis modifiez-la.

Utilisez peut-être la zone de saisie pour renvoyer un texte qui représente l'emplacement de la sélection. Puis utilisez cette entrée pour rechercher le suivant .paragraphou quoi que ce soit qui contient ce texte?

voici l'aide de Word inputbox

boîtes de dialogue intégrées Word

et contrôles


Si vous ne voulez pas demander à l'utilisateur, pourquoi ne pas chercher quelle que soit la sélection (par rapport à votre bouton)? Ensuite .sectionou .paragraphou .styleet le trouver de cette façon.


Voici ce que je suis venu avec mot

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

Alors maintenant, la sélection que vous recherchez correspond à la plage fnd. Remplacez toute utilisation de la sélection par cela.

Raystafarian
la source