Не бойся ошибаться.
Ты уже сделал правильный выбор.

 
Во всех бочках затычка

Создание гиперссылок переходов в MS Word

Современному читателю книг-игр хочется комфорта, а комфорт в нашем случае – подразумевает как минимум наличие гиперссылок, которые позволяют не искать нужный параграф в книге, а просто сделать клик.

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

С помощью макросов, "повешенных" на горячие клавиши, процесс создания гиперссылок становится более-менее удобным: выделив номер параграфа-заголовка и нажав горячую клавишу – этот номер становится "целью перехода", а выделив и нажав другую горячую клавишу номер становится "переходом".

Итак, что для этого нужно сделать?

1. Открываем документ с книгрой в Word
2. В меню: "Сервис" выбираем "Макрос"
3. Нажимаем "Создать"
4. Заменяем ВСЁ что появилось в окне НА этот код:

Sub Num_to_Article_LINK()

‘ by Jumangee

    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:=”“, _
        SubAddress:=“p” + Selection.Range, ScreenTip:=”“, TextToDisplay:=Selection.Range
End Sub

Sub ArticleNum_to_ANCHOR()

‘ by Jumangee

    With ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:=“p” + Selection.Range
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
End Sub

5. Закрываем окна Visual Basic
6. Идём в меню "Сервис" – "Настройка", нажимаем внизу "Клавиатура"
7. В категориях выбираем "Макросы", справа выбираем "ArticleNum_to_ANCHOR"
8. Кликаем в белое поле "Новое сочетание клавиш" и нажимаем на клавиатуре горячую клавишу, которая станет превращать "число в цель перехода" (например, я использовал Ctrl+1, т.е. нажимал клавиши Ctrl И 1)
9. Нажимаем "Назначить"
10. В списке "Макросы" (справа вверху) выбираем "Num_to_Article_LINK"
11. Кликаем в белое поле "Новое сочетание клавиш" и нажимаем на клавиатуре горячую клавишу, которая станет превращать "число в переход" (например, я использовал Ctrl+2, т.е. нажимал клавиши Ctrl И 2)
12. Нажимаем "Назначить"

13. Теперь решайте, если хотите чтобы эти макросы были доступны и в другие документах (т.е. во ВСЕХ документах ворда), то в поле "Сохранить изменения в:" выбираем "Normal.dot" (выбрано по-умолчанию).
Если же хотите чтобы эти макросы были доступны только в текущем открытом документе, то выбирете в выпадающем меню название этого документа.

14. Нажимаем "Закрыть", всё – можно пользоваться.

ps: У макросов есть один недостаток – нужно следить, чтобы в "выделение" перед нажатием горячей клавиши НЕ попадали символы НЕ-цифры (пробел тоже!). Т.е. выделять и назначать такой номер нельзя: "123 " и такой тоже: " 123"

ps2: Актуально для Word2003

Сказали спасибо(5): ЮркийСлон, Disel, Х_Юрий, Vo1t, OMu4


Последний раз редактировалось: Jumangee (Пт Сен 04, 2009 12:25), всего редактировалось 1 раз
Герой легенд

Хотелось бы добавить, что, прежде, чем назначать "цель перехода", надо сначала прописать все анкоры, иначе цель не подцепится.


_________________
Эти морские зайцы, эти дохлые медузы отказываются следовать за своим капитаном!


Последний раз редактировалось: Смелый Хвост (Вс Июн 21, 2009 2:08), всего редактировалось 1 раз
Во всех бочках затычка

Смелый Хвост
Это не так. Порядок назначения абсолютно не важен.
Другое дело, что если вы не создадите пару "переход-цель" то ссылка перехода работать не будет.

Свободный искатель

Я так понимаю, что в результате создается закладка на номер параграфа (он же название параграфа), а потом гиперссылка на эту закладку.
Но ведь гиперссылку можно сделать на любой текст со стилем заголовок. Предположим у нас уже все названия параграфов "прозаголовлены", можно ли теперь автоматизировать простановку ссылок?

Во всех бочках затычка

danner
Не знаю, точнее – не представляю себе такой возможности
Автоматизированную простановку ссылок я делаю примерно так:
1. Сохраняю в формате html
2. В редакторе, который умеет регулярные выражения делаю необходимые замены
3. Открываю вордом, подгоняю "напильником" если нужно
К сожалению, в ворде нет регулярных выражений при замене – того что есть в нем недостаточно. Есть подозрение, что это можно сделать с помощью Visual Basic, но тут очень важно знать API работы с документом, а это – очччень много

Во всех бочках затычка

Ещё полезный макрос для Word – удаление гиперссылок в выделенном тексте:

Sub DeleteSelectionHyperLinks()

‘ Удалить все гиперссылки в выделении
‘ 04.09.2009 Jumangee

Try:
For Each aHyperlink In Selection.Hyperlinks
    aHyperlink.Delete
Next aHyperlink
If (Selection.Hyperlinks.Count > 0) Then GoTo Try

End Sub

Переименовываю тему, будем сюда постить полезные макросы

Во всех бочках затычка

Акутальна ли тема? Нужны ли макросы авторам? Или тему можно закрыть/удалить?

Герой легенд

Тему оставить/расширить


_________________
Бешенство заглушило в нём страх; кровь, стучавшая в его сердце, стала кровью борьбы, инстинкт самосохранения перевоплотился в храбрость...

Жозеф Анри Рони-старший «Борьба за огонь»
Во всех бочках затычка

Макрос "обновления" гиперссылок и закладок в книге-игре. Подразумевается, что и те и другие были созданы с помощью вышеописанных макросов. Есть нюанс: НЕ используйте в документах, где существуют гиперссылки и/или закладки НЕ на параграфы – скрипт не отработает или испортит текст.
Когда применять скрипт? Когда текст полностью готов, но после конвертации в PDF ссылки ведут неправильно.
Обязательно делайте копии ваших документов до применения этого скрипта Wink

Sub UpdateSelectionHyperLinks()

‘ Обновить ссылки и закладки на параграфы в документе
‘ 01.03.2010 by Jumangee

Try:

Dim bMs As New Collection
Dim bMe As New Collection
Dim b, i, ii As Long
Dim t As String
Dim e As Boolean
total = ActiveDocument.Bookmarks.Count

‘ Сначала закладки....
For Each aBookmark In ActiveDocument.Bookmarks
    i = aBookmark.Range.Start
    ii = aBookmark.Range.End
    e = False
    For b = aBookmark.Range.Start To aBookmark.Range.End
        Selection.SetRange Start:=b, End:=b + 1
        myRange = Selection.Range
        If myRange <> “” Then
            If (Asc(myRange) < Asc(“0”)) Then
                If e = False Then
                    i = i + 1
                Else
                    ii = b
                    Exit For
                End If
            Else
                If e = True Then ii = b
                e = True
            End If
        End If
    Next b
    bMs.Add (i)
    bMe.Add (ii)
    ‘i = i + 1
    aBookmark.Delete
Next aBookmark
   
For b = 1 To total
    i = bMs(b)
    ii = bMe(b)
    Selection.SetRange Start:=i, End:=ii
    With ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:=“p” + Selection.Range
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
Next b

‘ Теперь по ссылкам...
For Each aHyperlink In Selection.Hyperlinks
    Set myRange = aHyperlink.Range
    aHyperlink.Delete
   
    ActiveDocument.Hyperlinks.Add Anchor:=myRange, Address:=”“, _
        SubAddress:=“p” + myRange, ScreenTip:=”“, TextToDisplay:=myRange
Next aHyperlink

End Sub

Во всех бочках затычка

Вдогонку, макрос, который проходит по всему тексту, и, если есть строки, где кроме цифр ничего нет, делает это число закладкой. Практических испытаний не проходил, если найдёте ошибки/нюансы сообщите.

Sub CreateHyperlinkAnchorsAuto()

‘ Создать закладки на параграфы в документе
‘ 01.03.2010 by Jumangee

For Each aPar In ActiveDocument.Paragraphs
    Dim str As String
    str = CVar(aPar)
   
    i = aPar.Range.Start
    ii = aPar.Range.End
    e = False
    For b = aPar.Range.Start To aPar.Range.End
        Selection.SetRange Start:=b, End:=b + 1
        myRange = Selection.Range
        If myRange <> “” Then
            If (Asc(myRange) < Asc(“0”)) Then
                If e = False Then
                    i = i + 1
                Else
                    ii = b
                    Exit For
                End If
            Else
                If e = True Then ii = b
                e = True
            End If
        End If
    Next b
   
    If IsNumeric(str) Then
        Selection.SetRange Start:=i, End:=ii
        myRange = Selection.Range
        With ActiveDocument.Bookmarks
            .Add Range:=Selection.Range, _
            Name:=“p” + CStr(myRange)
            .DefaultSorting = wdSortByName
            .ShowHidden = False
        End With
    End If
Next aPar

End Sub

Во всех бочках затычка

Обновление макроса, который делает из выделенной цифры "цель" для гиперссылки. Теперь не страшно, если выделение "захватит" букву или цифру – выделение само "поймает" цифру. Имеются в виду случаи вида "12 ", " 45" и " 45 n".
Заменяем весь код:

писал(а): Jumangee
Sub ArticleNum_to_ANCHOR()

на:
Sub ArticleNum_to_ANCHOR()

‘ by Jumangee

    i = Selection.Range.Start
    ii = Selection.Range.End
    e = False
    For b = Selection.Range.Start To Selection.Range.End
        Selection.SetRange Start:=b, End:=b + 1
        myRange = Selection.Range
        If myRange <> “” Then
            If (Asc(myRange) < Asc("0")) Or (Asc(myRange) > Asc(“9”)) Then
                If e = False Then
                    i = i + 1
                Else
                    ii = b
                    Exit For
                End If
            Else
                If e = True Then ii = b
                e = True
            End If
        End If
    Next b
   
    Selection.SetRange Start:=i, End:=ii

    With ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:=“p” + Selection.Range
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
End Sub



Последний раз редактировалось: Jumangee (Сб Сен 17, 2011 13:45), всего редактировалось 1 раз
Бывалый авантюрист

Брат Даннер прав. Все намного проще.

Переходы в Word 2007.
1. Все номера параграфов ставим в тип "Заголовок".
2. Выделяем обрывок текста, который должен стать гиперссылкой.
3. Нажимаем на него правой кнопкой мыши.
4. Выбираем меню "Гиперссылка", и открывается окно.
5. Слева находятся вкладки "Связать с", и нажимаем на вкладку "с местом в документе".
6. Нажимаем на нужный заголовок и жмем ОК.

Гиперссылка работает при использовании сочетания Ctrl+Левая кнопка мыши.

Герой легенд

1. Это работало и в очень старых версиях Ворда.
2. Я так извращался давным-давно и больше не собираюсь.


_________________
Брату Леталю – пулю... эээ... медалю!
Герой легенд

Макросы обновлены, работают )
CreateHyperlinkAnchorsAuto делает закладки при первом запуске, а
ArticleNum_to_ANCHOR надо запускать на каждом переходе на параграф


_________________
Эти морские зайцы, эти дохлые медузы отказываются следовать за своим капитаном!