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.