VBA: добавление стилей к гиперссылкам в слове - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать макрос для добавления гиперссылок с разными стилями в зависимости от уровня, каждая ссылка в новой строке таблицы.

  1. hyperlinktext1 (sub style1) (т.е.жирный и размер 16)

    1.1 hyperlinktext2 (sub style2) (то есть размер 14)

Я убедился, что стили существуют и работают для обычного текста, но я могуне работает с применением стиля к гиперссылке, добавленной с VBA.

Изменение стилей работает с гиперссылками, которые я по каким-то причинам добавляю вручную.

    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
    "file.pdf", SubAddress:="", ScreenTip:="", TextToDisplay:="text1"
    Selection.Style = ActiveDocument.Styles("Sub level1")

    'new row
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.InsertRows 1
    Selection.Collapse Direction:=wdCollapseStart

    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
    "file2.pdf", SubAddress:="", ScreenTip:="", TextToDisplay:="text2"
    Selection.Style = ActiveDocument.Styles("Sub level2")

Есть предложения?

1 Ответ

0 голосов
/ 29 ноября 2018

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

Чтобы получить диапазон гиперссылки, чтобы вы могли применить к нему стиль,вы можете либо переместить начало диапазона выделения, либо, что еще лучше, зафиксировать гиперссылку при ее вставке.

В первом случае вы добавите строку

Selection.MoveStart unit:=wdWord, count:=-1

после оператора добавленияи перед строкой, которая применяет стиль.

Лучший способ выполнить вашу задачу, как показано ниже:

Option explicit

Sub test()

    InsertHyperlinkWithStyle Selection.Range, "c:\path_to\file", ActiveDocument.Styles("Sub level1")

End Sub

Sub InsertHyperlinkWithStyle(this_range As Word.Range, this_file_path As String, this_style As Word.Style)

Dim my_hyperlink As Hyperlink

    Set my_hyperlink = ActiveDocument.Hyperlinks.Add( _
                        Anchor:=this_range.Duplicate, _
                        Address:=this_file_path, _
                        TextToDisplay:="text1")
    my_hyperlink.Range.Style = this_style

End Sub
...