Encuentre todas las instancias de un texto y conviértalo en un hipervínculo con una macro

Encuentre todas las instancias de un texto y conviértalo en un hipervínculo con una macro

Requerido

Quiero encontrar todas las apariciones de un solo texto en un documento de MS Word, convertir cada aparición en un hipervínculo y cambiar el estilo del hipervínculo genérico a uno de mi elección.

Lo que tengo

Como no tengo idea de cómo lograr el requisito anterior en su conjunto, comencé con una parte, es decir, encontrar una instancia única y adaptarla.

Entonces, grabé una macro que resultó en el siguiente código. Ese código lo adapté para que el sub pudiera tomar parámetros para elhipervínculoTextoy el hipervínculosubdirección:

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

Con esto es fácilLlamarel sub para múltiples instancias de palabras, como:

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

Pregunta

¿Cómo puedo adaptar esta macro para que verifique todo el documento?

Pregunta extra

¿Hay alguna manera de modificar el script anterior para poder almacenar mi selección y eliminar la necesidad del archivo .MoveLeft?

En pseudocódigo sería algo como esto:

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")

Respuesta1

Esto encontrará la palabra "google" (no googles ni googleed) y la vinculará ahttp:\\google.com

También aplica el estilo.

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

Obviamente, si desea pasar argumentos, puede hacerlo para poder llamarlo con sus parámetros, pero esta es la base de lo que necesitaría.

información relacionada