Найдите все экземпляры текста и сделайте его гиперссылкой с макросом.
необходимые
Я хочу найти все вхождения одного текста в документе MS Word, сделать каждый случай гиперссылкой и изменить общий стиль гиперссылки на один из моих вариантов выбора.
Что я имею
Поскольку я понятия не имею, как выполнить вышеупомянутое требование в целом, я начал с его части, а именно с поиска отдельного экземпляра и его адаптации.
Итак, я записал макрос, который привел к следующему коду. Этот код я адаптировал так, чтобы sub мог принимать параметры для hyperlinkText и подадреса гиперссылки:
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
С этим легко вызвать подпрограмму для нескольких экземпляров слов, таких как:
Call AutoDetectHyperlinksForText("broadcasts", "_broadcastService", "Subtle Emphasis")
Вопрос
Как я могу адаптировать этот макрос так, чтобы он проверял весь документ?
Бонусный вопрос
Есть ли способ изменить приведенный выше сценарий, чтобы я мог сохранить свой выбор и устранить необходимость .MoveLeft
?
В псевдокоде это будет примерно так:
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")
1 ответ
Это найдет слово "Google" (не Google или Google) и гиперссылка на него http:\\google.com
Также применяется стиль
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
Очевидно, что если вы хотите передать аргументы, вы можете сделать это, чтобы их можно было вызывать с вашими параметрами, но это основа того, что вам нужно.