Znajdź wszystkie wystąpienia tekstu i ustaw go jako hiperłącze z makrem

1

wymagany

Chcę znaleźć wszystkie wystąpienia pojedynczego tekstu w dokumencie MS Word, uczynić każde wystąpienie hiperłączem i zmienić ogólny styl hiperłącza na jeden z moich wybranych.

Co ja mam

Ponieważ nie mam pojęcia, jak osiągnąć powyższy wymóg jako całość, zacząłem od jego części, a mianowicie znalezienia jednego wystąpienia i dostosowania go.

Nagrałem więc makro, co spowodowało następujący kod. Ten kod zaadaptowałem, aby sub mógł pobrać parametry dla hyperlinkText i podadresu hiperłącza :

Sub AutoDetectHyperlinksForText(hyperlinkText As String, subaddress As String, style As String)
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = hyperlinkText
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
        subaddress:=subaddress, ScreenTip:="", TextToDisplay:= _
        hyperlinkText
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    Selection.Style = ActiveDocument.Styles(style)
End Sub

Dzięki temu łatwo jest wywołać sub dla wielu wystąpień słów, takich jak:

Call AutoDetectHyperlinksForText("broadcasts", "_broadcastService", "Subtle Emphasis")

Pytanie

Jak mogę dostosować to makro, aby sprawdzało cały dokument?

Pytanie bonusowe

Czy istnieje sposób zmodyfikowania powyższego skryptu, aby móc zapisać mój wybór i usunąć potrzebę korzystania z niego .MoveLeft?

W pseudokodzie byłoby to mniej więcej tak:

Dim mySelect as Selection
mySelect = Selection.Find.Execute
ActiveDocument.Hyperlinks.Add Anchor:=mySelect.Range, Address:="", _
    subaddress:=subaddress, ScreenTip:="", TextToDisplay:= _
    hyperlinkText
mySelect.Style = ActiveDocument.Styles("Subtle Emphasis")
Spikee
źródło

Odpowiedzi:

1

Znajduje to słowo „google” (nie google ani googled) i hiperłącza do niego http:\\google.com

Dotyczy to również stylu

Sub FindAndHyperlink()
    'define the style
    Dim strStyle As String
    strStyle = "Subtle Emphasis"
    'set the search range
    Dim rngSearch As Range
    Set rngSearch = ActiveDocument.Range
    'set the search string
    Dim strSearch As String
    strSearch = "google"
    'set the target address for the hyperlink
    Dim strAddress As String
    strAddress = "http:\\google.com"

    With rngSearch.Find
        Do While .Execute(findText:=strSearch, MatchWholeWord:=True, Forward:=True) = True
            With rngSearch 'we will work with what is found as it will be the selection
                ActiveDocument.Hyperlinks.Add Anchor:=rngSearch, Address:=strAddress
                .Style = ActiveDocument.Styles(strStyle) 'throw the style on it after the link
            End With
            rngSearch.Collapse Direction:=wdCollapseEnd
            'keep it moving
        Loop
    End With
End Sub

Oczywiście, jeśli chcesz przekazać argumenty, możesz to zrobić, aby można je było wywołać za pomocą parametrów, ale jest to podstawa tego, czego potrzebujesz.

Raystafarian
źródło