2003/XP/2000 - Навигация в документе word2003
-
kanapfelka
2003/XP/2000 - Навигация в документе word2003
Есть большие документы, в которых хотелось бы организовать удобную навигацию. Так, чтобы с оглавления можно было перемещаться к главам и после глав по нажатию кнопки перемещаться обратно к оглавлению. Как это реализовать если не гиперссылками? Хотелось бы также придумать какой-то макрос для расстановки таких кнопок по всему документу.
-
kanapfelka
Re: 2003/XP/2000 - Навигация в документе word2003
Такое есть и в 2003, правда в чуть менее красивом виде. Но я имею ввиду чтобы кнопки были прямо в тексте, а не в меню навигации.
-
kanapfelka
Re: 2003/XP/2000 - Навигация в документе word2003
Скажем так.
Оглавление.б
кратков
кратког
кратко
Статьи.б
Много текста
кнопка назадв
Много текста
кнопка назадг
Много текста
кнопка назад
Оглавление.б
кратков
кратког
кратко
Статьи.б
Много текста
кнопка назадв
Много текста
кнопка назадг
Много текста
кнопка назад
-
okshef
Re: 2003/XP/2000 - Навигация в документе word2003
kanapfelka, и в 2003-м процесс создания оглавления можно автоматизировать. Единственное - использовать стили и уровни. Если в документе стили не используются, то можно воспользоваться закладками и гиперссылками. Встроенная справка Word объясняет сей процесс весьма доступно.
-
v12345
Re: 2003/XP/2000 - Навигация в документе word2003
Схематично можно так:
1) вставляем стандартным способом оглавление в файл
2) устанавливаем курсор в начало заголовка оглавления и стандартным образом вставляем туда закладку - назовем ее, допустим, "ЗакладкаОглавление"
3) после этого выполняем в документе примерно такой макрос:
Код:
Суть макроса: перебирает все абзацы в документе, находит те, у которых стиль "Заголовок 1" (если нужно - имя стиля меняем в тексте макроса), перед каждым абзацем, который оформлен этим стилем, вставляет новый абзац "Переход к оглавлению", присваивает ему обычный стиль и делает гиперссылкой на закладку, которую мы вставили в начало оглавления.
Макрос писался на скорую руку, могут быть разные тонкости, но кому нужно доведет и разовьет
. А кто не может, лучше проделать такую работу ручками 
1) вставляем стандартным способом оглавление в файл
2) устанавливаем курсор в начало заголовка оглавления и стандартным образом вставляем туда закладку - назовем ее, допустим, "ЗакладкаОглавление"
3) после этого выполняем в документе примерно такой макрос:
Код:
Код: Выделить всё
Sub ДобавитьСсылкиНаОглавление()
Dim P As Paragraph
For Each P In ActiveDocument.Paragraphs
If P.Style = "Заголовок 1" Then
P.Range.Select
Selection.Collapse (wdCollapseStart)
Selection.TypeParagraph
Selection.MoveUp
Selection.Style = wdStyleNormal
Selection.TypeText Text:="Переход к оглавлению"
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
SubAddress:="ЗакладкаОглавление", ScreenTip:="", TextToDisplay:= _
"Переход к оглавлению"
End If
Next P
End SubСуть макроса: перебирает все абзацы в документе, находит те, у которых стиль "Заголовок 1" (если нужно - имя стиля меняем в тексте макроса), перед каждым абзацем, который оформлен этим стилем, вставляет новый абзац "Переход к оглавлению", присваивает ему обычный стиль и делает гиперссылкой на закладку, которую мы вставили в начало оглавления.
Макрос писался на скорую руку, могут быть разные тонкости, но кому нужно доведет и разовьет
. А кто не может, лучше проделать такую работу ручками 
-
kanapfelka
-
kanapfelka
Re: 2003/XP/2000 - Навигация в документе word2003
Цитата kanapfelka:
Гиперссылки это хорошо, а можно кнопку сделать?
Можно, но я бы не советовал.
Впрочем, если хотите должно быть так:
- включаем вкладку Разработчик (если в 2007)
- записываем макрос вставки одной кнопки в текущий абзац
- анализируем код, находим фрагмент, отвечающий непосредственно за вставку кнопки и назначение ей действия.
- корректируем мой вариант.
Лично не пробовал, т. к. считаю, что гиперссылки лучше с точки зрения последующей поддержки. Но скорее всего в моем макросе окажется необходимым заменить лишь строку, начинающуюся со слов ActiveDocument.Hyperlinks.Add
Гиперссылки это хорошо, а можно кнопку сделать?
2003/XP/2000 - Навигация в документе word2003
Можно, но я бы не советовал.
Впрочем, если хотите должно быть так:
- включаем вкладку Разработчик (если в 2007)
- записываем макрос вставки одной кнопки в текущий абзац
- анализируем код, находим фрагмент, отвечающий непосредственно за вставку кнопки и назначение ей действия.
- корректируем мой вариант.
Лично не пробовал, т. к. считаю, что гиперссылки лучше с точки зрения последующей поддержки. Но скорее всего в моем макросе окажется необходимым заменить лишь строку, начинающуюся со слов ActiveDocument.Hyperlinks.Add
-
kanapfelka
Re: 2003/XP/2000 - Навигация в документе word2003
Сделал кнопку, теперь надо к ней привязать действие для переноса на оглавление.
-
kanapfelka
Re: 2003/XP/2000 - Навигация в документе word2003
Код:
Такой вот код помогли мне сделать на
Но есть проблема с его исполнением — проставляет кнопки не на каждой странице, и где ставит берет форматирование текста на кнопке из окружающего текста и все кнопки получаются разные.
Код: Выделить всё
Sub AddButtonToPage(Anchor As Range, Name As String, Top As Single, Left As Single, Caption As String, MacroName As String)
Dim btn As CommandButton
'Добавление кнопки на страницу
With Anchor.Document.Shapes.AddOLEControl("Forms.CommandButton.1", , , , , Anchor)
Set btn = .OLEFormat.Object
With btn
.Name = Name
.Caption = Caption
.AutoSize = True
End With
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.Left = Left
.RelativeVerticalPosition = wdRelativeVerticalPositionPage
.Top = Top - btn.Height
End With
'Добавление кода для кнопки в модуль ThisDocument
Dim CodeModule As VBComponent
Set CodeModule = Anchor.Document.VBProject.VBComponents(1)
With CodeModule.CodeModule
.InsertLines .CountOfDeclarationLines + .CountOfLines, String(2, vbCr)
.InsertLines .CountOfDeclarationLines + .CountOfLines, "Private Sub " & Name & "_Click()" & vbCr & "Application.Run ""WebGoBack""" & vbCr & "End Sub"
End With
End Sub
Sub Main()
Dim oRng As Range
Dim i As Long
Set oRng = ActiveDocument.Range
'Переход последовательно по страницам и вставка кнопок
For i = 1 To ActiveDocument.Range.ComputeStatistics(wdStatisticPages)
Set oRng = oRng.GoTo(wdGoToPage, wdGoToAbsolute, i)
AddButtonToPage oRng, "Button" & i, oRng.Sections.First.PageSetup.TopMargin, oRng.Sections.First.PageSetup.LeftMargin, "К оглавлению", "Run" & i
DoEvents
Next
End SubТакой вот код помогли мне сделать на
http://www.programmersforum.ru/showthread.php?p=620182
Но есть проблема с его исполнением — проставляет кнопки не на каждой странице, и где ставит берет форматирование текста на кнопке из окружающего текста и все кнопки получаются разные.