PDA

Показать полную графическую версию : Навигация в документе word2003


kanapfelka
09-09-2010, 18:23
Есть большие документы, в которых хотелось бы организовать удобную навигацию. Так, чтобы с оглавления можно было перемещаться к главам и после глав по нажатию кнопки перемещаться обратно к оглавлению. Как это реализовать если не гиперссылками? Хотелось бы также придумать какой-то макрос для расстановки таких кнопок по всему документу.

Morpheus
09-09-2010, 18:52
kanapfelka, на 2010 переходить не планируете? Там ничего изобретать на надо:
http://s55.radikal.ru/i149/1009/25/67cd0688eb5ct.jpg (http://radikal.ru/F/s55.radikal.ru/i149/1009/25/67cd0688eb5c.jpg.html)

kanapfelka
09-09-2010, 19:03
Такое есть и в 2003, правда в чуть менее красивом виде. Но я имею ввиду чтобы кнопки были прямо в тексте, а не в меню навигации.

kanapfelka
09-09-2010, 19:24
Скажем так.

Оглавление.

б
кратко
в
кратко
г
кратко


Статьи.

б
Много текста
кнопка назад
в
Много текста
кнопка назад
г
Много текста
кнопка назад

okshef
09-09-2010, 20:43
kanapfelka, и в 2003-м процесс создания оглавления можно автоматизировать. Единственное - использовать стили и уровни. Если в документе стили не используются, то можно воспользоваться закладками и гиперссылками. Встроенная справка Word объясняет сей процесс весьма доступно.

v12345
10-09-2010, 11:10
Схематично можно так:
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
10-09-2010, 14:21
Гиперссылки это хорошо, а можно кнопку сделать?

v12345
13-09-2010, 05:21
Гиперссылки это хорошо, а можно кнопку сделать? »

Можно, но я бы не советовал.

Впрочем, если хотите должно быть так:
- включаем вкладку Разработчик (если в 2007)
- записываем макрос вставки одной кнопки в текущий абзац
- анализируем код, находим фрагмент, отвечающий непосредственно за вставку кнопки и назначение ей действия.
- корректируем мой вариант.

Лично не пробовал, т. к. считаю, что гиперссылки лучше с точки зрения последующей поддержки. Но скорее всего в моем макросе окажется необходимым заменить лишь строку, начинающуюся со слов ActiveDocument.Hyperlinks.Add

kanapfelka
15-09-2010, 14:51
Сделал кнопку, теперь надо к ней привязать действие для переноса на оглавление.

kanapfelka
24-09-2010, 12:28
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

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




© OSzone.net 2001-2012