Найдите все экземпляры текста и сделайте его гиперссылкой с макросом.


1

необходимые

Я хочу найти все вхождения одного текста в документе MS Word, сделать каждый случай гиперссылкой и изменить общий стиль гиперссылки на один из моих вариантов выбора.

Что я имею

Поскольку я понятия не имею, как выполнить вышеупомянутое требование в целом, я начал с его части, а именно с поиска отдельного экземпляра и его адаптации.

Итак, я записал макрос, который привел к следующему коду. Этот код я адаптировал так, чтобы саб мог принимать параметры для 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

Очевидно, что если вы хотите передать аргументы, вы можете сделать это, чтобы их можно было вызывать с вашими параметрами, но это основа того, что вам нужно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.