2016-10-04 1 views
1

Ich habe diese Methoden verbunden, um ein Makro zu erstellen, das einem Rechtsklickmenü-Button zugewiesen wird. Das Ziel ist, das Wort unter dem Cursor mit der rechten Maustaste auszuwählen, klicken Sie auf das Makro, das dieses Wort (Trimmen Leerzeichen) auswählt und es an den Standard-Suchdialog von Word sendet.Öffnen Sie den Suchdialog mit einem ausgewählten Wort mit VBA MS-Word

Option Explicit 
Sub CreateMacro() 
    Dim MenuButton As CommandBarButton 
    With CommandBars("Text") 
     Set MenuButton = .Controls.Add(msoControlButton) 
     With MenuButton 
      .Caption = "Find word" 
      .Style = msoButtonCaption 
      .OnAction = "FindWordUnderCursor" 
     End With 
    End With 
End Sub 

Sub ResetRightClick() 
    Application.CommandBars("Text").Reset 
End Sub 

Sub FindWordUnderCursor() 
    Dim pos As Long 
    Dim myRange As Range 

    '~~> if the cursor is at the end of the word 
    Selection.MoveEnd Unit:=wdCharacter, Count:=1 

    Do While Len(Trim(Selection.Text)) = 0 
     '~~> Move one character behind so that the cursor is 
     '~~> at the begining or in the middle 
     Selection.MoveEnd Unit:=wdCharacter, Count:=-1 
    Loop 

    '~~> Expand to get the word 
    Selection.Expand Unit:=wdWord 
    If Selection.Characters(Selection.Characters.Count) = " " Then 
     Selection.MoveEnd Unit:=wdCharacter, Count:=-1 
    End If 

    '~~> Display the word 
    Debug.Print Selection.Text 

End Sub 

Das einzige, was zu erreichen gelassen ist, dass das ausgewählte Wort selbst in dem Standard setzt MS-Word Suchdialogfeld (oder es öffnen, wenn es nicht aktiv ist), die automatisch die Ereignisse alle im Dokument hervorhebt. Wenn ich mit der rechten Maustaste auf ein anderes Wort klicke und das Makro auswähle, muss das neue Wort natürlich das vorherige ersetzen. Kannst du mir bitte helfen?

Hier sind die beiden gewünschten Schritte:

step1 step2

Dank

Antwort

0

Leider gibt es keine Möglichkeit das Suchfeld im Navigationsbereich unter Verwendung des Word-Objektmodell zu füllen. Aber Sie sind in der Lage alle Vorkommen eines Wortes markieren leicht eine einzige Zeile Code verwendet:

ActiveDocument.Range.Find.HitHighlight Selection.Range.Text 

Als Alternative das Suchfeld im Navigationsbereich zu füllen, können Sie das Suchdialogfeld öffnen (aber Sie wird nicht die sofortige Hervorhebung des Textes erhalten):

+0

Die einzelne Linie des Codes tut den Trick, und ich kann das Höhepunkt gerade "rückgängig machen" die Aktion loswerden. Natürlich ist die ganze Methode nicht perfekt (ich wünschte, Word hätte es eingebaut, um Autoren zu helfen, Duplikate zu finden. Ich benutze das zusammen mit einem anderen Makro, das ich geschrieben habe, um die wiederholten Wörter in einem Text zu identifizieren, wenn Sie möchten Frage: – juleshg

+0

Hoppla, ich habe festgestellt, dass ich mit der Aktion Rückgängig die Hervorhebung und auch die vorherige Aktion rückgängig mache, dh wenn ich ein Wort korrigiert habe und die Rückgängig-Taste gedrückt habe, wird die Hervorhebung angezeigt aber die Korrektur wird wieder rückgängig gemacht.Jede Idee, das zu umgehen? – juleshg

+0

Oh, vergiss nicht, der Höhepunkt verschwindet, wenn ich irgendwo ein einzelnes Feld treffe. – juleshg

Verwandte Themen