Полезное: макросы для Word


Сб Июн 20, 2009 23:15
Jumangee
Во всех бочках затычка

Создание гиперссылок переходов в 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

Вс Июн 21, 2009 2:02
Смелый Хвост
4  8  1  Герой легенд

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


_________________
Эти морские зайцы, эти дохлые медузы отказываются следовать за своим капитаном!
Вс Июн 21, 2009 2:04
Jumangee
Во всех бочках затычка

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

Пн Июл 27, 2009 7:31
danner
2  Свободный искатель

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

Пн Июл 27, 2009 10:38
Jumangee
Во всех бочках затычка

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

Пт Сен 04, 2009 12:24
Jumangee
Во всех бочках затычка

Ещё полезный макрос для 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

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

Пн Окт 19, 2009 12:55
Jumangee
Во всех бочках затычка

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

Пн Окт 19, 2009 13:54
Х_Юрий
5  293  1  2  Герой легенд

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


_________________
Если не сможешь идти по трупам гениев, то они будут идти по твоему...

Jing Wu Hen
Пн Мар 01, 2010 16:06
Jumangee
Во всех бочках затычка

Макрос "обновления" гиперссылок и закладок в книге-игре. Подразумевается, что и те и другие были созданы с помощью вышеописанных макросов. Есть нюанс: НЕ используйте в документах, где существуют гиперссылки и/или закладки НЕ на параграфы – скрипт не отработает или испортит текст.
Когда применять скрипт? Когда текст полностью готов, но после конвертации в 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

Пн Мар 01, 2010 17:43
Jumangee
Во всех бочках затычка

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

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

Пн Мар 15, 2010 15:30
Jumangee
Во всех бочках затычка

Обновление макроса, который делает из выделенной цифры "цель" для гиперссылки. Теперь не страшно, если выделение "захватит" букву или цифру – выделение само "поймает" цифру. Имеются в виду случаи вида "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

Вт Июл 19, 2011 16:49
Пелагей Шестаков
Бывалый авантюрист

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

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

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

Ср Июл 20, 2011 17:53
Lethal Weapon
5  1  Герой легенд

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


_________________
@creativity101 — телеграм-канал про креативность, творчество и всё, что с этим связано (книги, исследования, принципы, методики)
Вс Сен 18, 2011 16:01
Смелый Хвост
4  8  1  Герой легенд

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


_________________
Эти морские зайцы, эти дохлые медузы отказываются следовать за своим капитаном!
Вт Дек 22, 2020 15:37
Vo1t
25  10  1  Герой легенд

У меня это выглядит так:


Sub createbook()
‘ Создает закладки
    For Each aword In ActiveDocument.Words
        If IsNumeric(aword) And aword.Bold Then
            ActiveDocument.Bookmarks.Add Name:=“p” + Trim(aword), Range:=aword
            aword.Style = ActiveDocument.Styles(“Параграф”)
        End If
    Next aword
End Sub

Sub UnderHyper()
‘ Подчеркивает все гиперссылки
For Each ahyp In ActiveDocument.Hyperlinks
    ahyp.Range.Underline = wdUnderlineSingle
Next ahyp
End Sub

Sub DelHyper()
‘ Удаляет все гиперссылки
While ActiveDocument.Hyperlinks.Count > 0
ActiveDocument.Hyperlinks.Item(1).Delete
Wend
End Sub

Sub CreateHyper()
‘ Создает гиперссылки из подчеркнутого текста
For Each aword In ActiveDocument.Words
    If aword.Underline = wdUnderlineSingle And IsNumeric(aword) Then
        ActiveDocument.Hyperlinks.Add Anchor:=aword, SubAddress:=“p” + Trim(aword)
    End If
Next aword
End Sub

Sub UnderStyle()
‘ Ставит ссылкам правильный стиль
For Each ahyp In ActiveDocument.Hyperlinks
    ahyp.Range.Underline = wdUnderlineSingle
Next ahyp
End Sub

Sub ButtonHyp()
‘ Ставит ссылку по CTRL+2
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, SubAddress:=“p” + Trim(Selection.Range)
End Sub

Sub AddBreak()
‘ Разрыв колонки
    Selection.TypeParagraph
    Selection.InsertBreak Type:=1
    Selection.Delete Unit:=wdCharacter, Count:=1
    Selection.Style = ActiveDocument.Styles(“Параграф”)
End Sub

Sub AddPageBreak()
‘ Разрыв страницы
    Selection.TypeParagraph
    Selection.InsertBreak Type:=wdPageBreak
    Selection.Delete Unit:=wdCharacter, Count:=1
    Selection.Style = ActiveDocument.Styles(“Параграф”)
End Sub

Sub SetHyp()
‘ Подчеркивает цифры
For Each aword In ActiveDocument.Words
If IsNumeric(aword) And aword.Bold = False Then
    If CInt(aword) > 16 Then aword.Underline = wdUnderlineSingle
End If
Next aword
End Sub


_________________
53. Если прекрасная принцесса, захваченная мной, скажет: "Я никогда не
выйду за тебя замуж! Никогда, слышишь, НИКОГДА!!!", я отвечу: "Ну
ладно..." и убью ее.
(с) 100 вещей, которые я сделаю, когда стану злым властелином
Представьтесь для добавления комментариев - регистрация в один клик!
Разделы форума